找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3471

积分

0

好友

481

主题
发表于 2026-2-11 09:38:14 | 查看: 91| 回复: 0

AI 编程工具越来越强,但“先写规范再写代码”的 SDD(规范驱动开发)理念也开始流行。面对复杂的项目需求,如何将模糊的想法转化为结构化的行动指南?GitHub 的 Spec Kit 与 Fission AI 的 OpenSpec 是目前最值得关注的两个开源框架,它们的设计思路和使用体验有何不同?本文将为你梳理它们的核心差异,助你根据项目场景做出合适的选择。

OpenSpec与SpecKit对比示意图

先说背景:为什么需要 SDD

当你使用 Cursor、Claude Code 或 Copilot 编写代码时,是否习惯直接将一段需求描述丢给 AI,然后等待输出?这种被称为 “Vibe Coding” 的方式,在处理简单功能时或许有效,一旦需求复杂,生成的代码往往似是而非。问题可能不在于模型不够强大,而在于我们提供的上下文信息不足。

SDD 的理念则截然不同:先将需要完成的任务写成一份结构化的规范文档,再让 AI 依据这份文档来生成代码。规范本身也可以由 AI 辅助生成,但过程中的每一步都能进行人工审查和修正。那么,如何高效地组织和管理这个流程呢?Spec Kit 和 OpenSpec 给出了两种不同的答案。

Spec Kit:GitHub 出品,流程严谨

定位

Spec Kit(GitHub Star 28K+)并非一个AI助手,而是一套为你的AI助手“制定规矩”的工具包。它通过向项目中注入一组斜杠命令(slash commands),供 GitHub Copilot、Claude Code、Gemini CLI 等工具调用。其核心思想是 门控流程 —— 每完成一步并经过人工确认后,才能进入下一步。

安装

它基于 Python 生态,推荐使用 uv 安装:

uv tool install specify-cli --from git+https://github.com/github/spec-kit.git
specify init my-project

specify init 执行后,斜杠命令会被写入项目的 agent 配置目录(如 .claude/.github/prompts/ 等),后续不再需要直接使用 specify 命令。

工作流:7 步门控

Constitution → Specify → Clarify → Plan → Tasks → Analyze → Implement

这是一个严格的线性流程,无法跳过或打乱顺序。

  • /speckit.constitution — 制定章程:创建 constitution.md 文件,用于明确规定项目的铁律,例如测试覆盖率底线、技术栈约束、编码规范等。AI在后续所有步骤中都会参考此文件,有效减少“上下文漂移”。

  • /speckit.specify — 撰写规范:用自然语言描述“要做什么”以及“为什么做”,无需涉及具体技术细节。

  • /speckit.clarify — 消除歧义:AI 会基于上一步的规范,提出一系列结构化的澄清问题,覆盖潜在的模糊点。你的答案会被回写到规范的“Clarifications”部分。这一步非常关键,许多后期的返工都源于前期需求不清。

  • /speckit.plan — 技术方案:你需要给出大致的技术方向(如选择什么框架、采用何种架构),AI 会据此生成详细的技术方案。

  • /speckit.tasks — 任务拆解:AI 将规范和技术方案拆解成一份可执行的任务列表,包含依赖顺序、并行标记([P])、目标文件路径以及测试要求。

  • /speckit.analyze — 一致性检查:交叉检查规范、方案和任务三者之间是否存在矛盾。它会输出一个“Findings Table”,每个发现都有编号(如A1、C2)。你可以直接说“Fix A1, C2”来让AI修正问题。

  • /speckit.implement — 最终实现:基于以上所有产物,开始编写实际代码。

优缺点

优点是流程严谨。每一步都设有人工卡点,clarifyanalyze 环节能显著减少返工,确保最终产出与预期一致。

缺点是流程较重。仅 specify 阶段就可能生成超过800行的文档,整套8个命令走下来需要投入相当多的耐心和时间。对于日常的、小型的功能迭代而言,这套流程可能显得“杀鸡用牛刀”。

OpenSpec:轻量灵活,为存量代码而生

定位

OpenSpec 的设计出发点有所不同——它假设你的大部分工作是在已有的代码库上进行增量修改,而非从零开始。因此,它的一切都围绕 “变更(Change)” 这个概念来组织。

其最新的 v1.0.0 (The OPSX Release) 是一个重大更新,将早期的3步线性流程重构为10个可以自由组合的 OPSX 命令,不再强制要求顺序执行。

安装

OpenSpec 使用 TypeScript 编写,需要 Node.js 20.19.0+ 环境:

npm install -g @fission-ai/openspec
openspec init
# 或直接指定你想用的AI工具
openspec init --tools claude,cursor

目前它支持多种 AI 工具(Claude Code、Cursor、Windsurf、Copilot 等)。初始化后会在项目中生成对应的 skill 文件,不同工具的斜杠命令语法略有差异:

工具 格式
Claude Code /opsx:command
Cursor / Windsurf / Copilot /opsx-command
Trae /openspec-command-name

核心概念:产物依赖图

理解 OpenSpec 的关键在于它的 产物依赖图。每个变更包含4个核心产物:

proposal (根)
├── specs    (依赖 proposal)
├── design   (依赖 proposal)
└── tasks    (依赖 specs + design)

每个产物都有三种状态:BLOCKEDREADYDONE。AI 通过查询 CLI 获取实时状态,自动判断下一步该做什么。这意味着你可以随时回去修改任何产物,系统会自动更新整个依赖链路的状态。

完整命令(10个)

按使用阶段可分为以下几类:

探索

  • /opsx:explore — 在正式启动变更前,用于调研问题、对比方案。此模式具有硬隔离,不会产生任何实际产物或代码变更,纯粹用于思路整理。

规划

  • /opsx:new <name> — 创建一个新的变更,在 openspec/changes/<name>/ 目录下搭建好脚手架。支持 --schema 参数指定自定义的产物流程。
  • /opsx:ff — Fast-Forward(快进模式),按照依赖顺序一口气生成 proposal、specs、design、tasks 四个产物。适合需求非常明确的场景。
  • /opsx:continue — 每次只生成下一个就绪的产物,适合“边想边做”的探索式开发。

    如何选择? 想清楚了就用 ff,没想清楚就用 continue

实现

  • /opsx:apply — 依据 specs 和 design,逐个实现 tasks.md 中列出的任务。支持 /opsx:apply <name> 指定变更名,实现断点续跑。
  • /opsx:verify — 实现完成后运行一致性校验,检查代码是否与规范相符。问题分为三级:CRITICAL / WARNING / SUGGESTION。

归档

  • /opsx:sync — 将变更中的增量规范(Delta Specs)合并回主规范目录。此为可选步骤,在归档时也会提示。
  • /opsx:archive — 在所有产物和任务完成后,将变更移动到 archive 目录,标志其完成。
  • /opsx:bulk-archive — 同时归档多个变更,并自动检测跨变更间的规范冲突。

入门

  • /opsx:onboard — 使用你的真实代码库进行一次完整的引导教学,共11个阶段,全程约15分钟。

三种典型工作流

模式 场景 流程
快速功能 需求清晰 new → ff → apply → verify → archive
探索式 需求模糊 explore → new → continue → ... → apply → verify → archive
并行变更 多任务并行 多个 new 创建并行变更,按需切换执行,最后使用 bulk-archive 归档

几个值得注意的设计

变更隔离
OpenSpec 明确区分“当前系统状态”和“变更提案”:

openspec/
├── specs/          ← 系统当前规范(Source of Truth)
├── schemas/        ← 自定义产物工作流
├── config.yaml     ← 项目配置
└── changes/        ← 各个进行中的变更提案
    ├── add-dark-mode/
    ├── fix-login-bug/
    └── archive/    ← 已完成的历史变更

每个功能都在独立的 change 目录中开发,仅在归档时才合并到主规范。这在多人协作时能有效避免互相干扰。相比之下,Spec Kit 直接修改主规范文件,在协作场景下容易产生冲突。

Delta Spec(增量规范)
变更中的规范会使用 ADDEDMODIFIEDREMOVEDRENAMED 等标记来记录增量部分,而非全量覆盖。这让开发者一目了然地看到本次变更的具体内容。

动态指令(v1.0 新增)
AI 收到的指令不再是静态模板,而是由三层动态组装而成:项目上下文(config.yaml)、产物规则、输出模板。AI 在每次操作前都会查询 CLI 以获取最新状态,因此指令总是与项目的实际情况同步。

CLI 命令

除了集成在AI助手里的斜杠命令,OpenSpec 还提供了一套终端 CLI 命令用于管理: 命令 用途
openspec init 初始化项目
openspec status 查看各产物完成状态
openspec list 列出活跃的变更和规范
openspec show <name> 查看特定变更的详情
openspec view 启动交互式状态仪表盘
openspec validate 校验规范文件格式
openspec archive 在终端中归档变更(--yes 可跳过确认)
openspec feedback 提交产品反馈
openspec completion install 安装 Shell 命令自动补全

对比:怎么选

核心差异

维度 Spec Kit OpenSpec
出品方 GitHub Fission AI
语言 / 安装 Python / uv TypeScript / npm
Stars 28K+ 22K+
设计思路 严格门控,步步审查 依赖图驱动,灵活迭代
擅长场景 新项目从零开始(Greenfield) 已有代码库增量开发(Brownfield)
命令数量 8 个 10 个
规范体量 较重,单阶段可达 800+ 行 较轻,典型文档约 250 行
流程自由度 线性,不可跳步或回退 非线性,随时可回改任一产物
协作友好度 直接修改主规范,多人协作易冲突 变更隔离,仅在归档时合并,冲突少
Token 消耗 较高 较低
变更追踪 无内置机制 Delta Spec + 归档历史

快速上手命令对照:

Spec Kit:

uv tool install specify-cli --from git+https://github.com/github/spec-kit.git
specify init my-project
# 在 AI 助手中:
/speckit.specify → /speckit.clarify → /speckit.plan → /speckit.tasks → /speckit.implement

OpenSpec:

npm install -g @fission-ai/openspec
openspec init --tools claude
# 在 AI 助手中:
/opsx:new feature-name → /opsx:ff → /opsx:apply → /opsx:verify → /opsx:archive

选择建议

场景 推荐
启动全新的、对规范严谨性要求极高的项目 Spec Kit
在已有的大型代码库上进行日常功能迭代或修复 OpenSpec
多人协作开发,需要关注冲突管理和并行工作 OpenSpec
合规性、可审计性要求极高的场景(如金融、医疗) Spec Kit
追求开发速度和迭代灵活性 OpenSpec
需求极其模糊,需要进行深度探索和消歧 Spec Kit

总结

Spec Kit 与 OpenSpec 并非非此即彼的对立关系。实际上,一种高效的组合策略是:在新项目启动阶段,使用 Spec Kit 来严格定义架构和核心规范;当项目进入稳定迭代期后,切换到 OpenSpec 来管理日常的增量变更。这种组合既能确保项目初期的严谨性,又能满足后期快速迭代的需求。

无论选择哪种工具,SDD 的核心价值都在于将开发过程从“模糊的对话”转变为“结构化的协作”。希望这篇对比能帮助你在 云栈社区 的探索之路上,找到适合自己的 AI 辅助开发工作流。




上一篇:2026年发布:Linux内核7.0 RC1候选版本开启7.x新时代
下一篇:SpringBoot实现轻量级Web日志查看器:告别tail -f,支持实时监控与筛选
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-23 17:07 , Processed in 0.429421 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表