介绍
编程语言的发展从最早的机器语言到汇编语言,再到众多高级语言,随着AI的发展,迎来了新的革命。2025年2月Andrej Karpathy 提出了vibe coding 的概念,但是由于上下文缺失,迭代混乱等局限性引发了编程社区的反思,在之后提出了spec coding 的新范式,将AI编程发展到规范化,工程化的轨道上。
vibe coding
vibe coding,氛围式编程,即使用自然语言来完成代码编写。通过自然语言描述需求,AI生成可运行的代码。当输出不符合预期时,用户根据反馈调整 prompt,进行迭代优化,直到解决问题为止,整个过程只用 说想法 -> 看结果 -> 做调整 ->看结果,用户的核心关注点只在结果对不对,而不必关注实现逻辑,底层代码等,全称只用进行表层自然语言交互就行。开发路径只有简单的两步 想法 -> 代码
优势:
- 门槛极低,无需懂编程语言,非技术人员极易上手
- 效率极高
劣势:
- 代码质量
- 架构困难,代码可维护性差
- 大型项目困难
- 上下文漂移
- AI 幻觉不易发现
- 风险与速度并存
适用场景:
-
产品原型快速验证
-
非技术人员使用
spec coding
为了克服 vibe coding 的随意不可控性,出现了spec coding,可以理解为vibe coding 的规范化,工程化。技术人员在对AI添加一定的约束条件下保证AI能够更加精准的深度的理解项目的需求,架构,业务等等,生成出更高效更完善更可控的代码项目。
sepc coding 主要是基于 Harnessing Engineer(驾驭工程) 来实现对AI的可控性进行限制。
主要的编程范式有两种 Specification Driver Development(SDD,规格驱动开发) 和 Test Driver Development(TDD,测试驱动开发)
SDD
SDD 的核心思想为:在AI编写代码之前,必须先将人类模糊的想法转换为清晰,无歧义的结构化规范,让AI 在可控的轨道上运行。
SDD要求在编写代码前,先创建一份详尽、可验证的规格文档,这份文档起到技术契约的作用,是AI生成代码和验证的约束,将规格文档作为唯一真实来源,代码作为其派生产物。
SDD主要由4个步骤:定义规范,指定计划,执行落地,验证闭环。
- Specify(定义规范):定义问题、边界、成功标准。 产出:
spec.md文档 - Plan(制定计划): 架构选型,模块划分,接口定义。 产出:
plan.md文档 - Implement(执行落地):按照Plan 逐个任务实现。 产出:生成代码+测试(通常由TDD生成)
- Validate(验证闭环):自动化测试。产出:测试报告
Spec Coding 三条铁律:
- No Spec, No Code — 没有文档,不准写代码
- Spec is Truth — 文档和代码冲突时,错的一定是代码
- Reverse Sync — 发现 Bug,先修文档,再修代码
spec的质量决定了后续的项目效率,好的spec遵循以下六大要素:
- Problem Statement 定义 “为什么做”
- Success Metrics 定义 “做到什么程度算完”
- User Stories 定义 “谁在什么场景下用”
- Acceptance Criteria 定义 “怎么验证”
- Non-Goals 定义 “什么不做”
- Constraints 定义 “技术约束”
TDD
TDD用于保证 AI生成代码的质量。先写测试用例,让AI根据测试用例生成代码,保证生成的代码能够通过所有的测试用例,简单来说,就是先告诉AI什么是正确的,然后再去实施。
在实际开发中,SDD和TDD是共同使用的,SDD确保AI要做什么,保证行为规范,TDD确保AI做的对不对,保证正确性。
SDD 工具使用
手工维护spec.md、plan.md等规范文档,手工创建目录结构、分支和任务列表,会比较繁琐麻烦,因此有很多支持 SDD 方法论的工具,下面介绍的三款是 OpenSpec、Spec-kit 和 Superpowers
-
OpenSpec是一款轻量级 SDD 工具,所有阶段手动实现
-
Spec-kit 是 github 官方github开发的 SDD 工具,所有阶段手动实现
-
Superpowers 是一个 AI skills 框架,所有阶段由AI触发调用实现
头脑风暴 -> 工作树隔离 -> 编写实现计划 -> 子智能体执行 -> 测试驱动开发 -> 验证收尾
三种工具对比
| 维度 | OpenSpec | Spec-kit | Superpowers |
|---|---|---|---|
| 定位 | 轻量规范层,低仪式感 | 结构化工具包,强约束 | 工程技能框架,行为约束 |
| 核心理念 | fluid not rigid | 宪法治理 + 门禁约束 | Process over Prompt |
| 触发方式 | 手动斜杠命令 | 手动斜杠命令 | 自动触发技能 |
| 安装方式 | npm全局安装 | uv安装Python包 | 插件 / git克隆 |
| 支持工具 | 20+种 | 8+种 | Claude Code/Cursor等 |
| 核心制品 | proposal/delta specs/tasks | constitution/spec/plan/tasks | 技能文件(SKILL.md) |
| 阶段门禁 | 无刚性门禁,随时迭代 | 有明确门禁阶段 | 技能触发机制约束 |
TDD内置 | ❌ | ⚠️(约束检查) | ✅(完整TDD循环) |
| 并行任务 | 无内置并行 | [P]标记支持 | 子智能体并行执行 |
| 存量项目 | ✅ 原生支持 | ✅ 支持 | ✅ 支持 |
| 社区背景 | Fission AI | GitHub官方 | 开源社区 |
| 命令风格 | /opsx:* | /speckit.* | 无命令,自动触发 |
参考
2026-06 补充:AI 编程范式的工程化理解
AI 编程可以粗略分成三层:
- Vibe Coding:人用自然语言描述目标,AI 直接生成代码,适合原型和低风险任务。
- Spec Coding / SDD:先把需求、约束、验收标准写成结构化规范,再让 AI 实现。
- Agentic Engineering:AI 不只写代码,还会读仓库、拆任务、跑测试、修复问题、总结结果,但仍需要规范、工具权限和验证闭环约束。
真正的变化不是“以后不用程序员”,而是工程师的工作重心从逐行编写,转向定义问题、约束边界、审查方案、验证结果和维护系统一致性。
Vibe Coding 的适用边界
| 适合 | 不适合 |
|---|---|
| 一次性脚本 | 金融、医疗、权限、安全敏感代码 |
| UI 原型 | 长期维护的大型系统 |
| Demo 和概念验证 | 多团队协作项目 |
| 学习新 API | 需要严格合规和审计的代码 |
| 低风险内部工具 | 复杂并发、分布式一致性、数据迁移 |
Vibe Coding 最大的问题不是“AI 会不会写错”,而是没有足够的结构让错误暴露出来。需求不清、上下文不完整、没有测试、没有代码审查时,AI 生成越快,技术债可能累积越快。
Spec Coding 的核心制品
| 制品 | 解决的问题 | 应包含内容 |
|---|---|---|
spec.md | 要做什么 | 背景、目标、非目标、用户故事、验收标准 |
plan.md | 怎么做 | 架构、模块、接口、数据流、风险 |
tasks.md | 如何拆 | 可独立完成的任务、顺序、并行标记 |
| tests | 如何证明正确 | 单元测试、集成测试、端到端测试、回归用例 |
| changelog / decision log | 为什么这样做 | 关键决策、替代方案、取舍原因 |
好的 Spec 应该能让另一个人或另一个 AI 在不反复追问的情况下理解目标、边界和验收方式。
SDD + TDD 的组合流程
需求想法 -> spec.md 明确目标和验收 -> plan.md 设计模块和接口 -> tests 定义正确行为 -> implement 编码实现 -> validate 测试、审查、修正文档TDD 在 AI 编程中的价值更明显:测试相当于给 AI 一个可执行的“正确性边界”。AI 可以生成实现,但测试负责持续判断实现是否偏离预期。
RAG、上下文和工具调用
AI 编程质量很大程度取决于上下文质量。常见上下文来源包括:
- 仓库代码:现有架构、命名、封装、测试风格。
- 文档:需求、接口、设计规范、运行手册。
- 运行结果:测试日志、编译错误、lint 输出、性能数据。
- 外部知识:官方文档、版本说明、规范。
RAG 的作用不是让 AI “知道更多”,而是让 AI 在当前项目中拿到更相关、更可信、更可引用的材料。没有检索和验证的 AI 编程,很容易把通用答案误套到具体项目。
工具对比补充
| 工具/思路 | 重点 | 适合场景 |
|---|---|---|
| OpenSpec | 轻量变更规范 | 小团队、渐进式规范 |
| GitHub spec-kit | 结构化 SDD 工作流 | 希望强约束 spec/plan/tasks 的项目 |
| Superpowers | 技能化工作流 | 需要把流程固化到 AI 行为中的个人或团队 |
| Codex / Claude Code 类代理 | 读仓库、改代码、跑测试 | 已有代码库中的迭代开发 |
| Cursor / IDE AI | 贴近编辑器补全和局部修改 | 日常编码、局部重构 |
实践建议
- 低风险探索可以 vibe,高风险或长期项目必须写 spec。
- AI 生成代码前,先让它读相关文件并说明现有模式。
- 复杂任务要拆成可验证的小任务,不要一次生成整套系统。
- 把测试、lint、类型检查、构建作为默认验证闭环。
- 代码和文档冲突时,先更新规范,再改实现。
- 不要把密钥、生产数据、不可公开业务细节随意放进 prompt。
补充参考
- Andrej Karpathy 关于 vibe coding 的讨论:https://x.com/karpathy/status/1886192184808149383
- Collins Dictionary - Vibe coding:https://www.collinsdictionary.com/submission/28028/vibe+coding
- GitHub spec-kit:https://github.com/github/spec-kit
- Fission AI OpenSpec:https://github.com/Fission-AI/OpenSpec
- Superpowers:https://github.com/obra/superpowers
- OpenAI Codex:https://openai.com/codex/
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时