如何 Vibe Coding
这篇文章讨论如何从零开始和 AI 一起完成一个项目,它是阐述了做项目的方法论,同时也是一份给 AI 看的指导性文档。
它告诉 AI,程序员和 AI 之间应该如何协作,遇到一个新项目时,应该先做哪些准备工作、应该写哪些文档、文档里应该包含哪些内容、以及如何维护这些文档。
Vibe Coding 总体流程
下面的每一步,只要是由 AI 来做的,都应该由程序员来评审和确认,确保 AI 没有跑偏。
1. 编写项目协作总则
在本文内容基础上,并结合项目实际情况,由 AI 生成一份项目协作总则,它应该包含以下内容:
项目协作总则不是项目简报、需求文档或技术方案文档,它的作用是定义这个项目里程序员和 AI 默认遵守的协作规则。
它应该是一份短、小、稳定、可执行的工作协议,而不是一篇冗长的方法论文档。通常控制在 1 到 2 页内比较合适。
项目协作总则建议包含以下内容:
-
项目定位和性质
- 是一个什么类型的项目(例如:个人项目、开源项目、商业项目、demo项目等)
- 项目的主要目标是什么(验证想法、解决实际问题、交付产品、沉淀技术能力、形成作品集等)
- 项目面向的主要对象是谁(自己、团队内部、特定用户、公开用户)
-
程序员与 AI 的职责分工
- 程序员负责需求拍板、风险取舍、最终评审和关键操作确认
- AI 负责文档草拟、任务拆解、实现、测试、调试以及同步更新文档
- 哪些操作默认不能由 AI 直接执行
- 哪些操作必须由程序员确认,例如主分支合并、发布、回滚、删除数据、修改关键配置
-
AI 的默认工作流程
- 每轮任务开始前先确认目标、边界和验收标准
- AI 根据文档执行任务
- 执行完成后更新文档,并说明改了什么、如何验证、还有什么风险
- 最后由程序员进行评审和确认
-
文档优先级和读取顺序
- AI 开始工作前应该先读取哪些文档,后读取哪些文档
- 当多个文档冲突时,怎么办(向程序员提出问题,还是按照优先级处理)
-
文档维护原则
- 哪些文档允许直接更新
- 哪些文档只能追加更新,不能覆盖历史记录
- 哪些文档按版本新增
项目协作总则不应该写入以下内容:
- 详细功能需求
- 详细技术设计
- 具体版本的实现细节
- 大段背景介绍
- 只在某个短期阶段有效的临时规则
这些内容应该分别放在项目简报、需求文档、技术方案文档和版本文档中。
项目协作总则最适合采用“由 AI 起草,由程序员定稿”的方式生成:
- 程序员先提供项目背景、目标、约束、协作偏好和权限边界
- AI 根据本文方法论和项目实际情况生成第一版项目协作总则
- 程序员审核并修改其中不准确、过重或不符合习惯的部分
- 后续随着项目推进,由 AI 协助维护,但每次重大调整都应由程序员确认
也就是说,AI 适合负责整理和起草,程序员负责最终拍板和长期拥有这份规则。
2. 项目规划
- 建立项目文档目录,并放入项目级协作总则。
- 程序员向 AI 提供项目背景、目标、约束和非目标。
- AI 先列出缺失信息、关键假设和建议的最小文档集合。
- 双方对齐后,AI 生成第一版核心文档:项目简报、需求文档、技术方案文档、工程约束文档。
- 在核心文档稳定后,再按需生成上下文工程工具,例如 agent、instruction、prompt 模板、必要的 skill。
3. 执行
- AI 按“版本文档 + 主文档”的约束执行当前迭代任务,进行实现、构建、测试和调试。
- 每轮任务结束后,先更新文档,再由程序员评审代码、测试结果和文档变更。
- 涉及主分支合并、发布和关键 git 操作时,由程序员执行或确认。
项目规划
项目规划阶段,本质上是要在项目启动之前先明确这三点:做什么、怎么做、按什么规则做。
主要确定以下内容
- 确定项目的目标和边界(背景、需求、目标群体、预期效果、覆盖的场景等)
- 确定项目的技术方案、开发流程和工具链
- 制定项目的约束和规范(编码规范、设计规范、测试规范等)
从零开始做一个项目,要避免“大而全”的前置文档,应该采用“小步对齐、边做边固化”的方式来逐步完善文档,并保持文档的实用性和时效性。
文档维护原则
这一节解决文档如何随版本一起持续迭代的问题。
对 Vibe Coding 来说,要遵循“上下文分层管理的原则”,最合适的做法不是“每个版本重写整套文档”,也不是“所有文档都在原地持续覆盖”,而是采用“少量主文档保持当前有效 + 每个版本补一份轻量增量文档”的方式。
适合 Vibe Coding 的方案是两层结构:
- 主文档
始终保持“当前有效”,给 AI 当长期上下文用。比如项目简报、技术方案、工程约束、架构说明。这些文档应该随项目演化直接更新,确保 AI 读到的是当前版本,而不是历史版本。 - 版本文档
每次迭代单独新增一份,给 AI 当“本轮任务边界”用。比如 V1、V1.1、V2 的版本目标、范围、验收标准、非目标、风险、发布条件。这类文档不应该覆盖旧版本,因为它们本来就是时间切片。
从落地的角度,文档可以这样分:
- 持续更新主文档:项目简报、技术方案文档、工程约束文档、系统架构文档、工程规范文档
- 按版本新增文档:版本需求文档、发布清单、风险清单、迭代计划
- 持续追加文档:决策记录
核心文档集合
这版文档集合的目标不是“完整”,而是“足够开工,并且不容易跑偏”。
它适合以下场景:
- 单人项目或小团队项目
- 从零开始、仍然存在较多不确定性的项目
- 希望先快速做出第一版,再逐步补全文档和规范的项目
通常 4 到 5 份文档就够了。
1. 项目简报
这份文档用来回答“项目为什么做、给谁做、做到什么程度算成功”。
建议包含以下内容:
- 项目一句话介绍
- 项目背景和要解决的问题
- 目标用户
- 核心使用场景
- 版本目标和非目标
- 发布标准
- 成功标准(项目发布以后,什么样的结果算成功)
- 已知风险和假设
这份文档决定大方向。
2. 需求文档
这份文档用来回答“当前版本做什么、不做什么”。
建议包含以下内容:
- 功能清单
- 每个功能的优先级
- 核心用户流程
- 关键页面或模块
- 验收标准
- 异常流程和边界情况
- 本版本明确不做的内容
- 后续版本候选项
这份文档决定做什么先、做什么后。
3. 技术方案文档
这份文档用来回答“项目怎么落地”。
建议包含以下内容:
- 技术栈选择
- 为什么这么选
- 整体架构
- 核心模块划分
- 数据模型概要
- 接口边界概要(描述模块的职责和依赖)
- 状态管理或数据流
- 测试方案(单元测试和集成测试)
- 开发调试环境配置
- 构建和部署方式
- 主要技术风险
- 暂不处理的技术问题
这份文档决定怎么落地。
接口边界概要,描述的是模块之间如何协作,“边界”指的是职责边界和依赖边界。也就是:
- 这个模块负责什么
- 不负责什么
- 它能依赖谁
- 谁可以调用它
- 输入输出是什么
- 哪些内部细节不能泄漏出去
4. 工程约束文档
这份文档用来为项目的开发制定规范和约束。
建议包含以下内容:
- 目录组织规范
- 命名规范
- 代码风格要求
- 格式化和静态检查要求
- 日志规范
- 错误处理约定
- 配置和环境变量约定
- 测试最低要求
- 提交和评审约定
- 禁止事项
- 文档编写和维护规范(包括开发文档和用户文档)
这份文档决定大家怎么协作、怎么保持一致。
5. 决策记录
这份文档用来回答“为什么当时这样选,而不是那样选”。
建议包含以下内容:
- 决策标题
- 决策时间
- 背景
- 备选方案
- 最终选择
- 选择理由
- 代价和影响
- 后续是否允许调整
这类文档的价值很高,因为它记录的是“为什么”,而不是只有“最后是什么”。