【标准流程】SDD 的五阶段 SOP:打造工业级 AI 研发流水线

1 阅读8分钟

核心导读: 为什么同一款 AI 工具,在 10 倍效能的极客手里是“神兵利器”,在普通团队里却成了制造技术债的“垃圾炮弹”?核心差异在于是否拥有标准化的流水线。 本文将 SDD(规范驱动开发)拆解为清晰的 5 个阶段(确立宪法、功能说明、技术计划、任务原子化、执行与归档)。我们将明确界定在每一个环节中,人类必须把控的“决策节点”与 AI 负责的“执行节点”,并提供可直接复制的配置模板,助您将游击队式的 AI 编程升级为工业化研发体系。

引言:终结“Prompt 游击战”

想象一下你团队现在的 AI 编程日常: 前端小张喜欢用中文对 Cursor 说:“帮我画个登录页面”; 后端老李偏爱用英文长篇大论; 新来的实习生则习惯于不停地按 Tab 键盲目补全代码。 所有人都在用自己的方式“驯服” AI,整个代码库就像一块被不同人随意拼接的百衲衣。一旦出了问题,没人能复现当时的上下文,更没人能接手。

100 多年前,亨利·福特通过**“流水线(Assembly Line)”将汽车从手工奢侈品变成了工业标准品; 在 Software 3.0 时代,面对 LLM 极具随机性的输出,我们也必须建立一条“AI 研发流水线”**。在这条流水线上,输入的是模糊的原始需求,输出的是高内聚、低耦合、且拥有完整 Spec 文档的优质代码。

在 SDD 范式下,我们将其定义为 “五阶段标准作业程序(5-Phase SOP)”


核心图解:SDD 工业化流水线全景

在详细展开之前,请先将这张流水线全景图印在脑海中。请特别注意图中红色的 “🛑 人类决策点(Human Checkpoint)” —— 这是 SDD 区别于“AI 自动驾驶(Auto-Coding)”的绝对生命线。

4-1.png

4-2.png

4-3.png 图 1:SDD 五阶段 SOP 全景工作流


阶段 1:确立宪法(Constitution)—— 固化老手经验

目标: 在 AI 敲下第一行代码前,确立不可违背的全局技术底线。 责任方: 团队架构师(人类)。

在传统的开发中,团队规范(如“接口必须用统一的 Response<T> 包装”)通常写在 Wiki 里,新员工往往记不住;而在 AI 时代,我们通过 .cursorrules 或全局 Prompt 直接将其转化为机器强制执行的“宪法”

🛠️ 【拿走即用】高价值 .cursorrules 模板片段

将以下内容保存在项目根目录的 .cursorrules 中,它将作为中期记忆(参考第三篇)持续作用于每一次对话:

# 全局宪法 (Global Constitution)

## 1. 核心身份与思考模式
你是一个具有极强系统性思维的资深架构师(Staff Engineer)。在任何编码之前,你必须先阅读/生成规范,严格遵循 SDD(Spec-driven development)模式。

## 2. 技术栈与防腐规范
- **语言**:TypeScript 5.0+, Node.js 20+
- **框架**:NestJS
- **绝对禁忌(Red Lines)**  - 严禁在 Controller 层直接书写业务逻辑(必须下沉至 Service 层)。
  - 严禁使用 `any` 类型,遇到类型缺失必须推导并声明 `interface`  - 除非人类显式授权,严禁擅自引入新的 npm 第三方依赖。

## 3. 错误处理标准
- 所有业务异常必须抛出 `BizException`,并携带标准的 ErrorCode,不要直接抛出 `Error`

阶段 2:功能说明(Specify & Clarify)—— 锁定“做什么”

目标: 将模糊的自然语言需求,转化为结构化的、无歧义的意图契约。 责任方: 产品/开发(提出),AI(生成),人类(🛑 核心审查)。

这是 SDD 中最关键的一步。人类提供基础需求(比如“加个订单导出功能”),AI 必须先停止写代码的冲动,开始反问人类边界条件。

操作动作: 在 AI 对话框中输入:

"我要开发【订单导出 Excel】功能。请不要直接写代码。请按照 SDD 流程,先对我进行需求澄清(询问我 3 个最关键的边界问题),然后输出一份 Feature_Spec.md 的第一部分(意图与验收标准)。"

AI 可能会反问:

  1. 一次最多允许导出多少条?(防止内存溢出)
  2. 包含哪些具体字段?
  3. 权限如何控制?

当你回答完这些问题后,AI 生成的 Spec.md 就锁定了业务层面的 What(做什么)此时人类必须介入审查,这是防范“AI 幻觉”的第一道大闸。


阶段 3:技术计划(Plan)—— 锁定“怎么做”

目标: 在修改任何文件之前,明确代码级架构设计和影响范围。 责任方: AI(扫描并提议),人类架构师(🛑 核心审查)。

确定了需求后,接下来是架构对齐。在这一步,AI 会利用其强大的静态代码扫描能力(RAG),检索当前 codebase,并提出技术实现方案。

操作动作:

"需求已确认。请扫描当前项目结构,在 Feature_Spec.md 中补充技术计划(Plan)部分。列出你需要新建、修改的具体文件路径,以及数据库表结构的变更草案。"

此时,AI 可能会在 Spec 中补充如下内容:

## 技术计划 (Technical Plan)
1. **API 层**: `src/api/order.controller.ts` (新增 `exportOrders` 路由)
2. **服务层**: 新增 `src/services/export.service.ts` 
3. **数据层**: 不需要改表,但需要新增基于 `status``time_range` 的联合索引。

人类审查点: 人类此时需要像 Review 架构设计文档一样,审阅这份清单。发现它要在 Controller 里堆代码?打回重写!发现它漏了写单元测试文件?补上!


阶段 4:任务原子化(Tasks)—— 拆解执行清单

目标: 将宏大的架构计划,拆解为 AI 能够单次稳定执行的细粒度任务。 责任方: AI 自动执行。

我们知道,如果让 AI 一次性修改 10 个文件,它大概率会中途崩溃或遗忘上下文。因此,我们必须让 AI 建立一份具有依赖顺序的 Checklists(待办清单)

Feature_Spec.md 的末尾,AI 应当生成:

## 任务清单 (Tasks Checklist)
- [ ] 1. 定义 `ExportOrderDTO` 及验证规则。(依赖项: 无)
-[ ] 2. 编写 `ExportService` 骨架及单元测试。(依赖项: Task 1)
-[ ] 3. 实现基于流(Stream)的 Excel 生成逻辑。(依赖项: Task 2)
- [ ] 4. 注册 Controller 路由并进行端到端测试。(依赖项: Task 3)

为什么这步极具价值? 这份清单是 AI 的“外挂状态机”。AI 在执行编码时,每完成一步都会回头看一眼这份清单。如果中途发生报错或者对话上下文被刷新,只要这份 Markdown 文件在,AI 就能立刻知道:“哦,我刚刚做完了任务 2,现在我应该从任务 3 继续。”


阶段 5:执行与归档(Implement & Archive)—— 闭环与事实同步

目标: 按照规范编码,并通过红绿循环(Red-Green Refactor)确保交付质量,最后更新系统状态。 责任方: AI 编码与自测,人类 Code Review。

一切就绪,终于可以释放 AI 的算力了。

操作动作:

"现在,请严格遵循 .cursorrules 中的宪法,开始执行 Feature_Spec.md 中的 Task 1。写完后运行 npm run test,如果不通过请自行修复。确认通过后再询问我是否继续下一个任务。"

进入这个阶段,你会感受到前所未有的舒畅。 你不再是那个追在 AI 屁股后面修 Bug 的疲惫人类。你变成了一个流水线的主管。AI 像一个极其规矩的熟练工,写好 DTO,跑过测试,然后打个勾 [x] 1. 定义 ExportOrderDTO。接着停下来等你点头。

归档(Archive)的重要性: 当所有任务完成后(全部打上 [x]),流程并没有结束。由于编码过程中可能遇到预料之外的技术阻碍(例如发现某个第三方库版本不兼容,临时换了另一个库),代码现实(Reality)已经与最初的计划(Plan)发生了偏离。

此时的最后一步指令是:

"任务已全部完成。请根据最终的真实代码,反向更新并精简 Feature_Spec.md,将其重命名为 Doc_OrderExport_Archived.md 存入 /docs 目录,作为我们系统的永久资产。"

这就是**“文档即合约”**的闭环。它保证了下一次你再让 AI 介入该模块时,AI 读取到的永远是最准确、最新的上下文,彻底掐断了系统熵增的源头。


结语:让“偶然性”让位于“必然性”

当我们回顾这五个阶段(Constitution -> Specify -> Plan -> Tasks -> Implement),你会发现 SDD 的本质是通过强制的过程管理,将 LLM 的“偶然性表现”转化为“必然的工程结果”。

在这套 SOP 下:

  • 新人不敢再随意制造没有架构设计的垃圾代码。
  • AI 被紧紧束缚在“事实的轨道”上,幻觉被降至最低。
  • 核心资产从难以阅读的代码,变成了清晰可审计的 Markdown 架构文档。

现在,流程已经标准化了,但这套流程完全靠人类手动去复制粘贴 Prompt 来推动,似乎还是有些繁琐。有没有自动化的工具链来承载这套理念? 在下一篇文章 《【工具链对标】OpenSpec vs Spec Kit:如何选择最适合你的 SDD 框架?》 中,我们将深度测评当前行业的顶级框架,探讨如何通过 .md 协议,让 Cursor、Claude Code 等不同工具实现丝滑的任务交接与自动化流转。

敬请期待。