password
Created time
Dec 7, 2025 10:57 AM
type
status
date
slug
summary
tags
category
icon
在 Werner Vogels 的演讲中,他提到“英语是新的编译器”,但这并不意味着我们可以随意说话。实际上,自然语言的模糊性是工程精确性的最大敌人。
很多开发者抱怨 AI 写的代码“不能用”或“幻觉严重”,本质上是因为他们把 AI 当作了一个**“算命先生”(猜我想做什么),而不是一个“承包商”**(执行我定义的蓝图)。
这篇指南将基于 Spec-Driven Development (SDD) 理念,把重点放在实战操作上,教读者如何写出结构化、无歧义、机器友好的“技术规格书”。这属于**“模式A:技术深度解析型”**。
拒绝“抽卡式”编程:如何写出让AI秒懂的高质量技术Spec实战指南
标题创作公式解析:
- 痛点+解决方案: “抽卡式编程”精准击中开发者面对AI生成代码随机性的痛点。
- 方法/指南: 明确这是一份“实战指南”,承诺提供可落地的操作方法。
✍️ 引言 (Hook)
你是否经历过这样的场景:在 IDE 里敲下一段 Prompt,满怀期待地按下 Enter,结果 AI 生成的一坨代码逻辑混乱、变量名随性,甚至凭空捏造了 API?然后你不得不花更多时间去修补这些 bug,心里暗骂:“还不如自己写!”
这就是**“感觉编程”(Vibe Coding)的陷阱。Werner Vogels 在 re:Invent 上一针见血地指出:AI 不缺写代码的能力,缺的是对“意图”的精准理解。 如果输入是模糊的,输出必然是垃圾(Garbage In, Garbage Out)。在 AI 时代,区分菜鸟和高手的核心技能不再是背诵 API,而是撰写高质量技术规格说明书(Spec)的能力**。今天,我们就来拆解如何用 Spec-Driven Development (SDD) 让 AI 从“人工智障”变身“顶级架构师”。
🎯 核心要点
- 重新定义 Spec: Spec 不是给老板看的文档,而是给 AI 看的“伪代码级”指令。
- C.C.A. 模型: 掌握 Context(上下文)、Constraints(约束)、Acceptance Criteria(验收标准)三大要素。
- Markdown 驱动: 将 Spec 文件化,作为 AI 理解项目的“唯一真理源”。
- 实战模板: 提供一份直接可用的
.md提示词模板。
📖 文章正文
一、 为什么 Prompt 总是失败?(模糊性 vs 精确性)
如果你告诉 AI:“帮我写一个贪吃蛇游戏”,这就像告诉建筑工:“帮我盖个房子”。
- 是别墅还是茅草屋?
- 用木头还是砖块?
- 有几个窗户?
在传统的开发中,这些细节在你的脑海里,你边写边做决定。但在 AI 辅助开发中,你脑海里的隐性知识(Tacit Knowledge)并没有传达给 AI。
Spec-Driven Development 的核心逻辑是: 在写任何一行代码之前,先用自然语言 + 结构化逻辑,把你的“隐性知识”显性化。不要让 AI 猜,要让 AI 执行。
二、 高质量 Spec 的解剖学:C.C.A. 模型
要让 AI “秒懂”,你的 Spec 必须包含以下三个核心维度:
1. Context (上下文):你在哪,你要去哪
AI 最大的弱点是缺乏全局视野。你需要显式注入背景。
- 当前架构: "我们使用的是 React + Next.js 14 (App Router) + Tailwind CSS。"
- 业务目标: "我们要实现一个用户登录功能,但必须兼容现有的 OAuth 2.0 服务。"
- 角色设定: "你是一位资深的前端架构师,注重无障碍访问 (a11y) 和性能优化。"
2. Constraints (约束):边界在哪里
这是大多数 Prompt 缺失的部分。告诉 AI “不能做什么” 往往比 “做什么” 更重要。
- 技术栈约束: "禁止使用
useEffect处理数据获取,必须使用 React Query。"
- 风格约束: "所有组件必须是函数式组件,使用 TypeScript 强类型,禁止使用
any。"
- 库的限制: "使用
shadcn/ui组件库,不要引入额外的 CSS 文件。"
3. Acceptance Criteria (验收标准):做成什么样算完工
给 AI 设定具体的测试目标。
- "输入错误的密码时,必须显示红色的 Toast 错误提示。"
- "登录成功后,必须重定向到
/dashboard页面。"
- "代码必须通过现有的 ESLint 规则。"
三、 实战:从“烂 Prompt”到“神 Spec”
让我们看一个真实的对比案例。
❌ 烂 Prompt (Vibe Coding):
"帮我写一个 Python 脚本,扫描目录下的文件,把图片都压缩一下。"
结果预测: AI 可能会随机选一个库(Pillow 或 OpenCV),压缩率随机,甚至覆盖源文件导致数据丢失。
✅ 神 Spec (Spec-Driven):
(通常建议新建一个 spec.md 或在 Chat 窗口中分步输入)
Markdown
当你把这个 Spec 喂给 AI(无论是 Cursor、Copilot 还是 Amazon Q),它生成的代码准确率将从 60% 飙升至 99%。
四、 迭代流程:Spec-First Workflow
Werner Vogels 强调的不仅仅是文档,而是流程。建议采用以下步骤:
- Draft (草拟):用自然语言写出粗糙的想法。
- Refine with AI (AI 辅助完善):把草稿发给 AI,问它:“为了实现这个功能,你还需要我补充哪些细节?有没有我没考虑到的边缘情况?”
- 这一步至关重要!利用 AI 来查漏补缺,完善 Spec。
- Generate (生成代码):确认 Spec 无误后,下令生成代码。
- Review (审查):对照 Spec 中的“验收标准”检查代码,而不是凭感觉看。
🔗 类比与图解建议 (Analogy & Visualization)
- 类比建议: 使用**“点菜”**的类比。
- 烂 Prompt: 对厨师说“我饿了,随便做点好吃的”。(厨师可能给你做份你不吃的榴莲披萨)
- 好 Spec: 对厨师说“我要一份五分熟的西冷牛排,黑胡椒汁单独放,配菜要烤芦笋,不要放蒜,我有大蒜过敏”。
- 图解建议: 建议绘制一张**“Spec 驱动开发流程图”**。
- User (模糊意图) -> AI (提问/反问) -> User (确认 Spec) -> Spec.md (清晰蓝图) -> AI (生成代码) -> User (基于 Spec 验收)。
- 重点突出中间的“AI 提问/反问”环节,这是消除歧义的关键。
💡 关键洞察
- 慢即是快: 写 Spec 看起来浪费了 5 分钟,但它节省了你之后 1 小时 debug 和重构的时间。
- 文档即代码: 在 AI 时代,Markdown 文档实际上就是“高阶代码”。你维护的是 Spec,AI 维护的是 Implementation。
- 消除歧义是人类的责任: AI 无法替你做决定。如果 Spec 里没写“处理异常”,AI 写的代码崩了,那是你的责任,不是 AI 的责任。
🚀 行动建议
- 创建模板: 在你的项目根目录创建一个
.cursorrules(如果是 Cursor) 或prompt_template.md,把本文的 C.C.A. 模型固定下来。
- 强制反问: 每次发给 AI 任务时,在末尾加上一句:“在开始写代码之前,请先总结你对任务的理解,并列出你需要澄清的问题。”
- 从重构开始: 找一个你现在的“烂代码”文件,尝试不直接改代码,而是写一份 Spec 让 AI 重构它。
#SpecDrivenDevelopment #PromptEngineering #AI编程 #效率工具 #软件工程