14-Spec-Kit、SDD 和 OpenSpec 到底有什么区别?其实核心思想都一样:先写清楚,再让 AI 干活

Spec-Kit、SDD 和 OpenSpec 到底有什么区别?其实核心思想都一样:先写清楚,再让 AI 干活

最近 AI 编程工具越来越卷,Cursor、Claude Code、Cline、Trae、Copilot 各种 Agent 都开始能"自己读代码、自己改代码、自己跑测试"。

但用久了你会发现一个很现实的问题:

AI 写代码不是最难的,难的是让 AI 持续写对代码。

尤其是项目一复杂,需求一模糊,AI 很容易出现几类经典问题:

  • 一上来就开写,完全不做设计;
  • 改了 A 文件,忘了 B 文件的约束;
  • 当前回答看起来很聪明,下一步就开始"智商降级";
  • 不理解项目长期规则,只围着当前 prompt 打转;
  • 代码能跑,但架构、边界、测试、验收全是糊的。

所以现在很多团队开始讨论 Spec-Kit、SDD、OpenSpec 这一类东西。

尤其是 Spec-Kit,最近在 GitHub 上的关注度明显越来越高,star 数持续增长,说明越来越多开发者开始意识到:AI 编程不能只靠一句 prompt 硬冲,复杂项目必须重新回到"规约先行"的工程化路径上。

它们名字不同,工具形态不同,但底层想解决的是同一个问题:

不要直接让 AI 写代码,而是先把需求、约束、设计、任务和验收标准写成结构化规约,再让 AI 按规约执行。

本文主要讲 Spec-Kit ,同时顺手解释一下它和 SDDOpenSpec 的区别。


先说结论:三者关系可以这样理解

如果只用一句话概括:

SDD 是思想,Spec-Kit 是工程化工具链,OpenSpec 更像开放规约表达方式或轻量规约工作流。

可以简单类比:

名称 更像什么 核心作用
SDD / Specification-Driven Development 方法论 强调先写规约,再写代码
Spec-Kit 工程工具链 把规约驱动开发落成可执行流程
OpenSpec 开放规约/契约表达 用更开放、标准化的方式描述能力、接口、行为或约束

所以你会感觉它们"差不多",这个感觉是对的。

因为它们都站在同一个方向上:

把 AI 从"凭感觉写代码"拉回"按规格施工"。

区别只是在于:

  • SDD 更偏理念;
  • Spec-Kit 更偏落地;
  • OpenSpec 更偏开放描述和规范表达。

一、什么是 SDD?它是"先设计后编码"的思想

很多人会把它写成 SSD,但在 AI 编程语境里,更常见的说法是 SDD:Specification-Driven Development,也就是规约驱动开发。

它的核心很简单:

代码不是从 prompt 直接生成的,而是从 specification 生成的。

传统 AI 编程方式通常是这样:

text 复制代码
用户:帮我做一个忘记密码功能。
AI:好的,我开始写代码......

听起来很高效,但问题是:

  • 忘记密码用手机号还是邮箱?
  • 验证码有效期多久?
  • 是否限制发送频率?
  • 新密码规则是什么?
  • 是否要让旧登录态失效?
  • 前端要不要倒计时?
  • 后端要不要防止用户枚举?
  • 接口错误信息怎么统一?
  • 测试用例覆盖哪些场景?

这些问题如果不提前说清楚,AI 就只能猜。

而 AI 一猜,项目就危险。

SDD 的做法是先把需求整理成类似这样的结构:

text 复制代码
1. 用户故事
2. 业务规则
3. 边界条件
4. 非功能需求
5. 接口约定
6. 数据模型
7. 异常场景
8. 验收标准
9. 测试清单
10. 实施任务

也就是说,SDD 不是一个具体工具,而是一种工作方式。

它强调:

先把"要做什么、不能做什么、做到什么程度算完成"定义清楚,再进入编码阶段。

这和传统软件工程里的需求文档、概要设计、详细设计有点像,只不过它面向的是 AI 协作场景。


二、什么是 Spec-Kit?它是把 SDD 落地的"施工流程"

如果说 SDD 是思想,那 Spec-Kit 就是把这个思想真正工程化的一套工具和流程

我更愿意把 Spec-Kit 理解成:

给 AI 戴上的"工程紧箍咒"。

以前我们用 AI 编程,很像 Vibe Coding:

text 复制代码
我有个感觉 → 写个 prompt → AI 开始生成 → 看结果再改

这种方式适合小脚本、小页面、小 Demo。

但一旦进入真实项目,比如:

  • 登录注册;
  • 忘记密码;
  • 支付订单;
  • 权限系统;
  • 多服务协作;
  • 老项目重构;
  • 涉及数据库迁移;
  • 涉及前后端联调;

直接让 AI 写代码就很容易翻车。

Spec-Kit 的价值在于,它不是让 AI 立刻开工,而是先让 AI 进入一套固定流程。

典型流程大概是:

text 复制代码
/specify  →  生成需求规约
/clarify  →  澄清模糊点
/plan     →  生成技术方案
/tasks    →  拆解实施任务
/implement → 按任务执行
/analyze  →  检查规约、计划、任务是否一致

这就像现实工程里的流程:

text 复制代码
需求确认 → 技术方案 → 任务拆解 → 编码实现 → 验收检查

AI 不再是一个"想到哪写到哪"的实习生,而更像一个被流程约束的工程执行者。


三、Spec-Kit 解决的核心问题:AI 的上下文失控

AI 编程最大的问题不是不会写代码,而是容易忘记上下文。

尤其在复杂项目里,AI 可能当前文件看得很明白,但全局关系完全断掉。

比如你让它做一个"忘记密码"功能,它可能会:

  • 前端新增了页面,但没接入路由;
  • 后端写了接口,但没加 DTO 校验;
  • 密码重置成功了,但没有让旧 token 失效;
  • 返回了"手机号不存在",造成账号枚举风险;
  • 改了 auth-service,却忘记 web 侧 API 类型;
  • 写了代码,但没有补测试和验收标准。

这些问题本质上都是:

AI 缺少一个稳定、长期、结构化的任务上下文。

Spec-Kit 的作用就是把这个上下文沉淀下来。

它会把一个功能拆成多份文档,例如:

text 复制代码
spec.md      需求规格
plan.md      技术方案
tasks.md     实施任务
research.md  调研结论
contracts/   接口契约
quickstart.md 验收说明

这些文件不是写给人看的形式主义文档,而是写给 AI 的"施工图纸"。

只要图纸清楚,AI 每次执行任务时就能回到同一套约束里,而不是每次重新猜。


四、OpenSpec 又是什么?它更偏"开放规约表达"

OpenSpec 这个词在不同团队里可能会有不同用法。

有些人说 OpenSpec,指的是一种开放的 specification 描述方式;有些人会把它理解成类似 OpenAPI 那样的契约文档;也有人把它当成一套面向 AI Agent 的开放规约格式。

但无论具体实现是哪一种,它通常强调的是:

用开放、结构化、可复用的格式来描述系统能力、接口行为、约束条件和验收规则。

所以 OpenSpec 更关注"规约怎么表达"。

比如它可能更在意:

  • 接口契约是否清楚;
  • 输入输出是否标准化;
  • schema 是否可被工具解析;
  • 能不能跨工具、跨团队复用;
  • 能不能作为 AI、测试、文档、代码生成的共同输入。

从这个角度看,OpenSpec 和 Spec-Kit 是互补关系。

OpenSpec 偏"格式和表达",Spec-Kit 偏"流程和执行"。


五、Spec-Kit 和 OpenSpec 的区别

它们最大的区别不在理念,而在关注点。

1. Spec-Kit 更关注流程闭环

Spec-Kit 关心的是:

text 复制代码
一个需求如何从想法变成可执行任务?
AI 在每一步应该产出什么?
什么时候可以编码?
什么时候需要澄清?
什么时候需要分析一致性?

它强调的是完整生命周期。

从需求到实现,中间每一步都要留下规约痕迹。

2. OpenSpec 更关注规约本身的开放性

OpenSpec 关心的是:

text 复制代码
规约如何被不同工具理解?
接口、行为、约束如何标准化描述?
这些描述能不能被测试工具、文档工具、AI 工具共同消费?

它更像一个开放契约层。

3. Spec-Kit 更适合 AI 编码流程控制

如果你的核心问题是:

  • AI 老是乱改;
  • 需求总是说不清;
  • 复杂功能容易做到一半偏航;
  • 多文件、多服务修改不好控制;
  • 希望 AI 先规划、再编码;

那 Spec-Kit 更直接。

4. OpenSpec 更适合统一接口和能力描述

如果你的核心问题是:

  • 多系统之间契约不一致;
  • 接口文档和实现脱节;
  • 希望规约可以被多个工具消费;
  • 希望规范更开放、更标准化;

那 OpenSpec 的价值更明显。


六、为什么我主要推荐讲 Spec-Kit?

因为对大多数正在使用 AI 编程的开发者来说,真正的痛点不是"不知道怎么写规约",而是:

我知道要先设计,但实际一打开 AI 工具,还是忍不住直接让它写代码。

Spec-Kit 的好处是,它把"先设计后编码"变成了强制流程。

你不是靠自觉,而是靠工具约束。

这点很重要。

因为 AI 编程最大的诱惑就是"快"。

你输入一句话,它马上给你 300 行代码,这种反馈太爽了。

但爽完以后,常见结局是:

  • 第一版看着能用;
  • 第二轮需求开始打补丁;
  • 第三轮改动破坏原逻辑;
  • 第四轮 AI 已经忘了之前为什么这么设计;
  • 最后代码变成一坨更难维护的新屎山。

Spec-Kit 的价值就是在这个地方。

它会强制你慢下来:

text 复制代码
别急,先写 spec。
别急,这里还有模糊点。
别急,先出 plan。
别急,先拆 tasks。
别急,先检查一致性。

短期看,它比直接写代码慢。

长期看,它是在帮你省返工成本。


七、用一个例子理解:忘记密码功能

可以拿我当前项目里的"忘记密码"功能举例。

一开始的原始需求其实很简单:

text 复制代码
我想实现忘记密码功能。
前端页面已经有了,位置在 apps/web/src/pages/ForgotPassword。
认证微服务在 services/auth-service。
业务微服务在 services/backend。

如果直接把这段话丢给 AI,它大概率会马上开始改前端页面、写接口、补几个表单校验。

但真正进入项目以后,会发现这里面其实有很多隐含规则:

  • 前端不能直接调用 auth-service,只能调用 backend
  • backend 只是中间层,真正的密码重置能力仍然归 auth-service
  • 当前阶段验证码能力还没接入,所以重置密码暂时不校验验证码;
  • 但获取验证码按钮仍然要有模拟成功或友好提示,不能阻断主流程;
  • 手机号必须是 11 位数字;
  • 新密码和确认密码必须一致;
  • 新密码不能和旧密码相同;
  • 密码重置后,旧密码必须登录失败,新密码必须登录成功;
  • 重置成功后,需要清理用户已有的 Refresh Token,让旧登录态失效;
  • 错误提示不能直接暴露"手机号是否已注册",避免账号枚举;
  • 日志里不能记录明文密码、完整验证码、Token 等敏感信息。

这些内容如果不提前写清楚,AI 就会自己猜。

而 Spec-Kit 的价值,就是把这些"隐藏在脑子里的规则"拆成不同的规约产物。

比如在 spec.md 里,它会把需求拆成用户故事:

text 复制代码
US1:用户可以通过手机号重置密码。
US2:验证码未接入阶段,也能先完成可用恢复流程。
US3:忘记密码流程不能暴露账号存在性和敏感信息。

contracts/forgot-password-api.md 里,它会继续把接口契约写清楚:

text 复制代码
POST /auth/forgot-password/send-code
POST /auth/forgot-password/reset

前端只调用 backend。
backend 再调用 auth-service。
当前阶段 code 字段可以接收,但不作为重置成功的必要条件。
响应里不能返回密码、Token、完整验证码或内部错误细节。

tasks.md 里,它会把实现拆成可执行任务:

text 复制代码
先确认 auth-service、backend、前端 API 的现有结构。
再创建 DTO、响应类型和错误码。
然后实现 auth-service 的 resetForgotPassword。
再实现 backend 的代理入口。
最后把前端 ForgotPassword store 从 localStorage mock 改成真实调用 backend API。

quickstart.md 里,它还会把验收方式写出来:

text 复制代码
使用已注册手机号重置密码。
确认新密码登录成功,旧密码登录失败。
确认验证码未接入时不阻断主流程。
确认未注册手机号不会直接暴露账号是否存在。
分别在 auth-service、backend、apps/web 执行 lint、build、typecheck。

这就是 Spec-Kit 和普通 prompt 最大的区别。

普通 prompt 是:

text 复制代码
帮我做忘记密码。

Spec-Kit 是:

text 复制代码
先明确业务规则。
再明确服务边界。
再明确接口契约。
再明确任务顺序。
最后明确验收标准。

这样 AI 再去实现时,它就不是在"自由发挥",而是在按施工图施工。


八、什么时候不需要 Spec-Kit?

Spec-Kit 不是银弹。

如果你只是写:

  • 一个临时脚本;
  • 一个简单组件;
  • 一个 Demo 页面;
  • 一个一次性数据处理工具;
  • 一个很小的 bugfix;

那没必要上这么重的流程。

直接用 AI 写就行。

否则你会感觉:

我只是想拧一颗螺丝,你却让我先写施工方案。

但如果你面对的是:

  • 复杂业务功能;
  • 多模块联动;
  • 前后端一起改;
  • 涉及认证、安全、支付、权限;
  • 老项目重构;
  • 团队协作;
  • 长期维护项目;

那 Spec-Kit 就非常值得用。

因为这类任务最怕的不是写得慢,而是写错方向。


九、我的理解:Spec-Kit 是 AI 时代的"需求防火墙"

以前我们写代码,最重要的是代码规范。

现在用 AI 写代码,最重要的可能是规约规范。

因为 AI 的输出质量,很大程度取决于输入质量。

你给它一句模糊需求,它就只能输出一个模糊实现。

你给它一套结构化规约,它才可能输出一个可维护、可测试、可验收的工程结果。

所以 Spec-Kit 的意义不是"让 AI 更聪明"。

它真正的意义是:

让 AI 不那么容易乱来。

这也是我觉得 Spec-Kit 最值得讲的地方。

它不是又一个炫酷的 AI 编码插件,而是把 AI 编程重新拉回软件工程基本面:

text 复制代码
需求清楚
边界清楚
设计清楚
任务清楚
验收清楚

只要这五件事清楚,AI 才能真正成为生产力。

否则,它只是一个打字很快的风险放大器。


最后总结

Spec-Kit、SDD、OpenSpec 的区别可以这样记:

  • SDD:规约驱动开发的方法论,强调先写 specification,再写代码;
  • Spec-Kit:把 SDD 落地成 AI 编程流程的工具链,强调从需求到任务再到实现的闭环;
  • OpenSpec:更偏开放规约表达,强调规约可以标准化、结构化、跨工具复用。

它们本质上确实差不多,都是为了解决 AI 编程里的同一个核心问题:

AI 不能只靠 prompt 驱动,而应该靠 spec 驱动。

如果你主要想讲 Spec-Kit,可以把文章重点放在这句话上:

Spec-Kit 不是让 AI 写得更快,而是让 AI 写得更稳。

在 AI 编程越来越普及的今天,真正拉开差距的可能不再是谁更会写代码,而是谁更会给 AI 写"施工图"。

相关推荐
颜进强1 小时前
16-Spec-Kit 是什么?先从整体流程机制讲起
前端·后端·ai编程
xiami_world1 小时前
从prompt到产品:AI 生成 UI 的三条技术路径对比与工程实践
人工智能·ui·ai·prompt·aigc·ai编程
紫电青霜_FullStack1 小时前
如何用PnP Powershell实现search term(labels)功能
后端
悟空瞎说1 小时前
QML 集成 WebView 开发桌面内嵌浏览器实战
前端
八目蛛1 小时前
八目蛛网络(免费工具网站导航)
css·vue.js·开源·vue3·html5·ai编程
wei_shuo1 小时前
KES 数据库开发运维手记:部署、安全、备份与监控实战
后端
foggyprojects2 小时前
层级查询为什么不能只靠 parent_id
后端
二月龙2 小时前
接口慢到被骂?教你5招把响应速度砍掉一半
后端
前端与小赵2 小时前
快速生成安卓证书并打包生成安卓apk(保姆教程)
android·前端