规格驱动开发:让 AI 写代码从『碰运气』变成『可交付』
为什么同一个模型有人用得飞起、有人被气得砸键盘?差别在于你有没有先写规格。本文讲清 Spec-Driven Development 的完整流程与模板。
问题出在”直接开写”
大多数人用 AI 编程的方式是:打开对话框,描述一句需求,看它生成什么,不满意再改。这叫提示即实现,本质是在碰运气。
第一次生成的代码往往看着对、跑起来错。于是你不断追加”再改一下""这里不对”,上下文越来越乱,最后陷入越改越差的泥潭。
根本原因:你在让 AI 同时完成”想清楚”和”写出来”两件事,而这两件事本就该分开。
什么是规格驱动开发
Spec-Driven Development(规格驱动开发)的核心思想是:先让 AI 帮你把需求写成可验证的规格,再让 AI 按规格实现代码。
流程分四步:
- 写规格(Spec):用结构化文档描述”要做什么、输入输出是什么、边界条件是什么”
- 确认规格:你自己审一遍,改到满意——这一步是人类把关的关键
- 生成实现:让 AI 严格按规格写代码
- 验证:用规格里的验收标准逐条测
关键转变:AI 从”猜你想要什么”变成”按合同施工”。
规格模板长什么样
一份能用的规格至少包含:
- 目标:一句话说清这个功能解决什么问题
- 输入:数据结构、取值范围、异常情况
- 输出:正常结果、错误结果的形状
- 边界条件:空值、超大值、并发、时区
- 验收标准:可被测试用例直接翻译的条目
- 不做的事:明确排除范围,防止 AI 自由发挥
最后一条最容易被忽略,却极其重要。不写”不做的事”,AI 就会自作主张加一堆你不需要的东西。
举个对比
差的提示:“帮我写一个解析 CSV 并入库的函数。”
好的规格:
目标:把 UTF-8 编码的 CSV 文件解析为记录并批量写入 Postgres。 输入:文件路径字符串;表名;列映射字典。 输出:成功返回写入行数;文件不存在返回
FileNotFoundError;某行解析失败跳过并记录行号,不中断整体。 边界:空文件返回 0;字段含逗号或换行需正确转义;单文件上限 100 万行。 验收:给出 3 个测试用例——正常、含空行、含非法字符。 不做:不做去重,不做类型转换以外的清洗。
同样的模型,按第二版规格生成,一次通过率会高出一个数量级。
为什么它特别适合 Agent 模式
在 Cursor、Claude Code 这类 Agent 工具里,AI 会自己读文件、跑测试、反复迭代。如果没有规格,它会朝着自己理解的目标狂奔,最后交付一个”能跑但不是你要的”东西。
有了规格,你可以把规格文件放进仓库,让 Agent 每次改动都对照规格自检。规格就成了人和机器之间的唯一事实来源。
三个落地建议
- 规格进版本库:和代码一起 review、一起迭代
- 规格优先于提示:宁可花 10 分钟写规格,也不要花 1 小时来回改
- 用规格写测试:验收标准直接翻译成测试,让 AI 跑通再交付
一句话总结
AI 写代码的瓶颈从来不是模型能力,而是你有没有把需求想清楚并写下来。规格驱动开发把”想清楚”和”写出来”解耦,让 AI 从碰运气变成可交付。先把规格写对,代码只是水到渠成。