SpecKit 学习指南.md
15.4 KB
Spec Kit 学习指南
基于 GitHub Spec Kit v0.0.79 - 面向 AI 的规范驱动开发工具包
📖 目录
- 快速概览
- 核心理念
- 四阶段工作流详解
- 命令参考手册
- 实战案例演练
- 最佳实践指南
- 常见问题解答
🚀 快速概览
什么是 Spec Kit?
Spec Kit 是 GitHub 于 2025 年 9 月发布的开源工具包,专门为 AI 辅助编程设计的 规范驱动开发(Spec-Driven Development, SDD)框架。
解决的核心问题
| ❌ 传统 AI 编程问题 | ✅ Spec Kit 解决方案 |
|---|---|
| 直接让 AI 写代码 → 不知道 AI 会生成什么 | 📋 先定义规范再写代码 → AI 知道要构建什么 |
| 需求模糊 → AI 基于模式补全而非真正理解意图 | 🎯 分阶段验证 → 每个阶段都有明确的检查点 |
| 缺少检查点 → 发现问题时已经写了大量代码 | ⚙️ 规范即文档 → 规范就是活文档,与代码同步演进 |
| 文档滞后 → 代码写完才补文档 | 🏗️ 架构前置 → 技术决策在编码前确定 |
🎯 核心理念
三大核心原则
- 🔑 规范是唯一真相来源
- 规范定义"是什么"和"为什么"
- 计划定义"怎么做"
- 任务定义"具体做什么"
- ✅ 明确检查点
- 每个阶段完成后必须人工审核
- 发现问题在当前阶段修正,而非继续前进
- 避免"垃圾输入,垃圾输出"
- 🤖 AI 作为字面化搭档
- 不要把 AI 当搜索引擎
- 给 AI 清晰的指令和上下文
- AI 擅长模式匹配,但不擅长读心术
🔄 四阶段工作流详解
Constitution(项目宪法)→ Specify(需求规范)→ Plan(技术方案)→ Tasks(任务分解)→ Implement(代码实现)
🏛️ 阶段 0: Constitution(项目宪法)
- 📍 目的:建立项目的不可协商原则
- ⚡ 命令:
/speckit.constitution - 📁 输出:
.specify/memory/constitution.md - 📝 包含内容:
- 核心开发原则(如:测试优先、模块化架构)
- 技术栈约束(必须使用的框架/工具)
- 质量门禁(部署前必须通过的检查)
- 治理规则(如何修改宪法、代码审查标准)
- ⏰ 使用时机:
- ✅ 项目初始化时(只需要做一次)
- ✅ 项目架构重大变更时
- ❌ 每次开发新功能时(不需要重复)
📋 阶段 1: Specify(需求规范)
- 📍 目的:定义功能的"是什么"和"为什么",不涉及"怎么做"
- ⚡ 命令:
/speckit.specify - 📁 输出:
.specify/memory/spec.md - 🎯 关注点:
- 用户故事(谁、要做什么、为什么)
- 验收标准(如何验证功能完成)
- 用户旅程(用户如何与功能交互)
- 成功指标(如何衡量功能成功)
- 💡 示例输入:
我想添加一个用户积分系统: - 用户发布内容可以获得积分 - 积分可以兑换特殊权益(如头像框、徽章) - 管理员可以手动调整用户积分 - 需要有积分历史记录 - 🚫 规范中不包含(这些留给 Plan 阶段):
- ❌ 使用 PostgreSQL 还是 MySQL
- ❌ API 端点设计
- ❌ 数据库表结构
- ✅ 最佳实践:
- 第一次输入尽可能详细(减少后续迭代)
- 描述边界情况(如:积分不能为负)
- 说明不做什么(明确范围)
🛠️ 阶段 2: Plan(技术方案)
- 📍 目的:定义"怎么做"——技术架构和实现策略
- ⚡ 命令:
/speckit.plan - 📁 输出:
.specify/memory/plan.md - 🎯 关注点:
- 技术栈选择(框架、库、数据库)
- 架构决策(模块划分、API 设计)
- 数据流(数据如何在系统中流动)
- 外部依赖(第三方服务、API)
- 安全考量(认证、授权、数据保护)
- 💡 示例输入:
技术约束: - 必须使用 Cloudflare D1 数据库(项目标准) - 遵循项目的 Module-First 架构 - 使用 Drizzle ORM + Zod 验证 - API 遵循 REST 和 RPC 双模式 - 📝 输出示例:
``
markdown ## 模块设计 - 创建credits模块 -credits.table.ts- 积分表和积分历史表 -credits.handlers.ts- 积分逻辑(增加/扣减/兑换) -credits.routes.ts- REST API -credits.rpc.ts` - RPC API
数据库设计
-
credits表:用户 ID、当前积分、更新时间 -
credit_transactions表:交易历史、类型、金额、原因
API 端点
- GET /credits/:userId - 获取用户积分
- POST /credits/earn - 赚取积分
- POST /credits/redeem - 兑换积分
- GET /credits/history - 积分历史 ``` - ✅ 最佳实践: - 引用项目 Constitution 中的原则 - 说明为什么选择某技术(而非仅列举) - 识别潜在风险和缓解措施
📝 阶段 3: Tasks(任务分解)
- 📍 目的:将 Plan 拆解为可执行的原子任务
- ⚡ 命令:
/speckit.tasks - 📁 输出:
.specify/memory/tasks.md - 🎯 关注点:
- 任务粒度(每个任务 < 200 行代码)
- 依赖关系(任务执行顺序)
- 并行机会(哪些任务可以同时做)
- 测试要求(每个任务的测试覆盖)
- 📝 输出示例: ```markdown ## 任务列表
数据库层 (可并行)
-
Task 1: 创建 credits 表结构
- 文件:
src/server/modules/credits/credits.table.ts - 测试: 表结构验证
- 文件:
-
Task 2: 创建 credit_transactions 表结构
- 文件:
src/server/modules/credits/credits.table.ts - 测试: 表结构验证
- 文件:
业务逻辑层 (依赖数据库层)
-
Task 3: 实现积分增加逻辑
- 文件:
src/server/modules/credits/credits.handlers.ts - 依赖: Task 1, 2
- 测试: 单元测试 + 集成测试
- 文件:
-
Task 4: 实现积分兑换逻辑
- 文件:
src/server/modules/credits/credits.handlers.ts - 依赖: Task 3
- 测试: 边界情况测试(余额不足)
- 文件:
API 层 (依赖业务逻辑层)
-
Task 5: 创建 REST API 路由
- 文件:
src/server/modules/credits/credits.routes.ts - 依赖: Task 3, 4
- 测试: API 集成测试 ``` - ✅ 最佳实践: - 每个任务独立可测试 - 明确文件路径(AI 知道写到哪里) - 标注依赖关系(避免顺序错误) - 遵循 TDD(先写测试,再实现)
- 文件:
💻 阶段 4: Implement(代码实现)
- 📍 目的:按任务逐个实现代码
- ⚡ 命令:
/speckit.implement - 🔄 工作方式:
- AI 按照 Tasks 列表逐个实现
- 每个任务实现完成后,开发者审核
- 审核通过后,继续下一个任务
- 如有问题,修改后再继续
- 🤖 AI 的优势:
- ✅ AI 知道要构建什么(Spec 告诉它)
- ✅ AI 知道怎么构建(Plan 告诉它)
- ✅ AI 知道当前做什么(Task 告诉它)
- 🔍 审核要点:
- 代码是否符合 Constitution 原则
- 是否通过所有测试
- 是否有未处理的边界情况
- 代码可读性和可维护性
📚 命令参考手册
核心命令
| 命令 | 作用 | 输出文件 | 使用时机 |
|---|---|---|---|
\speckit.constitution |
建立项目原则 | constitution.md |
项目初始化(一次) |
\speckit.specify |
定义需求规范 | spec.md |
每个新功能开始 |
\speckit.plan |
创建技术方案 | plan.md |
规范审核通过后 |
\speckit.tasks |
分解任务列表 | tasks.md |
方案审核通过后 |
\speckit.implement |
执行代码实现 | 实际代码文件 | 任务列表审核通过后 |
增强命令(可选)
| 命令 | 作用 | 使用时机 |
|---|---|---|
\speckit.clarify |
澄清模糊需求 | Plan 前,需求不清晰时 |
\speckit.analyze |
检查一致性 | Tasks 和 Implement 之间 |
\speckit.checklist |
生成质量检查清单 | Plan 后,提高质量保证 |
🎮 实战案例演练
场景:为 itypol2 添加用户积分系统
🏛️ Step 0: Constitution(已完成)
✅ 已创建 itypol2 Constitution v1.0.0
- Module-First 架构
- Database-First 工作流
- 端到端类型安全
📋 Step 1: Specify
/speckit.specify
我想为 itypol2 添加用户积分系统:
【功能描述】
- 用户通过以下行为获得积分:
- 发布内容:+10 积分
- 内容被点赞:+2 积分/次
- 每日登录:+5 积分
- 积分可以兑换权益:
- 100 积分 → 专属头像框
- 500 积分 → 作者徽章
- 1000 积分 → VIP 标识
- 管理员功能:
- 手动调整任意用户积分(需审计日志)
- 查看积分统计报表
【边界条件】
- 积分不能为负数
- 兑换后积分扣除,但不可退款
- 积分历史永久保留(用于审计)
【不包含的功能】
- 积分过期机制(v1 不做)
- 积分转赠功能(v1 不做)
- 积分商城(单独项目)
🎯 AI 会生成详细的 spec.md,包含:
- 用户故事(5-10 个)
- 验收标准(明确的可测试条件)
- 用户旅程(从获得积分到兑换的流程)
- 成功指标(如:90% 用户完成首次兑换)
🔍 审核要点:
- ✅ 是否覆盖所有场景
- ✅ 是否有遗漏的边界情况
- ✅ 验收标准是否可测试
🛠️ Step 2: Plan
/speckit.plan
技术约束:
- 遵循 itypol2 Constitution 原则
- 使用 Cloudflare D1 + Drizzle ORM
- 使用 bun run scaffold:module credits 生成模块
- API 遵循 REST + RPC 双模式
- 所有操作需要 Google OAuth 认证
🎯 AI 会生成 plan.md,包含:
- 模块结构(符合 Module-First)
- 数据库设计(credits 表 + credit_transactions 表)
- API 设计(6 个端点)
- 认证策略(Better Auth 中间件)
- 迁移计划(如何从现有系统集成)
🔍 审核要点:
- ✅ 是否符合 Constitution 原则
- ✅ 数据库设计是否规范
- ✅ API 设计是否 RESTful
📝 Step 3: Tasks
/speckit.tasks
🎯 AI 会生成 tasks.md,包含:
## Phase 1: 数据库层(可并行)
- [ ] Task 1.1: 定义 credits 表
- [ ] Task 1.2: 定义 credit_transactions 表
- [ ] Task 1.3: 生成并应用迁移
## Phase 2: 业务逻辑层(依赖 Phase 1)
- [ ] Task 2.1: 实现积分增加 handler
- [ ] Task 2.2: 实现积分兑换 handler
- [ ] Task 2.3: 实现积分历史查询 handler
- [ ] Task 2.4: 实现管理员调整 handler
## Phase 3: API 层(依赖 Phase 2)
- [ ] Task 3.1: 创建 REST routes
- [ ] Task 3.2: 创建 RPC routes
- [ ] Task 3.3: 添加 OpenAPI 文档
## Phase 4: 测试(与 Phase 2-3 并行)
- [ ] Task 4.1: 单元测试 - handlers
- [ ] Task 4.2: 集成测试 - API
- [ ] Task 4.3: 边界测试 - 余额不足等
🔍 审核要点:
- ✅ 任务粒度是否合理
- ✅ 依赖关系是否正确
- ✅ 是否包含测试任务
💻 Step 4: Implement
/speckit.implement
🚀 AI 会按顺序执行:
创建数据库表 → 等待审核 → 实现业务逻辑 → 等待审核 → 创建 API 路由 → 等待审核 → 编写测试 → 等待审核
⚠️ 每步审核后才继续下一步
✨ 最佳实践指南
✅ DO(推荐做法)
- 📝 详细的初始输入
- 第一次
/speckit.specify时,尽可能详细描述需求 - 包含边界条件、不做什么、优先级
- 减少后续来回修改
- 第一次
- ✅ 遵循检查点
- 每个阶段完成后必须审核
- 发现问题立即修正,不要带到下一阶段
- 审核通过才运行下一个命令
- 📜 引用 Constitution
- 在 Plan 中明确引用项目原则
- 让 AI 理解项目的约束和标准
- 保持代码风格一致
- 🔧 小任务优于大任务
- 每个任务 < 200 行代码
- 任务独立可测试
- 便于审核和调试
- 📚 活文档思维
- 规范随代码演进
- 修改代码时同步更新规范
- 规范即文档
❌ DON’T(避免做法)
- 🚫 跳过阶段
- ❌ 不要直接从 Specify 跳到 Implement
- ❌ 不要省略 Plan(会导致架构混乱)
- 🌫️ 模糊输入
- ❌ “帮我做一个用户系统”(太宽泛)
- ✅ “用户系统包含注册、登录、个人资料编辑,使用 Google OAuth”
- 🚫 忽略 Constitution
- ❌ 不要在 Plan 中使用未批准的技术栈
- ❌ 不要违反项目原则(如跳过测试)
- 🦾 过大的任务
- ❌ “实现整个积分系统”(太大)
- ✅ “实现积分增加逻辑”(合理)
- 📉 文档滞后
- ❌ 代码改了但规范不更新
- ❌ 规范与实际代码不一致
❓ 常见问题解答
Q1: 什么时候适合用 Spec Kit?
🎯 适合场景:
- ✅ 绿地项目(全新项目)
- ✅ 大型功能开发(需要多个模块配合)
- ✅ 遗留系统现代化(需要清晰的架构决策)
- ✅ 团队协作项目(需要统一标准)
🚫 不适合场景:
- ❌ 简单 bug 修复(几行代码)
- ❌ 紧急热修复(时间紧迫)
- ❌ 实验性原型(需求不明确)
Q2: 每次都要从 Constitution 开始吗?
📝 不需要!
- Constitution 只在项目初始化时创建一次
- 后续每个功能从 Specify 开始即可
- 只有在项目架构重大变更时才更新 Constitution
Q3: 如果 AI 生成的内容不符合预期怎么办?
🛠️ 解决方案:
- 当前阶段修正 - 直接修改生成的文件(如
spec.md) - 重新运行命令 - 提供更详细的输入重新生成
- 使用
/speckit.clarify- 让 AI 提问澄清需求 - 不要继续前进 - 当前阶段不满意就不要进入下一阶段
Q4: Tasks 太多怎么办?
📊 策略:
- 分批实现 - 不需要一次完成所有任务
- MVP 优先 - 先实现核心功能,再扩展
- 并行开发 - 标记可并行的任务,提高效率
Q5: 如何处理需求变更?
🔄 流程:
- 更新 Spec - 修改
spec.md反映新需求 - 重新 Plan - 运行
/speckit.plan(如果架构变化) - 调整 Tasks - 更新或新增任务
- 版本控制 - 提交规范变更到 Git
Q6: Spec Kit 和传统开发流程的区别?
| 传统流程 | Spec Kit 流程 |
|---|---|
| 需求 → 代码 → 文档 | 需求 → 规范 → 方案 → 任务 → 代码 |
| 文档滞后 | 规范即文档 |
| 架构临时决策 | 架构前置决策 |
| 大块代码审核 | 小任务逐步审核 |
| AI 不知道上下文 | AI 有清晰上下文 |
🎯 核心价值总结
💡 五大核心价值
- 🧠 降低认知负荷 - 每次只关注一个阶段
- ⚡ 提高代码质量 - 架构前置,避免返工
- 🎯 改善 AI 输出 - 清晰上下文 → 准确代码
- 📚 活文档系统 - 规范与代码同步演进
- 👥 团队协作 - 统一标准和流程
🚀 快速开始
# 1. 已完成:初始化 Spec Kit
✅ itypol2 已配置好 Spec Kit
# 2. 开始第一个功能
/speckit.specify [详细描述你的功能需求]
# 3. 后续按流程
/speckit.plan → /speckit.tasks → /speckit.implement
🎉 祝你使用 Spec Kit 愉快! 💫 这份学习指南基于 Spec Kit 官方文档整理,结合了最佳实践和实战经验。建议收藏并在实际项目中反复参考。
补充信息
- 项目地址:GitHub 仓库(假设地址,原文未提供具体链接)
- 许可证:MIT(完全开源,欢迎贡献)
- 核心定位:Spec Kit 代表了 GitHub 对 AI 原生开发(AI-Native Development)的理解——AI 不应替代开发者,而应放大开发者的意图。
本文基于 Spec Kit v0.0.79 版本整理,若后续版本有功能更新,请参考官方文档。