AI编程别急着复制:3个落地技巧+5个坑,少改坏工程
周二晚上十点,你盯着 git diff,发现 AI 为了加一个查询缓存,顺手把订单服务的降级逻辑删了。你明明只让它“优化性能”,它却重写了 repository、换了异常处理、还把 timeout 从 800ms 改成 3000ms。更难受的是,单测没挂,因为测试里 mock 掉了真正的调用链。
这不是 AI 编程不行。多数时候,是你把它放错了位置。
大家常犯两个误区。第一,把 AI 当高级自动补全,扔一句“帮我优化这段代码”就等结果。第二,把 AI 当架构师,指望它读完半个文件就给出能扛生产的方案。它更像一个手速极快、记忆很杂、特别爱自由发挥的实习生。你得给它边界、验收和回滚路径。
一、3个能直接照搬的实战技巧
1.1 先画圈,再让它动手
操作步骤:
- 只贴必要上下文:接口签名、数据库 schema、报错日志、调用方代码。别一上来就把整个仓库塞进去。
- 写清约束:“只允许修改
service/order_export.py里的export_orders函数。其他文件不许动。public API 不变。输出 unified diff。” - 要求它先复述约束,再给 diff。复述不对,直接打回。
- 你拿到 diff 后先看三处:函数签名、异常分支、依赖变更。
真实项目案例:给 Go 订单查询加 Redis 缓存时,AI 第一版想重写 Repository 层。我把提示词改成“只加 cache-aside 包装,保留原降级逻辑,数据库查询失败仍走旧路径”,它才给出可合并的 patch。少改 4 个文件,review 时间从半天降到 20 分钟。
【金句:AI 写代码不怕慢,怕的是它自由发挥。】
1.2 先写失败测试,再让它实现
操作步骤:
- 用业务语言描述行为:“分页接口必须返回
items、total、page、page_size,空结果时items是空数组,不是 500。” - 让 AI 先写 pytest/jest/go test,只写测试,不写实现。
- 跑测试,确认它红。红不了,说明测试没测到点上。
- 再让 AI 写实现,跑到绿。
- 最后人工检查测试有没有 mock 掉核心逻辑。
真实项目案例:FastAPI 分页接口改动时,AI 直接改了响应模型,前端字段丢失。后来我先让它写测试,固定 JSON 字段。它再改实现时,测试拦住了两次“顺手重构”。测试不是形式,是你给 AI 修的护栏。
【金句:先让 AI 证明自己会错,再让它证明自己会改。】
1.3 让它当参谋,别让它握方向盘
操作步骤:
- 不要问“怎么实现”,先问“有哪三种方案,各自风险是什么”。
- 要求列出:改动范围、依赖、回滚成本、可能踩的坑。
- 你选最小改动方案,再让它写代码。
- 如果它推荐引入新中间件,先问“不引入能不能扛住当前量级”。
真实项目案例:Node.js 库存扣减,AI 上来就给分布式锁。我让它分析后,发现当前单实例、日订单量不大,先用内存队列加数据库乐观锁就能扛。等真到多实例再上 Redis 锁。AI 的方案不一定错,但它默认按大厂流量开药方。
【金句:AI 可以给你地图,但别让它替你选路。】
二、5个高频坑,踩一次疼一周
2.1 幻觉 API 和版本
现象:AI 写出不存在的库方法、过时参数、假配置项。
危害:本地跑不通,或者线上才炸。
规避:锁版本,查官方文档,跑类型检查。让它注明“这个 API 来自哪个版本”,说不清就人工查。
2.2 全文件重写
现象:你让它改一个 if,它格式化整个文件,顺便换掉命名和异常处理。
危害:diff 几百行,review 崩溃,隐藏 bug 混进去。
规避:要求输出 patch,不许全文件替换。合并前看 git diff --stat,超过预期行数就退回。
2.3 测试造假
现象:AI 写的测试只断言状态码 200,或者把核心逻辑 mock 掉。
危害:测试全绿,线上照挂。
规避:要求断言业务结果,比如金额、库存、字段。测试文件也要人工读一遍,别只看覆盖率。
2.4 把密钥贴进对话
现象:为了让它调通,你把 .env、数据库密码、云厂商 AK 贴进去。
危害:密钥泄露,排查成本高。
规避:脱敏,用假值。企业内用本地模型或企业版,禁止把生产密钥粘到外部工具。
2.5 上下文缺斤少两
现象:只给半个文件,没给调用方、schema、错误日志。
危害:AI 按想象补全,越改越偏。
规避:给接口定义、调用链、数据库字段、真实报错。分块给,别一次塞爆窗口,也别只给一角。
**【金句:AI 编程的坑,多数不是它不会写


