2.6 方案先行实现为后——让 AI 代码质量翻倍的核心技巧

1 阅读17分钟

模块二:AI 协作方法论 | 第06讲:方案先行实现为后——让 AI 代码质量翻倍的核心技巧

项目:VibeNote 智能笔记
本讲只讲一件事:先让模型把思路写成「可审查的工件」,再让它写代码。


一、开场:为什么「一步到位」最容易翻车

reference/practice/vibe-coding-methodology.md 把这条方法论写得很透:直接生成代码时,模型在「边想边写」,容易出现逻辑断层与前后不一致;先输出实现方案,再基于方案写代码,方案文本会成为后续生成的锚点。这和思维链(CoT)是同一类技巧:把复杂任务拆成「先想清楚再动手」,稳定性会明显提升。

我想补一个工程视角:方案先行不是拖延,是把返工前移。你在文档里否决一个错误方向,成本是一次对话;你在代码里否决,成本是一次合并与一次回滚。

flowchart TD
  Req[需求] --> Plan[技术方案]
  Plan --> Rev[人审/修订]
  Rev --> Impl[分模块实现]
  Impl --> Test[逐步验证]
  Test --> Ship[合并交付]
flowchart LR
  Bad[边想边写] --> Drift[前后不一致]
  Good[先方案后代码] --> Anchor[方案锚点]
  Anchor --> Stable[更稳定实现]

二、方案先行到底是什么:不是写 PRD 作文

「方案」最低应包含:

  1. 模块边界:哪些文件/目录会动,哪些绝不碰
  2. 数据流:输入从哪来,状态放哪,持久化怎么走
  3. 接口契约:请求/响应类型、错误语义
  4. 风险与非目标:最容易翻车的点、本期不做的事
  5. 验证计划:命令 + 手工路径 + 边界用例

满足这五条,才配叫「可实施方案」。否则只是愿望清单。


三、人审方案:审什么、怎么审

建议用「删、砍、加」三字诀:

  • :过度设计、无关抽象、顺便重构
  • :范围蔓延、隐式需求
  • :遗漏的边界、错误处理、观测点(日志/指标)

参考方法论也提醒:AI 会堆设计模式;审查阶段就要砍。


四、分模块实现:自上而下设计,自底向上落地

参考文章给出的节奏仍然成立:先蓝图,再基础模块,再功能模块,最后集成。映射到 VibeNote:

  1. 数据与类型(Note 模型、校验)
  2. 服务端读写(Route Handler / Server Action)
  3. 编辑器 UI(textarea + 预览)
  4. AI 能力(摘要/扩写/改写)
  5. 端到端验证与文档同步
flowchart TB
  B[蓝图/契约] --> D[数据层]
  D --> A[API 层]
  A --> U[UI 层]
  U --> AI[AI 集成]
  AI --> E2E[端到端验证]

五、每一步都要验证:小步慢跑不是口号

每完成一个模块,立刻跑:

  • pnpm lint
  • pnpm build(关键节点)
  • 手工路径(创建/编辑/刷新)

参考作者强调:单测与细粒度测试在 vibe coding 里更重要,因为 bug 堆积后在长上下文里爆炸。


六、文档驱动开发(DDD 不是领域驱动那个 DDD)

这里的 DDD 指 Document-Driven Development:方案、接口、目录 README、决策记录(ADR)与代码同步演进。分形文档结构(第03讲)是落地工具。


七、可运行示例:用 TypeScript 记录「方案评审结论」

把评审结构化,避免口头说了就算:

// scripts/design-review.ts
// npx tsx scripts/design-review.ts

type Review = {
  feature: string;
  approved: boolean;
  changes: string[];
  blockers: string[];
};

const r: Review = {
  feature: "VibeNote Markdown 分栏预览",
  approved: true,
  changes: ["预览使用 debounce 300ms", "禁止引入新编辑器依赖"],
  blockers: [],
};

console.log(JSON.stringify(r, null, 2));

八、完整工作流示例(你可以复制当 checklist)

  1. 需求:一句话 + 非目标
  2. 让 AI 输出方案(含文件清单/风险)
  3. 你修订方案并写 docs/adr/xxx.md(可选)
  4. 分模块让 AI 实现,每模块后验证
  5. 合并前更新目录 README
  6. 复盘:哪些假设错了,规则文件要不要补

九、与 Prompt / Workflow / 规则文件的关系

  • 第01讲:单次指令质量
  • 第02讲:流程与检查点
  • 第03讲:上下文调度
  • 第04讲:被动规则
  • 第05讲:调试工序
  • 本讲:把「设计」变成显式锚点——它们是乘法关系。

十、思考题

  1. 你最近一次「先写代码后补方案」的返工成本是多少?
  2. 你会把「方案必须包含文件清单」写进团队规范吗?
  3. 你如何防止方案审完却没人更新文档?

十一、下讲预告

下一讲项目实战:VibeNote V2.0,Markdown 分栏预览 + AI 写作助手,把模块二所有方法一次性落地。


参考阅读reference/practice/vibe-coding-methodology.md(方案先行、小步验证、文档记忆)。


十二、方案模板(VibeNote 可直接复制)

背景与目标

  • 用户故事:
  • 成功标准(可验证):

非目标(本期不做)

模块与文件清单(预测)

  • path — 职责一句

数据流

  • 输入 / 状态 / 持久化

API 与类型契约

  • 请求 / 响应 / 错误语义

风险与缓解

验证计划

  • 命令 / 手工路径 / 边界用例

十三、方案评审「红灯问题」清单

  1. 失败时用户看到什么?
  2. 幂等吗?重复点击会怎样?
  3. 需要迁移吗?如何回滚?
  4. 性能与安全边界是什么?

十四、分模块颗粒度:不大不小

  • 一个 PR 一个可演示竖切
  • 单 PR 文件数设软上限
  • 每模块结束可 build

十五、方案 v0 → v1:追问就是审查

第一轮输出方案 v0,用红灯清单追问得 v1,再批准实现。


十六、方案阶段就列验收用例

用 Given/When/Then 描述 3~5 条,哪怕先手工执行。


十七、何时写 ADR

新依赖、数据模型变化、安全策略变化、关键业务规则变化——满足任一就写。


十八、方案批准后仍漂移怎么办

新需求新开工单,不混进同一实现线程。


十九、VibeNote V2 方案里必须先锁的四件事

textarea 是否保留、AI 是否仅服务端、流式状态机、失败时是否仍可保存。


二十、可运行示例:模块队列 JSON

// scripts/module-queue.ts
import { writeFileSync } from "node:fs";

const q = {
  feature: "v2-markdown-ai",
  modules: [
    { id: "types", tasks: ["NoteDraft 类型", "zod schema"] },
    { id: "api", tasks: ["/api/ai/writing route"] },
    { id: "ui", tasks: ["MarkdownEditor 分栏", "toolbar"] },
    { id: "verify", tasks: ["lint", "build", "manual"] },
  ],
};

writeFileSync("docs/module-queue.json", JSON.stringify(q, null, 2));
console.log("written docs/module-queue.json");

二十一、团队阻力:用数据说话

统计两周返工 issue 里「范围/契约不清」占比,用数字推动方案先行。


二十二、时间盒:方案 45 分钟必须出 v0

没有 v0 就不允许改代码。v0 可以丑,但不能没有文件清单与风险。


二十三、与调试的接口

方案写清契约,调试时结构化工单会更短。


二十四、与规则文件的接口

反复出现的方案约束应下沉到 AGENTS.md


二十五、本讲第二小结

锚点、颗粒度、红灯清单、文档同步,四件事一起做,AI 生成会从「快而飘」变成「快且稳」。


二十六、补充思考题

  1. 你愿意把「无方案不编码」写进规则吗?
  2. 你如何衡量方案先行是否真的省时间?

二十七、收束

方案先行实现为后,本质是把思考外置成可审查工件


二十八、把方案当作合同初稿

对方案苛刻一点,未来合并冲突会少一点;对方案宽容一点,未来加班会多一点。


二十九、给 Tech Lead 的三问

本周多少 PR 缺影响面说明?多少改动没更新目录 README?多少 AI 改动引入未解释依赖?


三十、给 solo 的三问

三句话说清竖切价值吗?知道哪些文件不能动吗?写得出验证命令吗?


三十一、结语

把方法用进下一讲 VibeNote V2.0 实战:你会看到锚点如何减少返工。


参考阅读reference/practice/vibe-coding-methodology.md(方案先行、小步验证、文档记忆)。

三十二、方案与原型

原型验证需求,方案锁定实现。别用方案写一堆幻想,原型负责把幻想落地成选择。

三十三、方案与估时

方案阶段给出区间估时:实现/测试/文档各占多少。没有估时的方案往往会在实现阶段偷偷膨胀。

三十四、方案与依赖

把依赖新增单列一节:为什么需要、替代方案、体积影响、维护成本。

三十五、方案与可观测性

从方案里指定日志字段与错误码,不要等上线再补。

三十六、方案与国际化

若 VibeNote 未来要多语言,方案里先写文案策略,避免后面全局替换。

三十七、方案与性能

首屏、列表、编辑器输入延迟,至少点三项给预算。

三十八、方案与安全

AI 功能写清提示注入防护、输出过滤、密钥管理。

三十九、方案与可访问性

编辑器工具栏要键盘可达;方案里写一句就够,别靠自觉。

四十、方案与移动端

textarea 分栏是否在窄屏改为上下堆叠?方案里决定,别交给模型临场发挥。

四十一、方案评审记录

评审结论要落盘:谁批准、改了什么、为什么。

四十二、方案与测试数据

准备三类测试笔记:空、极大、含代码块与表格。

四十三、方案与回滚

说明如何关闭 AI 功能开关(feature flag)。

四十四、方案与文档同步

列出必须更新的 README 路径。

四十五、方案与发布

是否需要迁移、是否需要双写、是否需要灰度。

四十六、从方案到任务拆解

把方案文件清单映射为 issue 列表,一项一项合并。

四十七、避免方案中的「顺便」

任何顺便都要单独立项,否则范围必炸。

四十八、方案写作的语言

用短句、用列表、少用形容词;模型更容易遵守。

四十九、让 AI 参与评审而不是替你做决定

可以让 AI 对方案做挑战清单,但最终拍板在人。

五十、结语

方案先行不是官僚,是你在高速生成时代保留掌控感的抓手。

五十一、把方案当作「类型系统」:越早约束越便宜

在 TypeScript 里,类型错在编译期比在运行期便宜。方案就是需求层的类型:边界错在方案阶段比在上线后便宜。你不会在业务代码里回避类型,也不应该在真实项目里回避方案。尤其对 VibeNote 这种涉及用户数据的产品,方案里的安全与权限段落不是可选项

五十二、方案与协作:让评审可异步

把方案贴进 PR 或 issue,同事用评论逐条质疑。你再把结论合并回方案正文。异步评审比会议更高效,也更适合分布式团队。AI 可以帮你生成「评审问题清单」,但别让它替同事签字。

五十三、方案与工具:不要被工具带跑

无论你用 Cursor、Claude Code 还是其他代理,方案先行的纪律不变。工具只会改变你写方案的速度,不应改变你是否写方案。把纪律写进规则文件(第04讲),工具升级时你也不会失守。

五十四、方案与债务:识别「隐性债务句」

方案里如果出现「先简单做」「以后再优化」「临时处理」,你要高亮它们:它们往往是债务种子。不是不能写,但必须配到期条件:什么时候还、谁来还、怎么验收还清。

五十五、最终收束

方案先行实现为后,是一条让你越用越省的路。你开始会慢,后来会稳;稳到一定程度,速度会回来,而且是高质量的速度。下一讲我们用 VibeNote V2.0 把这条路走完整。


五十六、方案里的「数据模型」段落怎么写

先写实体字段与约束,再写读写路径。对笔记产品,至少覆盖:标题、正文、标签、更新时间、删除软删与否。字段越具体,AI 生成 DAO/Server Action 越不容易漏校验。


五十七、方案里的「状态管理」段落怎么写

说明哪些状态是 URL 驱动,哪些是本地 UI 状态,哪些是服务端真相。编辑器里常见坑是把草稿状态同时放多处,最后不同步。方案里用一句话定「单一数据源」。


五十八、方案里的「错误处理」段落怎么写

列出可预期错误:网络失败、模型失败、校验失败、权限失败。每种错误对应 UI 与可重试策略。没有这张表,AI 很容易只写 happy path。


五十九、方案里的「流式输出」段落怎么写

写清取消策略、卸载清理、loading 与 partial 文本展示规则。流式是体验利器也是 bug 源,方案不写清就会死在边界上。


六十、方案里的「性能」段落怎么写

Markdown 预览 debounce 多大、是否需要 web worker、长文输入是否分块渲染。给预算而不是给形容词。


六十一、方案里的「安全」段落再强调

用户笔记内容可能包含恶意提示词,方案要写「系统提示与用户材料分离」与「输出不可执行」原则。


六十二、方案评审的参与者

至少包含实现者与审查者;涉及数据要有业务方;涉及合规要有负责人。不是形式,是风险共担。


六十三、方案更新策略

实现中发现方案不适用,先改方案再改代码。代码先行改方案后补,是最常见的漂移来源。


六十四、与第02讲 Workflow 的对齐

方案票→审查票→实现票→验证票,四张票把本讲落到日常。


六十五、与第05讲调试的对齐

方案写清契约,调试更少猜。契约越像 OpenAPI,越利于结构化调试。


六十六、练习:给 VibeNote V2 写一页方案

不用完美,但必须包含文件清单与风险。写完再对照红灯清单自检。


六十七、练习:让 AI 挑战你的方案

要求 AI 输出「十个可能翻车的点」,你再逐条标注接受/拒绝/延后。


六十八、别用方案逃避交付

方案时间盒结束就必须进入实现。方案不是拖延许可证。


六十九、方案与里程碑

把里程碑定义成可演示节点,而不是「完成 80%」。可演示才是硬标准。


七十、最后一句话

先想清楚再动手,不是慢,是把慢挪到最便宜的地方。


延展1、方案先行与组织文化

组织如果奖励「立刻出活」而不奖励「把边界写清」,方案先行会被阳奉阴违。你要用制度对齐:把方案审查作为合并门槛之一,把返工率纳入复盘。个人可以自律,团队要靠机制。VibeNote 作为课程项目,你现在是自己的 Tech Lead,请对自己狠一点:没有文件清单就不写代码。坚持两周,你会感到合并冲突减少、对话变短、AI 输出更一致。方案不是写给老板的,是写给未来自己的。未来你会感谢现在多写的半页纸。


延展2、方案先行与组织文化

组织如果奖励「立刻出活」而不奖励「把边界写清」,方案先行会被阳奉阴违。你要用制度对齐:把方案审查作为合并门槛之一,把返工率纳入复盘。个人可以自律,团队要靠机制。VibeNote 作为课程项目,你现在是自己的 Tech Lead,请对自己狠一点:没有文件清单就不写代码。坚持两周,你会感到合并冲突减少、对话变短、AI 输出更一致。方案不是写给老板的,是写给未来自己的。未来你会感谢现在多写的半页纸。


延展3、方案先行与组织文化

组织如果奖励「立刻出活」而不奖励「把边界写清」,方案先行会被阳奉阴违。你要用制度对齐:把方案审查作为合并门槛之一,把返工率纳入复盘。个人可以自律,团队要靠机制。VibeNote 作为课程项目,你现在是自己的 Tech Lead,请对自己狠一点:没有文件清单就不写代码。坚持两周,你会感到合并冲突减少、对话变短、AI 输出更一致。方案不是写给老板的,是写给未来自己的。未来你会感谢现在多写的半页纸。


延展4、方案先行与组织文化

组织如果奖励「立刻出活」而不奖励「把边界写清」,方案先行会被阳奉阴违。你要用制度对齐:把方案审查作为合并门槛之一,把返工率纳入复盘。个人可以自律,团队要靠机制。VibeNote 作为课程项目,你现在是自己的 Tech Lead,请对自己狠一点:没有文件清单就不写代码。坚持两周,你会感到合并冲突减少、对话变短、AI 输出更一致。方案不是写给老板的,是写给未来自己的。未来你会感谢现在多写的半页纸。


延展5、方案先行与组织文化

组织如果奖励「立刻出活」而不奖励「把边界写清」,方案先行会被阳奉阴违。你要用制度对齐:把方案审查作为合并门槛之一,把返工率纳入复盘。个人可以自律,团队要靠机制。VibeNote 作为课程项目,你现在是自己的 Tech Lead,请对自己狠一点:没有文件清单就不写代码。坚持两周,你会感到合并冲突减少、对话变短、AI 输出更一致。方案不是写给老板的,是写给未来自己的。未来你会感谢现在多写的半页纸。


延展6、方案先行与组织文化

组织如果奖励「立刻出活」而不奖励「把边界写清」,方案先行会被阳奉阴违。你要用制度对齐:把方案审查作为合并门槛之一,把返工率纳入复盘。个人可以自律,团队要靠机制。VibeNote 作为课程项目,你现在是自己的 Tech Lead,请对自己狠一点:没有文件清单就不写代码。坚持两周,你会感到合并冲突减少、对话变短、AI 输出更一致。方案不是写给老板的,是写给未来自己的。未来你会感谢现在多写的半页纸。



五十六、把「方案评审」变成团队仪式

每周固定 30 分钟,只评审方案不写代码。每个人带一个一页纸方案,互相用红灯问题挑战。你会看到方案质量整体上升,而会议时间反而下降。


五十七、与个人知识库联动

把成功方案与失败方案都放进你的笔记系统(例如 VibeNote 自己)。标签用「方案模板」「返工案例」「红线清单」。这是在给未来的自己留上下文。


五十八、收束重申

方案先行实现为后,不是慢,是把错误提前到最便宜阶段。你掌握它,AI 才是杠杆;否则 AI 只是放大器。



五十九、与下一讲的桥

下一讲项目实战会把方案先行落实成 VibeNote V2.0 的文件清单与 PR 分段。你会看到「锚点」在真实仓库里长什么样。


六十、最后一句话

先设计后写代码,不是迂腐,是专业。专业的人不是不写快,而是知道哪里该慢。



六十一、练习:给自己设一条硬规则

本周只允许自己在「方案一页纸」存在的情况下让 AI 改超过两个文件。违反就复盘为什么想跳过。你会很快看清自己的侥幸心理。


六十二、再补一段

当你把方案先行练成习惯,你会发现 Prompt 变短了,因为大量约束已经提前写进方案与规则文件。这才是「少写提示词」的正道。



六十三、结语

把本讲打印成一页「红灯清单 + 方案模板」,贴在你显示器旁边。它比收藏一百篇 AI 文章更有用。



六十四、真·收束

方案先行实现为后,是模块二的总纲。你掌握它,前面五讲才有落点;你忽略它,前面五讲只是散点技巧。



六十五、下一讲预告(再强调)

下一讲是 VibeNote V2.0 实战:你会把方案模板填成真实文件清单,把 PR 分段变成真实合并记录。别只看不做。


去做。别光读。读一百遍不如做一遍。做一遍胜过收藏十次。收藏不会帮你交付。交付才重要。坚持下去你会看到复利。复利比短期爽更重要。记住这句话。真的。去吧。走。好。行。