导读 :你是不是也遇到过这样的情况------让 AI 帮忙写一段代码,它生成了一个看起来"高大上"的版本,但根本不是你想要的功能,于是你陷入"反复修改→发现新 bug→继续修改"的死循环?这就是 AI 编程的"猜谜陷阱"。本文将用万字详解 + 实战代码示例,手把手教你通过"规范驱动开发(SDD)"彻底告别这种低效模式,让 AI 真正成为你的生产级开发伙伴。
一、为什么我们需要 SDD?从"氛围编码"的痛点到"规范驱动"的进化
在正式开始之前,先来看一个大多数开发者都踩过的坑。
1.1 典型的"猜谜式编程"场景
想象这样一个场景:你需要在项目中"给用户添加数据导出功能"。于是你打开 AI 编程工具,直接说:
"帮我给用户模块加一个导出数据的功能。"
AI 迅速生成了一段代码。代码跑起来似乎"能用"------但当你仔细检查时发现问题重重:
- 连被逻辑删除的记录也被导出了;
- 数据量一大直接超时崩溃;
- 导出接口居然没有做权限校验,任意用户都能调用。
为什么会这样? 因为你的 prompt 里只包含了显式需求,而每个功能背后还有大量"你没有说出来"的隐性要求(如分页、权限、软删除过滤等)。AI 无法读心,只能用"合理猜测"来填充这些空白。研究显示,这种未经规范约束的 AI 代码返工率可高达 67% 。
1.2 什么是 Vibe Coding(氛围编程)?
由 OpenAI 联合创始人 Andrej Karpathy 在 2025 年 2 月提出的"Vibe Coding",指的是开发者"跟着感觉走,完全拥抱指数增长,忘记代码本身的存在"。在短平快的原型开发中,它的效率确实惊人。但当代码规模扩大、功能变复杂后,方向漂移、上下文断裂、改动不可追踪的问题会迅速暴露,最终变成"能跑但不可维护"的技术债务。
1.3 从 Vibe 到 Spec:AI 开发范式的进化
在这种背景下,"规范驱动开发"(Spec-Driven Development)应运而生。它的核心思想很简单:用形式化、可执行的规范作为事实来源,引导 AI 生成一致、可维护、可上线的代码 。工作流从"聊天式编程"升级为 "规范 → 计划 → 任务 → 实现" 的清晰路径。
简单来说:Vibe Coding 是"先做再想",而 SDD 是"先想清楚,再做"。
二、SDD 的核心方法论:从"模糊需求"到"精确执行"
2.1 核心原理:让 AI 读你的"设计稿",而不是猜你的心思
传统开发流程是:需求 → 设计 → 手写代码 → 测试 。SDD 将其改造为:需求 → 详细规范 → AI 生成 → 验证。
在这个模式下,人的职责是"设计与验证"(定义业务规则、架构边界),AI 的职责是"实现与建议"(在清晰的规范下生成代码)。就像建筑行业一样------建筑师出图纸,施工队照着图纸建楼。没有图纸的施工就是一场灾难。
2.2 SDD 的四层结构
一个完整的 Spec 通常包含四个层次:
| 层次 | 作用 | 示例 |
|---|---|---|
| 行为契约 | 定义输入输出约束 | 创建订单时 userID 必须存在、sku 库存必须充足 |
| 接口定义 | 方法签名规范 | createOrder(userID: string, skuList: SKU[]) |
| 数据格式 | Schema 校验规则 | orderID 必须是 32 位字符串,amount 必须精确到小数点后两位 |
| 业务规则 | 状态机逻辑 | 订单创建后必须扣减库存并触发支付流程 |
2.3 关键的认知转变:人做什么,AI 做什么
很多开发者误以为 SDD 就是"把需求写得详细一点"。但真正的关键在于分工重组:
- 人负责:设计 + 验证。包括需求分析、架构决策、接口定义、关键算法设计等需要业务理解和工程判断的部分。
- AI 负责:实现 + 建议。在清晰的设计文档指导下,AI 可以高效地生成符合规范的代码,同时也可以在设计阶段提供参考建议。
三、💻 实战篇:从零搭建一个 SDD 工作流
本节将基于 GitHub 官方开源的 Spec Kit 工具,完整演示一个"从规范到代码"的全流程。
3.1 工具选择:GitHub Spec Kit
GitHub Spec Kit 是 GitHub 官方推出的开源规范驱动开发工具包,专为 AI 编码场景设计。它支持与主流 AI 编程工具(Copilot、Claude Code、Gemini CLI 等)配合使用,将 SDD 从理论概念转化为可执行的工程实践。
3.2 Step 1:初始化项目
我们从一个空白项目开始。首先创建项目目录并初始化 Spec Kit:
bash
mkdir my-sdd-project
cd my-sdd-project
uvx --from git+https://github.com/github/spec-kit.git specify init --here --ai codex
执行后,项目会自动生成以下目录结构:
my-sdd-project/
├── .specify/ # Spec Kit 工作区
│ ├── memory/
│ │ └── constitution.md # 宪法文件(项目核心原则)
│ ├── templates/ # 规范模板
│ └── scripts/ # 辅助脚本
└── .codex/ # Codex 项目配置
└── prompts/ # AI 指令集
💡 提示 :除了 Spec Kit,你也可以使用 OpenSpec (Fission AI 团队的开源框架,专为现有项目的增量迭代设计)或 CoStrict(深信服推出的"严肃编程"模式,专为企业内网开发场景打造)。
3.3 Step 2:编写"宪法"(Constitution)
Constitution 是项目的核心原则文件,它定义了技术选型、命名规范、安全策略等全局约束。在 .specify/memory/constitution.md 中写入以下内容:
markdown
# 项目宪法
## 技术栈
- 语言:TypeScript 5.0+
- 框架:Node.js + Express
- 数据库:PostgreSQL + Prisma ORM
## 编码规范
- 所有 API 必须遵循 RESTful 设计
- 所有数据库操作必须经过 Prisma 类型校验
- 所有用户输入必须经过验证(使用 Zod)
## 安全要求
- 所有敏感数据(密码、Token)必须加密存储
- 所有接口必须包含认证与授权校验
- 日志中不得记录明文敏感信息
## 代码组织
- 模块按业务领域划分(/auth、/users、/orders)
- 每个模块包含 controller、service、repository 三层
有了 Constitution,AI 在后续每一步生成代码时都会自动参照这些约束,而不是"凭感觉写"。
3.4 Step 3:编写 Spec(规格文档)
接下来,使用 Spec Kit 提供的指令生成规格文档:
/speckit.specify "用户管理模块:支持用户注册、登录、个人信息更新,所有接口需要 JWT 认证"
执行后,系统会生成结构化的规格文档。你也可以手写规格文档,下面是一个完整的规格文档示例:
markdown
# 用户认证模块规格文档
## 功能需求
- F1:用户注册(/api/auth/register)
- 输入:email、password、username
- 输出:{ userId, token, expiresIn }
- 约束:email 唯一;password 长度 8-20,包含大小写字母和数字
- 异常:email 已存在 → 409;输入格式错误 → 400
- F2:用户登录(/api/auth/login)
- 输入:email、password
- 输出:{ userId, token, expiresIn }
- 约束:验证密码正确性
- 异常:账号或密码错误 → 401
- F3:获取用户信息(/api/users/me)
- 输入:Authorization: Bearer {token}
- 输出:{ userId, email, username, createdAt }
- 约束:必须携带有效 JWT
- 异常:Token 无效或过期 → 401
## 数据模型
User {
id: string (UUID)
email: string (唯一)
username: string
password_hash: string (bcrypt)
created_at: timestamp
updated_at: timestamp
}
## 验收标准
- [ ] 注册时自动创建用户记录并返回 JWT
- [ ] 登录成功后返回 24 小时有效的 JWT
- [ ] 获取用户信息时校验 Token 有效性
- [ ] 所有接口在 200ms 内响应
💡 规范编写技巧:SCOPE 方法
GitHub 内部对 2500+ 个 AI Agent 配置文件的分析发现:规范的质量比模型的选择更能影响 AI 输出质量。你可以使用 SCOPE 方法来撰写 AI 就绪的规范:
- Scope(范围):明确功能边界,让 AI 知道什么该做什么不该做
- Constraints(约束):列出所有限制条件(技术、安全、性能)
- Outputs(输出):详细定义返回值结构和异常情况
- Path(路径):描述核心执行流程
- Examples(示例):提供输入输出示例作为参考
3.5 Step 4:生成计划(Plan)
有了清晰的 Spec 后,使用以下指令生成实现计划:
/speckit.plan
AI 会根据 Spec 自动生成一个技术计划文档(design.md),内容包括:
markdown
# 技术实现计划
## 模块划分
1. auth.controller.ts - 路由控制器
2. auth.service.ts - 业务逻辑
3. auth.repository.ts - 数据访问层
4. auth.validator.ts - 输入校验
## API 设计
POST /api/auth/register → authController.register
POST /api/auth/login → authController.login
GET /api/users/me → userController.getProfile
## 依赖项
- bcrypt:密码哈希
- jsonwebtoken:JWT 生成与验证
- zod:输入校验
- prisma:数据库操作
## 验证策略
- 单元测试:使用 Jest 测试各 Service 方法
- 集成测试:使用 Supertest 测试 API 端点
3.6 Step 5:拆解任务(Tasks)
计划确定后,将设计文档拆解为可执行的开发任务:
/speckit.tasks
AI 会生成详细的任务清单(tasks.md):
markdown
# 开发任务清单
## 任务 1:数据库模型
- 创建 User Prisma 模型
- 执行数据库迁移
## 任务 2:注册功能
- 实现输入校验(Zod schema)
- 实现密码加密(bcrypt)
- 实现用户创建逻辑
- 实现 JWT 生成
- 编写单元测试
## 任务 3:登录功能
- 实现用户查询
- 实现密码比对
- 实现 JWT 生成
- 编写单元测试
## 任务 4:个人信息获取
- 实现 Token 解析中间件
- 实现用户信息查询
- 编写单元测试
3.7 Step 6:执行实现(Implement)
最后,逐一执行任务:
/speckit.implement
AI 会根据 Constitution、Spec、Plan 和 Tasks 逐任务生成代码。每一步生成的代码都会自动遵循宪法中的规范(如 TypeScript 类型校验、Zod 输入验证等),确保质量。
3.8 💡 实战进阶:借助 AI 快速撰写 Spec
上面的步骤演示了"先写 Spec、再让 AI 执行"的流程。但在实际工作中,从头撰写详尽规范本身也需要不少时间。一个高效的实战技巧是:先用 AI 辅助你生成初版 Spec,再由你审核和完善。
以 SCOPE 方法为例,你可以使用下面的提示词让 AI 帮助你生成结构化的 Spec:
请帮我为"用户数据导出功能"生成一份 AI 就绪的规范文档(Spec),遵循 SCOPE 原则:
S - 范围:用户可以在设置页面导出自己的全部数据(订单、收藏、个人资料)
C - 约束:导出接口必须经过 JWT 认证;导出需异步处理避免超时
O - 输出:返回一个下载链接,有效期 24 小时
P - 路径:用户点击导出 → 后台生成文件 → 通知用户 → 用户下载
E - 示例:curl -X POST /api/export -H "Authorization: Bearer {token}" 返回 {"downloadUrl": "https://..."}
这种"AI 辅助写 Spec → 人工审核完善 → AI 执行实现"的模式,既能享受 AI 的高效,又能保证规范的准确性,是目前业界最推荐的 SDD 落地方式。
📌 规范编写核心心法
规范的目的是命名决策 ,而不是预实现代码 。你需要写明的是"只有经过认证的用户才能触发导出"(决策),而不是"调用
verifyJWT(token)函数,如果返回 401 就抛出异常"(实现)。具体的实现细节应当留给 AI 去完成。
四、最佳实践总结:SDD 成功落地的关键要素
4.1 从小模块开始试点
不要试图一次就把整个项目"SDD 化"。建议从一个独立的、边界清晰的模块(如用户认证模块)开始试点,验证流程后再逐步推广。
4.2 把规范纳入版本管理
规范文档应当像代码一样纳入 Git 管理,通过 PR 进行评审和迭代。这正是 OpenSpec 所倡导的 "规范即源码" 理念。
4.3 建立"规范→生成→验证"闭环
通过持续反馈把错误信息融入规范,形成"规范→生成→验证→反馈→优化规范"的持续迭代循环。某物流系统实践表明,引入 SDD 后,AI 生成的代码一次通过率从 31% 提升至 89% ,缺陷密度下降 76%。
4.4 选择合适的工具
| 工具 | 适用场景 | 特点 |
|---|---|---|
| GitHub Spec Kit | 全新项目 + AI 编程助手 | GitHub 官方出品,与 Copilot 深度集成 |
| OpenSpec | 现有项目的增量迭代 | 轻量级、专为棕地项目设计 |
| CoStrict | 企业内网 + 高质量要求 | 支持私有化部署,"严肃编程"模式 |
五、结语
2025 年末至 2026 年初,AI 编程正经历从"玄学"向"工程学"的重大转变。规范驱动开发(SDD)正是这场范式变革的核心方法论。
它不会让 AI 取代你,但能让 AI 更好地辅助你。当你写出清晰的规范时,AI 从"需要反复调试的实习生"变成了"执行精准可靠的资深工程师"。
现在就尝试在你的下一个模块中应用 SDD 吧。从写好一份 Spec 开始,让 AI 真正成为你信赖的"施工队",而不是"猜谜者"。
💡 下一步行动:
- 下载 GitHub Spec Kit 并初始化你的第一个 SDD 项目
- 参考本文的"用户认证模块"模板编写你的第一份规范文档
- 在团队内部发起一次"规范评审",让规范成为团队共同的语言
如果你在实践 SDD 的过程中遇到任何问题,欢迎在评论区留言交流!