Vibe CodingSpec Coding

AI 编程的结构化演进

本文是 Spec Coding 协作体系的宏观导论,面向所有参与 AI 辅助研发的角色。无需任何前置知识即可阅读。

CHAPTER 01

AI 编程的两种面孔

假设你要做一个优惠券功能。同一个工具,两种截然不同的使用方式。

VIBE CODING

场景 A:Vibe 式

1 打开 AI 编程助手,输入"帮我做一个优惠券功能"
2 AI 刷刷刷生成几百行代码,点 Accept All,不看 diff
3 能领券、能用券,截图发群里,大家说"可以"
4 两周后,满减券和折扣券叠加时金额算错了
5 报错信息贴回 AI → 改一版 → 又挂了 → 再贴再改,三轮
结果:没人敢碰那个 calculateDiscount 函数,包括你自己。
SPEC CODING

场景 B:Spec 式

1 花 20 分钟写结构化需求:券类型、叠加规则、边界条件
2 每条规则对应验收标准(Given-When-Then)
3 把 Spec 喂给 AI,逐条实现、逐条验证
4 每条业务规则都能追溯到 Spec 里的某一行
5 三个月后新同事接手,读 Spec 就能理解系统设计
结果:代码量差不多,但可追溯、可维护、可交接。
"There's a new kind of coding I call 'vibe coding', where you fully give in to the vibes, embrace exponentials, and forget that the code even exists."
— Andrej Karpathy, 2025 年 2 月

Karpathy 本人后来也做了区分:真正的专业级 AI 辅助编程是另一回事——把所有相关上下文塞进去,描述增量变更,让 AI 给出几种高层方案,你选一种,然后逐行审查生成的代码。

CHAPTER 02 · PART A

七阶演进图

从纯 Vibe 到完整 Spec,不是二选一,而是一条连续的光谱。我们把它分为七个阶段。

1
纯 Vibe
做法
自然语言描述需求,AI 生成代码,Accept All,不看 diff。
测试维度
无测试,"能跑就行"。
遗留问题
代码不可解释。45% 的 AI 生成代码存在安全漏洞,且缺乏任何审查机制。
2
开始审查
做法
阅读 AI 生成的代码,通过对话修正明显错误。
测试维度
手动验证基本功能。
遗留问题
审查全凭个人经验,没有标准。AI 反复犯同样的错,你反复纠正。
3
提供上下文
做法
编写 AI-CONTEXT.md,把项目技术栈、代码规范、目录结构等喂给 AI。
测试维度
AI-CONTEXT 中加入测试规范(如"所有 Service 必须有单测")。
遗留问题
代码风格对了,但做出来的功能不是你想要的。
4
结构化需求 + AC
做法
需求拆成功能点,每个附带 Given-When-Then 验收标准。AI 逐条实现、逐条验证。
测试维度
ATDD/BDD 自然引入——AC 本身就是测试用例。
遗留问题
单功能 OK,但集成时接口对不上。优惠券模块和订单模块精度不一致。
5
全局设计 + 分层拆解
做法
先做 Level 0 全局分解——定义模块边界、接口契约、数据流向。再拆成各模块的 Spec。
测试维度
契约测试——接口契约作为模块间验证依据。
遗留问题
Spec 写了但 AI 偷偷跳过了几条 AC,没有机制发现偏差。
6
质量门禁 + 一致性审查
做法
Spec 提交前通过质量审查(HARD-GATE 评分 >= B 级)。实现后做 Spec-代码一致性检查。
测试维度
TDD 作为质量门禁——先从 AC 生成测试用例,再让 AI 写代码使测试通过。
遗留问题
当前项目质量稳定了,但同类问题换个项目又犯一遍。
7
闭环进化
做法
线上 Bug 做根因分类——S(Spec 遗漏)、C(代码偏差)、A(AI 技能缺陷)。分类结果反哺模板和技能。
测试维度
测试缺陷驱动 Spec 进化——每个线上 Bug 触发模板补充,形成闭环。
遗留问题
持续运转的系统,没有终点——需要持续投入维护成本。

跃迁触发表

从一个阶段跃迁到下一个,通常不是因为"我想做得更好",而是因为"痛了"。

跃迁 痛点 关键动作
1 -> 2"线上 bug,回头看代码完全看不懂"立规矩:不理解的代码不许合入
2 -> 3"AI 每次都用错 ORM / 不遵守项目约定"写 AI-CONTEXT.md
3 -> 4"代码风格对了,但做出来的不是我要的"需求结构化,写 AC
4 -> 5"每个功能单独 OK,集成起来接口对不上"先做全局设计和接口契约
5 -> 6"Spec 写了但 AI 偷偷跳过了几个 AC"加质量门禁 + 一致性审查
6 -> 7"同样的问题换个项目又犯了一遍"Bug 根因归类 -> 反哺模板和 Skill
不是每个团队都需要走到第 7 阶段。痛了才进化,没痛别过度设计。
CHAPTER 02 · PANORAMA

流程全景图

每个阶段的完整交付流程是什么样的?哪些环节由人来做,哪些被 AI 接管,哪些用 Spec 驱动了自动化?

尚未引入
纯人工
Vibe(AI 辅助,无结构)
Spec + 自动化
需求表达
架构设计
编码实现
测试验证
代码审查
质量门禁
知识沉淀
1
纯 Vibe
Dev "帮我做 XX"
Dev AI 生成 Accept All
痛点:代码不可解释,出 bug 只能再问一次 AI
2
开始审查
Dev 口头描述需求
Dev AI 生成代码
Dev 手动验证功能
Dev 读码、对话修正
痛点:审查无标准,AI 反复犯同样的错
3
提供上下文
PM / Dev 自然语言描述
Dev AI + CONTEXT
Dev 按规范手动验证
Dev 人工审查代码
Dev 维护 CONTEXT
痛点:代码风格对了,但做出来的不是想要的
Vibe → Spec 转折点
4
结构化需求
+ AC
PM 写结构化 AC
Dev AI 按 AC 逐条实现
QA / Dev AC 即测试 (BDD)
Dev 人工审查代码
痛点:单功能 OK,集成时接口对不上
5
全局设计
+ 分层拆解
PM 写模块 Spec
TL 全局分解 + 契约
Dev AI 按 Spec 实现
QA 契约测试
Dev 人工审查
痛点:Spec 写了但 AI 偷偷跳过了几条 AC
6
质量门禁
+ 一致性审查
PM 写 Spec + AI 审查
TL 技术方案设计
Dev TDD: AC→测试→代码
QA 自动化全覆盖
AI Spec-代码一致性
TL HARD-GATE ≥ B
痛点:当前项目稳定了,但同类问题换项目又犯
7
闭环进化
PM Spec + AI 审查
TL 技术方案设计
Dev TDD: AC→测试→代码
QA 自动化全覆盖
AI 一致性检查
TL HARD-GATE ≥ B
全角色 根因归类→反哺模板
纵向看任一列:同一个环节从"—"到灰色、到紫色、到青色的变化,就是 AI 逐步接管并被 Spec 规范化的过程。横向看任一行:亮起的节点越多,流程越完整、交付越可靠。
CHAPTER 02 · PART B

匹配矩阵

结构化程度应该跟项目复杂度匹配。不够会失控,过度会拖慢。

纯 Vibe
阶段 1
辅助 Vibe
阶段 2-3
轻量 Spec
阶段 4
完整 Spec
阶段 5-7
低复杂度
最佳匹配
略重
过度投入
严重浪费
中复杂度
风险区
最佳匹配
最佳匹配
略重
高复杂度
危险区
严重不足
不足
最佳匹配

对角线上是最优解。偏离对角线越远,要么在浪费时间,要么在积累风险。

"I won't commit any code to my repository if I couldn't explain exactly what it does to somebody else."
— Simon Willison
"Vibe coding is great for momentum, but without structure it collapses under production demands."
— Addy Osmani, Google Chrome Engineering Lead
"Guiding AI to write useful software is a deeply intellectual exercise."
— Andrew Ng
核心原则:结构化程度应匹配项目复杂度,不多不少。
CHAPTER 03

螺旋上升(The Rising Spiral)

随着 AI 模型能力的提升,整条光谱在向上移动——Vibe 的边界在上升,Spec 的天花板也在上升。

2024
纯人力区
Spec 区
Vibe 区
SWE-Bench 4.4%
优惠券叠加需完整 Spec
2025
纯人力区
Spec 区
Vibe 区
SWE-Bench 70%+
GitHub Spec Kit 发布
2026
人力区
Spec 区
Vibe 区
叠加规则已成 Vibe 场景
跨端系统仍需 Spec
未来
人力
Spec 区
Vibe 区
Vibe 持续扩展
Spec 推高复杂度上限

三个关键信号

降级效应

今天需要 Spec 才能搞定的场景,明天用 Vibe 就够了。模型进步会不断拉高 Vibe 的上界。

升级效应

Spec 不会失去价值——它会持续把可交付的复杂度上界往上推。过去做不了的系统设计,有了 Spec + AI 就变得可行。

缩小但永不为零的"纯人类区"

架构取舍、业务优先级判断、跨团队协调——是 AI 无法替代的。这个区域在缩小,但不会消失。

不要问"Vibe 还是 Spec",要问"在当前模型能力和项目复杂度下,我应该站在光谱的哪个位置"。
CHAPTER 04

拆解与聚合(Decompose & Compose)

向下拆解,提升效果;向上聚合,提升效率。两个方向缺一不可。

跨端优惠券系统

App + 小程序 + H5 三端券池同步,核销需实时扣减库存并处理并发冲突

向下拆解:提升效果
Level 0 · 全局拆解

拆成 4 个子系统:券模板管理、发放引擎、核销服务、数据统计。定义子系统间接口契约。

Level 1 · 模块 Spec

以"券模板管理"为例:创建模板、编辑模板、上下架、叠加规则配置。每个功能一个 Spec。

Level 2 · 可执行 Spec

Given 已有满减券 A 和折扣券 B
When 配置 A 和 B 可叠加
Then 两券可同时抵扣,总优惠不超订单 50%

拆解让每一步做得对 ↔ 聚合让整个流程跑得快
向上聚合:提升效率
技能化(Skill)

把"写 Spec -> 审查 -> 修改"的循环封装成可复用技能。30 分钟人工审查变成 5 分钟一键触发。

Agent 化

写 Spec-PRD -> 调用审查 Agent -> 通过后 -> 技术补全 Agent。人从"执行每步"变成"关键节点决策"。

流程编排

多个 Agent 串联成自动化流水线。人的角色后移到架构选型拍板、业务规则裁决、质量门禁判断。

拆解和聚合是一体两面:只拆不聚,效率上不去;只聚不拆,质量兜不住。
CHAPTER 05

范式演变(Paradigm Evolution)

AI 编程这件事,最终会把软件开发带向哪里?

5.1

偶然复杂性会持续被消解

AI 正在大规模消解偶然复杂性——代码实现、测试编写、代码审查、文档撰写。但"我们到底要构建什么"——这是本质复杂性,始终需要人来回答。需求的模糊性、业务的权衡取舍、用户的真实痛点,不会因为 AI 能写代码就自动变清晰。

5.2

Spec 的角色从"执行指令"变为"思考工具"

写 Spec 的过程比 Spec 本身更有价值。当你把"做一个优惠券系统"拆解成子系统、模块、功能点、验收标准时,你被迫把模糊的意图变成精确的定义。类比:我们不会因为有了计算器就停止学数学——数学训练的是思维能力,不仅仅是计算能力。

5.3

新范式的可能性:意图编程

人只表达 What("我需要一个优惠券管理系统"),AI 处理所有的 How。但 APEX-Agents 基准测试显示,顶级模型在真实世界任务中的首次完成率不到 25%。编码门槛在降低,但工程复杂度并没有消失——它只是换了一种形式出现。

Fred Brooks 在《人月神话》中区分了本质复杂性(Essential Complexity)和偶然复杂性(Accidental Complexity)。AI 消解的是偶然复杂性——代码、测试、文档。但本质复杂性——"到底要做什么"——始终需要人来回答。
— Fred Brooks,《人月神话》
范式在变,但有一件事不变:精确表达"要做什么"的能力,是人最核心的竞争力。
CHAPTER 06

进入 Spec Coding 协作体系

找到你的角色,进入对应的工具箱。不需要一次学完,用到哪学到哪。