告别“猜需求”式编程:这个开源工具让 AI 编码变得真正的可控

337 阅读6分钟

在 AI 编程助手大行其道的今天,作为开发者,享受着“一句话生成代码”的便利的同时,也常常陷入一种新的焦虑:AI 真的理解我们要什么吗?

你大概也经历过这样的场景:让 AI “加个登录功能”,结果它自作主张引入了 OAuth2、短信验证码、图形验证码三套方案;或者让它“优化性能”,它直接重写了整个数据层,却没问你是否兼容旧接口。问题不在于 AI 能力不足,而在于——需求从未被清晰锁定

上上周刷 Github,发现一个名为 OpenSpec 的开源项目正试图解决这一痛点。它不取代你的 AI 工具,而是为它们加上一套“规范驱动开发” SDD(Spec-Driven Development)的工作流,让人类和 AI 在写第一行代码前,先就“做什么”达成共识。


什么是 OpenSpec?

OpenSpec 是由 Fission AI 团队发起的一个轻量级开发框架,核心理念很简单:先写规格(spec),再写代码

它在项目中创建两个关键目录:

  • openspec/specs/:存放当前系统的真实行为规范(即“事实来源”)
  • openspec/changes/:存放正在提议中的功能变更(包括提案、任务清单和规格差异)

整个流程围绕四个步骤展开:起草 → 评审 → 实施 → 归档。AI 助手全程参与,但所有输出都基于明确的 spec,而非模糊的聊天上下文。

更重要的是,无需 API 密钥,不绑定特定平台。无论你用 Cursor、Copilot、Claude 还是其他支持 AGENTS.md 协议的工具,都能无缝接入。


实战演示:给博客系统加“点赞”功能

假设你正在维护一个博客系统,现在要添加“用户点赞”功能。传统做法可能是直接对 AI 说:“帮我加个点赞按钮。”但用 OpenSpec,你会这样做:

第一步:初始化项目

npm install -g @fission-ai/openspec
cd super-blog-site
openspec init

工具会引导你选择常用的 AI 助手(如 Cursor、Claude),并自动生成配置和 AGENTS.md 文件。

第二步:创建变更提案

/openspec:proposal  请为博客系统创建一个 OpenSpec 变更提案,用于添加点赞功能,要求已登录用户可点赞,每人每篇文章只能点一次。”

AI 会自动生成以下结构:

openspec/
└── changes/
    └── add-blog-like/
        ├── proposal.md      # 功能背景与目标
        ├── tasks.md         # 实现任务清单
        └── specs/blog/spec.md  # 新增的规格(Delta 格式)

其中 spec.md 会明确写出:

### Requirement: 博客点赞功能
系统 MUST 允许已认证用户对文章点赞,且每人每篇文章仅限一次。

#### Scenario: 首次点赞
- WHEN 用户点击点赞
- THEN 点赞数 +1,且记录该用户已点赞

#### Scenario: 重复点赞
- WHEN 用户再次点击
- THEN 不增加计数,并提示“已点赞”

第三步:评审与调整

你可以用命令查看提案细节:

openspec show add-blog-like

如果发现遗漏(比如忘了“取消点赞”),只需告诉 AI 补充,它会更新 spec 和任务。

第四步:实施与归档

确认无误后,说:

“开始实现这个点赞功能。”

AI 将严格按 tasks.md 生成数据库表、API 接口和前端组件。完成后,执行:

openspec archive add-blog-like --yes

此时,新规格自动合并进 openspec/specs/,成为系统文档的一部分,而变更记录被归档,全程可追溯。


为什么开发者需要它?

  • 减少返工:AI 不再“自由发挥”,所有输出有据可依。
  • 活文档自动生成:每次归档都是对系统行为的一次正式记录。
  • 团队协作更顺畅:新人看 specs/ 就能理解系统设计,无需翻聊天记录。
  • 适配现有项目:特别适合对已有系统做增量改进(1→n 场景),而非仅限从零开始。

与 GitHub 官方 spec-kit 对比:两种“规范驱动”的不同路径

GitHub 在 2024 年底推出的 spec-kit 同样倡导“Spec-Driven Development”(规范驱动开发),其核心目标是让规格成为可执行的起点,而非文档终点。它由 GitHub 内部团队孵化,深度集成 Copilot,并强调通过 /constitution/specify/plan/tasks/implement 等斜杠命令构建一个结构化开发流程。

乍看之下,OpenSpec 与 spec-kit 理念高度一致,但深入使用后会发现,它们代表了两种不同的工程思维:

维度OpenSpecGitHub spec-kit
核心目标管理变更的生命周期
——聚焦“如何安全地修改现有系统”
引导从零构建高质量应用
——聚焦“如何从模糊想法生成可靠实现”
工作流重心围绕 变更提案(Change Proposal)
(起草 → 评审 → 实施 → 归档)
围绕 功能开发阶段(Development Phases)
(定义原则 → 写 spec → 制定计划 → 拆解任务 → 执行)
项目状态假设默认项目已存在(brownfield)
强调与现有代码/文档共存
更适合新项目或独立功能模块(greenfield)
常伴随 specify init 创建全新目录
规格组织方式使用 Delta(增量)模式
变更期间仅描述差异,归档时才合并到主干 specs
规格直接写入 specs/<feature>/spec.md
每个功能对应一个完整 spec 文件
用户角色适合 维护者/迭代者
(如给 SaaS 产品加新功能、重构旧模块)
适合 创建者/探索者
(如 MVP 开发、技术原型验证、创意实验)
输出产物强调 可审计的变更记录
(archive 中保留完整上下文)
强调 可执行的工程资产
(自动生成 plan.md、data-model.md、contracts 等)

举个例子:

  • 如果你要为公司内部 CRM 系统新增“客户标签分组”功能,且该系统已有复杂权限模型和数据库结构,OpenSpec 能让你清晰隔离本次变更的影响范围,避免 AI 误改无关逻辑。
  • 如果你要从零开始做一个照片整理工具,不确定用 React 还是 Svelte,数据库选 SQLite 还是 IndexedDB,spec-kit 能帮你通过多轮 /plan/tasks 探索不同技术栈,并生成完整的架构文档。

总结:不是替代,而是互补

spec-kit 像是一位经验丰富的架构师,擅长从白纸开始搭建一座结构严谨的大厦;
OpenSpec 则像一位谨慎的改造工程师,专注于在不破坏原有建筑的前提下,精准嵌入新功能。

两者都试图解决“AI 编程缺乏确定性”的根本问题,只是切入角度不同。
对于大多数正在维护线上系统的团队而言,OpenSpec 的增量式、低侵入、高可追溯特性,可能更容易融入现有研发流程。而 spec-kit 则在创新探索和标准化启动阶段展现出强大引导力。

无论选择哪一种,它们共同传递了一个信号:未来的高效开发,不再是谁写代码更快,而是谁能把“意图”表达得更清晰、更结构化、更可验证

正如 spec-kit README 所言:“Specifications become executable, directly generating working implementations.”
而 OpenSpec 则补充道:“And every change to that specification must be reviewed, implemented, and archived — just like code.”


写在最后

AI 不会取代程序员,但会重塑开发流程。OpenSpec 的出现,标志着我们正从“让 AI 猜需求”走向“与 AI 共同定义需求”。

它不炫技,不堆概念,只是默默在代码之前,加了一道“确认键”。而这,或许正是可控、可靠、可协作的 AI 编程时代真正开始的地方。

项目地址github.com/Fission-AI/…
推荐尝试:在下一个功能开发前,先运行 openspec init —— 你可能会惊讶于,当 AI 真正“懂你”时,效率能有多高。