AI 写代码90 天:CR 打回率升 40%
一个 32 人技术团队引入 AI 辅助编码工具 90 天后Code Review 打回率从 12% 飙到 17%CR 平均时长从 1.8 天涨到 2.6 天。这不是 AI 的问题是我们没调整流程。这篇讲我们怎么发现的、根因是什么、做了哪些调整、指标怎么回来的。开始的预期省 30% 写代码时间今年 Q1我们团队正式全员上线 AI 辅助编码工具——32 个人覆盖后端、前端、移动端。预期很明确CRUD、样板代码、单元测试这些重复劳动交给 AI开发效率提 30%。上线第 1 周大家反馈都很积极。“写个 API 接口快多了”“测试用例秒生成”“以前要查半小时的 bug 现在 5 分钟搞定”。前 4 周的数据也好看指标上线前Q4 均值上线后第 4 周变化PR 提交数/周8710419.5%人均代码行数/周1,4201,78025.4%功能交付周期天4.23.5-16.7%看起来形势一片大好。直到第 6 周Tech Lead 在周会上甩出一个数据。第一个异常信号打回率在涨Tech Lead 提了一嘴“最近 CR 打回的 PR 是不是变多了”我们查了 GitLab 的数据。指标Q4 均值第 4 周第 6 周第 8 周CR 打回率12.1%13.4%15.2%17.3%CR 平均时长天1.81.92.32.6CR 评论数/PR3.23.84.55.1首次 CR 通过率68%63%54%48%打回率从 12% 升到了 17%涨了 43%。首次 CR 通过率从 68% 跌到 48%。我第一反应是reviewer 是不是变严了查了一下 reviewer 的分配还是那些人review 标准文档也没改。不是 reviewer 的问题。那是谁的问题根因分析AI 写的代码有 3 类高频问题我们把第 5-8 周被打回的 217 个 PR 全部翻了一遍逐条分类 CR 评论。结论很清晰——AI 生成的代码有 3 类高频问题是打回率上升的主因。问题 1逻辑正确但架构不对占打回的 41%这是最隐蔽的一类。AI 写的代码能跑、能过单元测试但放在整个系统里看架构上不对。举个真实例子# AI 生成的代码直接在 Controller 里写业务逻辑router.post(/orders)asyncdefcreate_order(req:OrderRequest,db:SessionDepends(get_db)):# 验证库存productdb.query(Product).filter(Product.idreq.product_id).first()ifproduct.stockreq.quantity:raiseHTTPException(400,库存不足)# 扣减库存product.stock-req.quantity# 创建订单orderOrder(user_idreq.user_id,product_idreq.product_id,quantityreq.quantity)db.add(order)db.commit()return{order_id:order.id}能跑。单元测试也过了。但 reviewer 直接打回“库存扣减和订单创建不在一个事务里并发下会超卖。而且业务逻辑不该写在 Controller 层。”这种问题 AI 根本发现不了因为它不知道你们团队的架构规范。问题 2代码看着对但细节有坑占打回的 33%AI 生成的代码特别好看——格式完美、命名清晰、注释齐全。但细节经不起推敲。真实案例# AI 生成的分页查询defget_users(page:int1,size:int20):offset(page-1)*sizereturndb.query(User).offset(offset).limit(size).all()reviewer 评论“size 没做上限校验。传 size10000 直接把数据库拉爆。”还有一类更隐蔽的# AI 生成的日期处理fromdatetimeimportdatetime expire_timedatetime.now()timedelta(days30)reviewer“生产环境要用datetime.utcnow()或者指定时区datetime.now()依赖服务器本地时区部署到 UTC 服务器就出 bug。”这类问题共同特点AI 写的代码在本地跑没问题但缺乏生产环境意识。问题 3提交粒度失控占打回的 26%这个是流程问题。用 AI 工具后开发者倾向于一次性生成大量代码再提交。以前一个 PR 改 3-5 个文件现在经常一个 PR 改 15-20 个文件。指标Q4 均值第 6-8 周变化PR 平均变更文件数4.211.7178%PR 平均代码行数diff186523181%CR 单次耗时 2h 的占比23%61%165%reviewer 面对一个 500 行的 PR注释少、改动散很难一次审完。审到一半被打断下次从头看——CR 时长自然拉长。调整方案3 个干预措施根因清楚了接下来怎么做。我们的原则不撤 AI 工具调流程。AI 写代码没问题是我们用 AI 的姿势不对。措施 1引入AI 代码 CR Checklist我们加了一个 CR checklistreviewer 在审 PR 时额外检查以下几项□ 架构合规业务逻辑是否在正确的层Controller/Service/DAO □ 并发安全涉及共享资源的修改是否有事务/锁保护 □ 生产意识时区、编码、内存泄漏、SQL 注入等生产环境常见坑 □ 边界校验输入参数是否有上限/下限校验 □ 错误处理异常路径是否覆盖是否有裸 except/catch这个 checklist 不长5 项。但它的作用是让 reviewer 知道重点看哪里而不是从头到尾逐行审。措施 2PR 粒度强制上限在 GitLab CI 里加了一个 lint 规则# .gitlab-ci.ymlcheck-pr-size:script:-|CHANGED$(git diff --name-only origin/main | wc -l) if [ $CHANGED -gt 10 ]; then echo ⚠️ PR 变更文件数 ${CHANGED} 超过 10 个上限请拆分 exit 1 fi超过 10 个文件的 PR 自动标红要求拆分。同时在团队规范里加了一条用 AI 生成的代码必须手动 review 一遍再提交。不是走过场是真看。重点看架构、边界、并发。措施 3CR 优先级队列 超时机制CR 时长拉长的一个原因是 reviewer 积压。我们做了两件事优先级队列PR 按紧急程度分 3 级P0hotfix/线上 bug4 小时内必须完成 CRP1正常功能24 小时P2重构/优化48 小时。超时自动升级PR 超过 24 小时没有 reviewer 认领自动 Tech Lead。超过 48 小时未完成自动升级到工程总监。# 简化版超时检查脚本每小时 cron 执行 SELECT pr_id, title, created_at, EXTRACT(EPOCH FROM (NOW() - created_at))/3600 AS hours_open FROM merge_requests WHERE state opened AND reviewer_id IS NULL AND EXTRACT(EPOCH FROM (NOW() - created_at))/3600 24 ORDER BY hours_open DESC;调整后 4 周的数据干预措施从第 9 周开始执行。第 13 周执行 4 周后的数据指标调整前峰值第 8 周调整后第 13 周变化CR 打回率17.3%10.8%-37.6%CR 平均时长天2.61.5-42.3%CR 评论数/PR5.12.9-43.1%首次 CR 通过率48%71%47.9%PR 平均变更文件数11.76.3-46.2%PR 平均代码行数diff523248-52.6%打回率从峰值 17.3% 降到 10.8%比引入 AI 前的 12.1% 还低。首次 CR 通过率从 48% 回升到 71%。CR 平均时长从 2.6 天降到 1.5 天比引入 AI 前的 1.8 天还短。复盘什么效率是真的什么是幻觉回头看这 13 周的数据我们的结论真实效率提升样板代码、CRUD、单元测试——这些确实快了体感 40-60% 的提速是真的文档注释、代码格式——AI 生成的质量确实比手写好学习新技术栈——AI 辅助学新框架/新语言的速度确实快效率幻觉“代码写得快 交付快”——不是。代码写完只是开始CR、测试、修复 CR 反馈才是大头“PR 提交数多了 产出多了”——不是。质量下降导致返工净产出可能更低“人均代码行数涨了 效率高了”——不是。代码行数从来不是效率指标核心教训AI 工具改变的是写代码这个环节的速度但软件交付是一个完整流程。只加速一个环节而不调整上下游反而会在瓶颈处堆积。常见问题Q: 你们团队用的是哪款 AI 编码工具A: 我们测试了 GitHub Copilot、Cursor 和 Claude Code 三款最终全员用的是 Copilot Claude Code 组合。但这篇文章的重点不是选型——不管用哪个工具CR 打回率上升的问题都存在核心在流程调整。Q: Checklist 会不会让 CR 变得更慢A: 恰恰相反。之前 reviewer 是从头到尾逐行看有了 checklist 后变成带着目标找问题效率更高。我们的 CR 单次耗时从平均 47 分钟降到 28 分钟。Q: 强制拆分 PR 会不会让开发流程变繁琐A: 前两周确实有人抱怨。但跑了一个月后80% 的开发者反馈拆分后更容易定位 bug。而且拆分 PR 本身就是一个好的工程习惯不管用不用 AI。Q: 如果团队规模更小比如 10 人以下还需要这些流程吗A: 10 人以下的团队可以简化——checklist 保留PR 粒度控制可以靠口头约定而不是 CI 强制超时机制可能不需要。但AI 生成的代码必须手动 review 一遍这条任何规模的团队都该执行。