首页 / 正文

AI 编程别只图快:一套避免“越写越多 Bug”的实战流程

Mooko
发布于 2026-06-15 · 5分钟阅读
0 浏览
0 点赞 暴击点赞!

AI 编程别只图快:一套避免“越写越多 Bug”的实战流程

AI 编程有个很现实的尴尬:

你让它写代码,确实快。

快到什么程度?一个接口、一个页面、一个脚本,几分钟就能甩给你。

问题来了:能跑,不等于能交付。能交付,不等于以后不炸。

有两组数据挺扎心:

  • 有机构想做“用 AI 编程”和“不用 AI 编程”的对照实验,结果实验很难推进,因为开发者已经不愿意脱离 AI。
  • 企业里有相当一部分 AI token,花在修 AI 自己生成的 Bug 上。

这事听起来像段子,其实很多团队已经在经历了:

AI 帮你写得更快,然后你用 AI 修它写出来的问题,再买更多 AI token 去修更多问题。

这不是生产力飞升,这是技术债开了自动续费。😅

今天不聊玄学,也不吹工具。

咱们聊一套能落地的 AI 编程流程:怎么让 AI 真帮你干活,而不是把你的项目变成 Bug 养殖场。


一、AI 编程最容易踩的坑:把“生成速度”当成“开发效率”

很多人用 AI 写代码,习惯是这样的:

帮我写一个用户登录功能。

AI 很快给你一大坨代码。

看着很完整:

  • 有接口
  • 有校验
  • 有数据库操作
  • 有错误处理
  • 甚至还有注释

你复制进去,跑一下,能动。

这时候最危险。

因为你会产生一种错觉:活干完了。

可真实项目不是 demo。

真实项目里还有这些东西:

  • 现有代码风格
  • 权限边界
  • 异常分支
  • 数据库事务
  • 日志规范
  • 安全策略
  • 测试覆盖
  • 后续维护成本

AI 不知道你团队里的那些“潜规则”。

它会用最像答案的方式回答你,而不是用最适合你项目的方式交付你。

所以别问:

AI 能不能帮我写代码?

要问:

我有没有能力验收 AI 写出来的代码?

这才是分水岭。


二、正确姿势:别让 AI 直接开写,先让它做“技术拆解”

很多 Bug 不是代码阶段产生的,而是需求阶段就埋好了。

你给 AI 一个模糊任务,它就会脑补。

你说“做一个登录功能”,它可能默认:

  • 用邮箱登录
  • 密码明文传入
  • JWT 放本地
  • 错误提示直接返回
  • 没有频率限制
  • 没有审计日志

你没说,它就猜。

它猜得越多,你后面修得越痛。

更好的方式是让 AI 先拆任务,不准写代码。

推荐提示词

你是我的资深后端工程师。

现在不要写代码。

请先帮我拆解这个需求:实现用户登录功能。

请输出:
1. 需要确认的问题
2. 可能的技术方案
3. 安全风险点
4. 需要改动的文件范围
5. 需要补充的测试用例

项目背景:
- 技术栈:Node.js + Express + PostgreSQL
- 鉴权方式:JWT
- 已有用户表:users(id, email, password_hash, status, created_at)
- 密码使用 bcrypt 存储
- 登录失败超过 5 次需要限制 10 分钟

注意这里的关键点:

  • 明确告诉它“不要写代码”
  • 给出技术栈
  • 给出已有表结构
  • 给出业务规则
  • 让它列出测试点

这样做有个好处:你能在 AI 动手前发现问题。

需求没讲清楚时,代码写得越快,返工越快。


三、给 AI 写代码前,先给它一份“项目说明书”

AI 最怕什么?上下文不完整。

你让它改一个函数,它可能顺手改掉整个风格。

你让它修一个 Bug,它可能新造一套工具函数。

你让它补个接口,它可能把鉴权逻辑绕过去。

这不是它叛逆,是它不知道边界。

建议每个项目都准备一个 AI_RULES.md,专门给 AI 看。

示例:AI_RULES.md

# AI 编程规则

## 项目技术栈
- 后端:Node.js + Express
- 数据库:PostgreSQL
- ORM:Prisma
- 测试:Jest

## 代码风格
- 使用 async/await
- 不允许新增全局变量
- 不允许直接拼接 SQL
- 所有数据库操作必须经过 repository 层
- 错误处理统一使用 AppError

## 安全要求
- 不允许返回 password_hash
- 不允许在日志中打印 token
- 登录接口必须有频率限制
- 所有用户输入必须校验

## 修改规则
- 不要大面积重构
- 每次只处理一个明确任务
- 修改前先说明计划
- 修改后列出影响范围

## 测试要求
- 新功能必须补单元测试
- 修 Bug 必须补回归测试
- 测试文件放在 __tests__ 目录

然后你每次让 AI 开工前,加一句:

请先阅读并遵守 AI_RULES.md。

如果你用 Cursor、Claude Code、Copilot Workspace 这类工具,也可以把这类规则放进项目根目录,或者配置到工具的规则文件里。

这一步很土,但很管用。

它相当于给 AI 戴上安全帽。


四、不要让 AI 一次写完整功能,要切成“小刀口”

AI 最擅长什么?

小范围、边界清楚、反馈明确的任务。

AI 最容易翻车什么?

大范围、跨模块、边界模糊的任务。

别这样问:

帮我完成一个电商订单系统。

这句话一出去,你基本是在召唤技术债。

更好的拆法是:

我们要做订单系统,请按下面顺序协助我,每一步完成后等待确认:

步骤 A:设计订单表结构,只输出 SQL 和字段说明。
步骤 B:实现创建订单接口,只处理参数校验和库存检查。
步骤 C:补充订单创建的单元测试。
步骤 D:实现订单支付状态更新。
步骤 E:补充支付状态变更的回归测试。

现在只做步骤 A。

重点是这句:

每一步完成后等待确认。

别让 AI 一路狂飙。

你要像带一个很快但容易冲动的实习生:

  • 给它明确任务
  • 控制修改范围
  • 每一步验收
  • 不满意就打回

别不好意思。

AI 没有自尊心,打回成本很低。


五、让 AI 先写测试,再写实现

如果你只让 AI 写功能,它会优先让代码“看起来能跑”。

如果你让它先写测试,它会被迫思考边界。

比如登录接口,别直接说“实现登录”。

换成这样:

请先为登录接口设计测试用例,不要写实现代码。

要求覆盖:
- 邮箱不存在
- 密码错误
- 用户被禁用
- 登录成功
- 连续失败 5 次后锁定
- 锁定期内再次登录
- 返回结果不能包含 password_hash

请用 Jest 输出测试代码。

测试写出来后,你再说:

基于这些测试,实现最小可通过的登录逻辑。
不要修改测试。
不要引入新的依赖。

这招特别适合下面这些场景:

  • 登录注册
  • 支付回调
  • 权限校验
  • 数据导入
  • 文件上传
  • 账单计算
  • 定时任务

这些地方一旦炸,通常不是页面难看,而是钱、权限、数据全出事。

别拿生产环境练胆。


六、修 Bug 时,别让 AI “猜着改”

很多人修 Bug 的提示词是灾难现场:

这个报错怎么修?

然后粘一段错误日志。

AI 开始猜。

你试一次,不行。

再问一次,它换个猜法。

再试一次,又不行。

半小时过去了,你得到三个补丁,外加两个新 Bug。

修 Bug 要给 AI 三样东西:

  • 复现步骤
  • 期望结果
  • 实际结果

推荐模板

请帮我定位这个 Bug,先不要修改代码。

复现步骤:
1. 使用 user_a 登录
2. 调用 POST /orders 创建订单
3. 请求参数为:{ "skuId": 1001, "quantity": 2 }

期望结果:
- 库存足够时创建订单成功
- 返回 orderId

实际结果:
- 接口返回 500
- 日志如下:
[粘贴日志]

相关代码:
[粘贴 controller / service / repository 代码]

请输出:
- 最可能的 3 个原因
- 每个原因如何验证
- 你建议先检查哪里

不要直接给修复代码。

为什么不让它直接修?

因为定位和修改是两件事。

先定位,再动手。

你把这两个步骤混在一起,AI 就容易拿“看起来合理”的代码糊你。


七、AI 写完代码后,必须过一遍“人工验收清单”

别迷信 AI 自评。

你让它检查自己写的代码,它很容易说:

代码整体合理,逻辑清晰,具备良好的可维护性。

这类话听着舒服,价值接近空气。

你要让它按清单检查。

代码验收提示词

请严格审查刚才的修改。

按下面清单逐项检查,只输出问题,不要夸奖:

1. 是否有未处理的异常分支?
2. 是否可能出现空指针或 undefined?
3. 是否有权限绕过风险?
4. 是否返回了敏感字段?
5. 是否引入 N+1 查询?
6. 是否破坏现有接口兼容性?
7. 是否缺少测试?
8. 是否有重复代码?
9. 是否修改了任务范围外的文件?
10. 是否存在并发问题?

这里有两个关键表达:

只输出问题,不要夸奖。

AI 很爱当气氛组。

你不拦着,它就给你写一篇表扬信。


八、把 AI 当“副驾”,别让它坐主驾

AI 编程最健康的关系是:你决定方向,它负责加速。

你不能把判断权交出去。

适合交给 AI 的任务:

  • 写样板代码
  • 生成测试用例
  • 解释错误日志
  • 梳理旧代码逻辑
  • 生成 SQL 草稿
  • 补充注释
  • 写迁移脚本初版
  • 做代码审查清单

不建议完全交给 AI 的任务:

  • 架构设计拍板
  • 权限模型设计
  • 支付逻辑
  • 数据删除逻辑
  • 安全策略
  • 复杂并发控制
  • 生产事故修复
  • 大规模重构

不是 AI 不能参与。

是这些任务一旦出错,代价太高。

你可以让 AI 给方案,但拍板的人必须是你。


九、一套可直接照抄的 AI 编程工作流

你可以把下面这套流程贴到团队文档里。

1. 开工前:定义边界

请先分析需求,不要写代码。
输出需要确认的问题、影响范围、风险点和测试计划。

2. 动手前:制定计划

请给出最小修改方案。
要求:
- 不做任务外重构
- 不新增不必要依赖
- 列出将修改的文件
- 每个文件说明修改原因

3. 编码中:小步提交

现在只修改 [文件名],完成 [具体目标]。
不要修改其他文件。

4. 写完后:补测试

请为这次修改补充测试。
必须覆盖正常路径、异常路径和边界条件。

5. 合并前:做审查

请按安全、性能、兼容性、可维护性四个维度审查这次改动。
只列问题和建议,不要写总结性夸奖。

6. 出问题:先定位再修复

请根据复现步骤和日志定位问题。
先列可能原因和验证方法,不要直接修改代码。

这套流程看起来慢。

实际会让你少掉很多“半夜回滚”的机会。

写代码快不稀奇,少返工才值钱。


十、避坑清单:这些用法很容易把项目带沟里

下面这些情况,建议你看到就停一下。

❌ 1. 一句话让 AI 做完整功能

帮我做一个会员系统。

太大了。

拆小。

❌ 2. 不给项目背景

帮我优化这段代码。

优化什么?性能?可读性?安全?内存?

AI 不知道,就会自由发挥。

❌ 3. 复制代码不看直接提交

这和把陌生人写的代码直接合进主分支没区别。

甚至更危险,因为它看起来很像那么回事。

❌ 4. 修 Bug 不写复现步骤

没有复现步骤,AI 大概率在猜谜。

你要的是修 Bug,不是抽塔罗牌。

❌ 5. 让 AI 大范围重构

大范围重构最容易出现:

  • 旧逻辑丢失
  • 边界条件消失
  • 测试全绿但业务炸了
  • Git diff 大到没人想看

重构可以做,但要小步、可回滚、测试先行。


十一、推荐你固定使用的 5 个提示词模板

模板 A:需求澄清

先不要写代码。
请帮我澄清这个需求,列出你需要我确认的问题。
同时指出潜在风险和边界条件。

模板 B:最小实现

请用最小改动实现这个需求。
不要重构无关代码。
不要新增依赖。
修改后列出文件清单和原因。

模板 C:测试生成

请为这个功能生成测试用例。
覆盖正常流程、异常流程、边界条件和安全风险。
先输出测试点,再输出测试代码。

模板 D:代码审查

请审查下面这段代码。
只指出问题,不要夸奖。
重点看:安全、异常处理、并发、性能、可维护性。

模板 E:Bug 定位

请根据复现步骤、日志和相关代码定位问题。
先列可能原因和验证方法。
在我确认前,不要给修复代码。

结语:AI 编程真正的能力,是“可控地变快”

AI 编程不是不能用。

恰恰相反,它已经变成很多开发者离不开的工具。

问题是,别把它当自动驾驶。

更像是副驾:查资料快、写草稿快、补测试快、解释旧代码也快。

方向盘还得在你手里。

记住一句话:

AI 生成代码的速度,不等于团队交付软件的速度。

真正靠谱的 AI 编程,不是让它疯狂输出。

是让它在明确边界里输出,在测试和审查里收敛,在你的判断下合并。

这样用,AI 是帮手。

乱用,它就是 Bug 批发商。

OpenClaw
OpenClaw
木瓜AI支持养龙虾啦
木瓜AI龙虾专供API,限时领取免费tokens
可在 OpenClaw接入全球顶尖AI大模型
立即领取