mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
1965 words
5 minutes
Vibe Coding 实用笔记
2025-12-03

Vibe Coding 实用笔记:让 AI 写代码更可控#

Vibe Coding 不是“随便一句话让 AI 写代码”,更像是把 AI 放进正常的软件工程流程里,让它帮我们更快完成分析、编码、测试和 Review。

AI 写代码越快,越要把边界、证据和回滚方式想清楚。否则短时间看起来效率很高,后面很容易变成大量返工。

举个很常见的例子:

不太推荐:
帮我做一个订单导出功能。
更推荐:
请先阅读订单相关代码,只输出实现方案,不要修改文件。
目标:新增订单导出接口,支持按时间范围筛选。
限制:不要改数据库表结构,不要影响现有订单查询接口。
验收:需要补单元测试,并说明要跑哪些命令验证。

前者看起来省事,但 AI 很容易自己猜业务规则;后者多写了几行,却能明显减少跑偏。

1. 开始前先准备 Git#

在让 AI 改代码之前,先确认当前工作区状态:

git status
git diff

如果是一个新的需求,最好单独开分支。这样 AI 改坏了,也能通过 diff、commit、revert 把影响范围控制住。

建议养成三个习惯:

  • 每次只让 AI 处理一个清晰任务。
  • 每完成一个小阶段就看 diff。
  • 测试通过后再提交,不要把一堆不确定修改攒到最后。

比如我准备让 AI 改一块登录逻辑,会先这样做:

git status
git checkout -b feature/login-token-refresh

然后告诉 AI:

你可以修改登录刷新 Token 相关代码,但不要改注册、密码重置、用户资料接口。
每次修改后先告诉我改了哪些文件,再继续下一步。

这样即使中途发现方向不对,也可以很快退回到干净状态。

2. 先写清楚需求边界#

Vibe Coding 最怕任务太宽,比如“帮我重构订单模块”“优化整个系统性能”。这种说法对人都不够清楚,对 AI 更容易跑偏。

更稳的方式是先写一份轻量 Spec:

## 目标
实现订单导出接口。
## 范围
- 支持按时间范围导出
- 只导出当前登录用户有权限的数据
- 不修改已有订单表结构
## 验收
- 新增单元测试
- 导出结果字段顺序正确
- 无权限用户不能导出他人订单

Spec 不一定要长,关键是把“要做什么、不做什么、怎么验收”写清楚。

再比如“修复商品搜索慢”的需求,不要直接说“帮我优化搜索性能”。可以改成:

## 背景
商品列表在关键词搜索时响应较慢,接口平均耗时超过 2s。
## 目标
`/api/products/search` 在常见关键词下的响应时间降到 500ms 以内。
## 限制
- 不引入新的搜索中间件
- 不改变接口返回字段
- 不影响商品分类筛选逻辑
## 验收
- 给出慢查询原因
- 补充索引或查询优化说明
- 提供优化前后的验证方式

这种写法会逼着 AI 先定位问题,而不是上来就大改代码。

3. 把项目规则告诉 AI#

很多项目里的坑并不在代码里,而在团队约定里:

  • 哪些接口要兼容老客户端。
  • 哪些字段不能改名。
  • 哪些目录不能随便动。
  • 哪些命令可以执行,哪些必须人工确认。
  • 提交前必须跑哪些测试。

这些规则不要每次聊天时临时补充,最好写进 AGENTS.mdCLAUDE.md、项目 README 或任务文档里。稳定的项目规则,比一长串临时 Prompt 更可靠。

一个简单的项目规则文件可以这样写:

# AI 开发规则
- 修改前先阅读相关代码,不要直接生成新架构。
- 后端接口必须保持统一响应格式:`code``message``data`
- 不要修改 `.env`、生产配置、数据库迁移脚本。
- 涉及登录、权限、支付的修改,完成后必须单独说明风险。
- 提交前至少运行相关单元测试。

以后每次让 AI 开工时,只要提醒它“先阅读项目规则文件”,就不用反复解释这些约定。

4. 让 AI 分阶段工作#

比较稳的节奏是:

  1. 先让 AI 阅读代码并给出方案。
  2. 人确认方案和影响范围。
  3. 再让 AI 按小任务实现。
  4. 每完成一块就跑测试、看 diff。
  5. 最后让 AI 做一次 Review,人再看关键修改。

不要一上来就让 AI “直接改完”。方案不清楚时,AI 很可能会自己补设定,甚至把不该改的地方一起改掉。

我更喜欢这样拆任务:

第一步:只分析订单导出需要改哪些文件,不要写代码。
第二步:只实现 Service 层逻辑,不要改 Controller。
第三步:补 Controller 和 DTO。
第四步:补测试并运行验证命令。
第五步:总结 diff 和剩余风险。

这种拆法看起来慢一点,但每一步都能停下来检查,适合长期维护的项目。

5. 不要只听 AI 说“修好了”#

AI 说通过了不等于真的通过了。更可靠的判断来自证据:

  • 测试命令是否真的执行过。
  • 失败日志是否已经解释清楚。
  • diff 是否只包含本次任务相关修改。
  • 核心路径是否有测试覆盖。
  • 页面或接口是否实际验证过。

一句好用的提示是:

请列出你执行过的验证命令、结果,以及还有哪些风险没有覆盖。

也可以让 AI 用固定格式回复:

## 已验证
- `mvn test`:通过
- `OrderExportServiceTest`:通过
## 未覆盖
- 没有连接真实数据库验证大数据量导出
- 没有验证前端下载文件名展示
## 需要人工确认
- 导出字段顺序是否符合产品要求

这样比一句“已经修好了”可靠得多。

6. 控制上下文,不要越聊越乱#

上下文越长不一定越好。旧方案、失败尝试、过期日志混在一起,反而会让 AI 判断失真。

长任务里可以维护一份简单的 handoff:

## 已完成
- 修改了哪些文件
- 跑过哪些测试
- 已确认哪些问题不是 Bug
## 剩余任务
- 还没修的失败用例
- 还没确认的边界场景
- 下一轮需要先读哪些文件

如果一个会话已经反复纠正很多次,不如开新会话,只带当前 Spec、相关文件、失败日志和下一步任务。

比如新会话可以这样开头:

当前任务:继续修复订单导出测试失败。
已完成:
- 已实现 OrderExportService
- 已新增 OrderExportController
- 当前失败用例是 OrderExportServiceTest.shouldRejectOtherUserOrder
请先阅读:
- src/main/java/.../OrderExportService.java
- src/test/java/.../OrderExportServiceTest.java
要求:
- 先解释失败原因
- 不要改 Controller
- 修复后运行这个单测

这比把上一个会话几十轮聊天全部塞进去更清爽。

7. 多 Agent 先串行,再考虑并行#

多 Agent 协作很有用,但不建议一开始就让多个 Agent 同时改代码。

更稳的方式是串行分工:

  1. Plan Agent:只读代码,输出方案。
  2. Code Agent:按任务实现。
  3. Test Agent:补测试并运行验证。
  4. Review Agent:只看 diff,指出风险。

并行开发真正危险的地方,不一定是 Git 冲突,而是两个修改都能合并,但业务语义已经互相破坏。所以并行前必须先明确任务边界、可改文件、验收命令和人工 Review 点。

举个坑:一个 Agent 为了“订单导出”给 OrderDTO 加了字段,另一个 Agent 为了“订单列表性能”删掉了几个字段。代码可能没有冲突,但前端列表和导出文件都可能悄悄变了。

所以并行前要把边界写死:

Agent A:只允许修改导出相关 Service、Controller、测试。
Agent B:只允许修改订单列表查询 SQL 和对应测试。
公共 DTO、数据库迁移、权限逻辑都不能改。

8. 权限要收住#

AI Coding 工具不仅会回答问题,还可能读文件、改代码、执行命令。权限控制不能只靠一句“请谨慎”。

建议把高风险操作放到人工确认或禁止列表里:

  • 删除文件。
  • 读取密钥、证书、生产环境配置。
  • 执行数据库迁移。
  • 推送远程分支。
  • 修改 CI、权限、支付、登录、上传等关键模块。

低风险命令可以适当放开,比如 git diff、格式化、单元测试。高风险操作要靠权限规则、Hook、Sandbox、CI 和人工 Review 一起兜底。

我一般会把命令分成三类:

类型例子处理方式
低风险git diffpnpm check、单元测试可以让 AI 直接跑
中风险安装依赖、修改配置、生成迁移脚本先说明原因,再人工确认
高风险删除文件、读取密钥、推送远程、执行生产迁移默认禁止

权限控制的核心不是“不信任 AI”,而是不给任何工具误操作的机会。

我的常用流程#

日常写需求时,可以按这个顺序走:

  1. 新建分支,确认工作区状态。
  2. 写轻量 Spec,明确目标、范围和验收标准。
  3. 让 AI 先出方案,不急着改代码。
  4. 方案确认后,按小任务实现。
  5. 每完成一块就跑测试、看 diff。
  6. 当前 diff 稳定后再提交。
  7. 让 AI 做 Review,修掉合理问题。
  8. 合并前人工看关键代码。

完整一点的实战 Prompt 可以这样写:

你现在是这个项目的 AI 编程助手。
任务:实现用户收货地址的默认地址切换功能。
请按下面流程执行:
1. 先阅读用户地址相关代码,只输出方案。
2. 方案里说明需要修改哪些文件、有哪些风险。
3. 等我确认后再写代码。
4. 每次只完成一个小步骤。
5. 修改后列出 diff 摘要和验证命令。
限制:
- 不修改用户表结构
- 不改变已有地址列表接口返回格式
- 默认地址必须保证同一用户只有一个

这类 Prompt 不花哨,但很适合真实项目。

短期原型可以大胆试,先把东西跑起来。但只要代码要长期维护,就要把 Git、测试、Review、Spec 和权限控制加回来。

Vibe Coding 的重点不是让 AI 替我们“盲写代码”,而是让 AI 在清晰规则里放大我们的执行力。

Share

If this article helped you, please share it with others!

Vibe Coding 实用笔记
https://mizuki.mysqil.com/posts/vibe-coding/
Author
梦幻晨风
Published at
2025-12-03
License
CC BY-NC-SA 4.0

Some information may be outdated

Table of Contents