你的代码审查流程正在针对错误的失败模式进行优化
你的代码审查清单是为一个以分号放错位置或忘记空值检查为主要缺陷的世界而设计的。那个世界已经不存在了。AI 生成的代码很少有拼写错误,几乎总能编译通过。但它正在以你的审查流程从未设计来捕获的方式,悄悄地侵蚀你的代码库。
对数十万个 GitHub Pull Request 的分析表明,AI 生成的代码产生的问题是人类编写代码的 1.7 倍——每个 PR 大约 10.8 个问题,而人类为 6.5 个。但缺陷的分布发生了根本性转变:逻辑错误增加了 75%,性能问题出现的频率几乎是之前的 8 倍,安全漏洞多了 1.5 到 2 倍。最重要的缺陷恰恰是你传统审查机制最容易遗漏的。
缺陷分布已经转变
传统代码审查的进化方向是捕获人类犯的错误:拼写错误、差一错误、遗漏的边界情况、不一致的命名。这些是细心的第二双眼睛几分钟内就能发现的低垂果 实。
AI 生成的代码几乎从不存在这些问题。它在语法上无可挑剔,格式一致,严格遵循命名规范。这制造了一种危险的质量幻觉。代码看起来非常优秀,这意味着审查者的模式匹配直觉——经过多年训练来发现粗糙代码——无法被触发。
AI 代码真正产生的是更高抽象层次的失败:
- 幻觉 API:模型生成了看似合理但在你使用的库版本中实际不存在的方法调用。在研究的 756,000 个代码样本中,近 20% 引用了不存在的包。更糟糕的是,这些幻觉中有 43% 在不同查询中一致重复出现,使其看起来像真实的依赖。
- 照搬模式:用抽象工厂模式来格式化日期字符串,用策略模式但只有一个策略。AI 会产出架构上复杂精致但与实际问题完全不匹配的代码——一个函数就能解决的问题,却用了三个类和一个接口。
- 微妙的架构漂移:每个 AI 生成的 PR 在局部看来都是合理的,但在全局上却缺乏一致性。模型不理解你系统的隐式约定,它引入的不一致性会累积,最终使代码库与自身对抗。
- 过时的 API 用法:LLM 是在历史代码上训练的。它们生成的是旧版本库的模式,而你的项目运行的是新版本,从而引入弃用警告和微妙的行为差异。
自动化偏见税
以下是一个令人不安的发现:审查者对 AI 生成代码的橡皮图章速度比人类编写的代码更快。这就是自动化偏见——一种被充分记录的认知倾向,即比手动系统更信任自动化系统。
数据支持了 这一点。使用 AI 工具的开发者合并的 Pull Request 多了 98%,而 PR 审查时间增加了 91%。这笔账算不过来。如果你审查的 PR 数量翻倍,而每次审查几乎花费两倍时间,那一定有什么被跳过了。数据也证实了这一点:只有 48% 的开发者在提交前始终验证 AI 辅助代码,尽管 38% 的人表示审查 AI 逻辑实际上比审查人类代码需要更多的精力。
结果是一个生产力悖论。团队每年多发布 20% 的 PR,但每个 PR 的事故率增加了 23.5%。变更失败率上升了 30%。速度是真实的。质量退化也是真实的。而且这种退化在进入生产环境之前是看不见的——通常在代码合并后 30 到 90 天才爆发。
使这一问题特别隐蔽的是努力启发法。当代码在没有人类可见的编写努力的情况下出现时,审查者会无意识地低估验证它所需的努力。代码来得很容易,所以它一定很简单。这是错误的,原因与一篇来自未曾出勤的学生的精美文章值得更多审视而非更少完全相同。
针对 AI 特定失败模式的审查清单
你现有的审查流程抓错了重点。以下是针对 AI 生成代码需要增加的内容:
存在性验证:所有导入都能解析吗?所有引用的方法在你依赖的版本中都存在吗?这应该在 CI 中自动化——一个验证每个函数调用是否与实际依赖树匹配的步骤。它在人类看到 PR 之前就能捕获幻觉 API。
必要性审计:对于每个抽象、接口或设计模式,问:当前代码库需要这个吗,还是 AI 在与来自更大系统的训练数据进行模式匹配?AI 最常见的过度工程模式是过早抽象——为不存在的需求构建可扩展性。
架构一致性检查:这个 PR 是否引入了一种新的方式来做代码库已经用另一种方式在做的事情?AI 模型没有你的架构决策的记忆。它们会引入新的 HTTP 客户端、不同的错误处理模式或替代的状态管理方法,因为它们不知道你已经做出了什么选择。
理解性提问:PR 作者能解释为什么选择这种方法而不是其他替代方案吗?不是代码做了什么——而是为什么选择这种方法。如果回答是"AI 生成的,而且能用",那就是一个危险信号。没有人理解的代码就是没有人能调试的代码。
边界情况来源:测试套件中的边界情况是否由编写实现的同一个 AI 生成的?AI 为 AI 生成的代码编写的测试往往有相同的盲点。要求至少一个由人类编写的测试,针对 AI 可能无法预见的场景。
揭示橡皮图章行为的指标
你无法改进你不衡量的东西。大多数团队跟踪审查周转时间和 PR 吞吐量。当 AI 在编写代码时,这些都是虚荣指标——它们看起来都很好,而质量在悄悄退化。
请改为跟踪这些指标:
- AI 归因回滚率:被回滚的提交中有多少百分比是 AI 辅助的?如果这超过了你的整体回滚率,你的审查就没有捕获到 AI 特定的缺陷。
- 按 AI 百分比划分的审查时间:衡量 AI 生成内容占比较高的 PR 是否每行代码的审查速度更快。如果是,你就有自动化偏见问题。
- 合并后缺陷延迟:AI 生成代码的缺陷在合并后多久才会浮现?危险的模式是通过了初始审查和测试,但在数周后才在生产环境中失败——30 到 90 天的定时炸弹。
- 审查评论密度:审查者在 AI 生成的 PR 上留下的评论是否更少?在问题多 1.7 倍的代码上评论更少意味着审查流程正在失效。
- 按 AI 参与度分段的变更失败率:比较 AI 辅助 PR 与纯人工 PR 的 DORA 变更失败率。如果存在显著差距,你的审查流程就没有适应。
目标不是减慢 AI 辅助开发的速度。而是让你的审查流程对 AI 生成缺陷的有效性与它对人类生成缺陷的有效性一样高。
标签化和流程变更
最简单的高杠杆变更是标签化。给包含 AI 生成代码的 PR 打标签,让审查者知道要应用扩展的检查清单。这不是为了污名化 AI 的使用——而是为了在审查者开始阅读之前给他们正确的心智模型。
除了标签化,还需要考虑结构性变更:
强制小 PR:研究清楚表明,超过 200-400 行代码后,缺陷检测率急剧下降。AI 使生成 1,000 行的 PR 变得轻而易举。设置硬性限制。如果 PR 超过阈值,无论代码如何产生,都需要在审查前拆分。
高 AI 占比 PR 的二次审查:如果超过 60% 的差异是 AI 生成的,要求第二位审查者。不是因为 AI 代码本身更差,而是因为自动化偏见风险随着审查者未亲眼见证编写的代码比例而增加。
注释要求:要求 PR 作者在 PR 描述中解释其设计选择,尤其是在有 AI 辅助的情况下。为什么选择这种方法?考虑了哪些替代方案?这迫使作者在比"测试通过"更深的层次上参与代码,并为审查者提供仅靠差异无法获得的上下文。
即将到来的质量清算
到 2026 年初,41% 的提交都有 AI 辅助。在过去 18 个月里,行业发布的代码量超过了任何可比时期。但我们发布的和我们能正确验证的之间的差距正在扩大。
蓬勃发展的团队将是那些认识到这一点的团队:瓶颈已经转移了。它不再在于代码产出——而在于代码理解。你的审查流程是生成代码和生产环境之间的最后一道防线。如果该流程仍然针对捕获拼写错误和缺失的空值检查进行优化,那它就是在针对一个不再存在的威胁模型进行优化。
调整你的审查,衡量真正重要的东西,并以代码应得的审视态度对待 AI 生成的代码——不是因为它不好,而是因为它出错的方式恰好是你的直觉未被训练来捕获的。
- https://www.coderabbit.ai/blog/state-of-ai-vs-human-code-generation-report
- https://www.coderabbit.ai/blog/2025-was-the-year-of-ai-speed-2026-will-be-the-year-of-ai-quality
- https://www.sonarsource.com/company/press-releases/sonar-data-reveals-critical-verification-gap-in-ai-coding/
- https://getdx.com/blog/change-failure-rate/
- https://www.qodo.ai/reports/state-of-ai-code-quality/
- https://earezki.com/ai-news/2026-04-10-reviewing-ai-generated-work/
- https://www.propelcode.ai/blog/emergent-code-review-patterns-ai-generated-code
- https://blog.exceeds.ai/dora-metrics-engineering-effectiveness/
- https://devblogs.microsoft.com/engineering-at-microsoft/enhancing-code-quality-at-scale-with-ai-powered-code-reviews/
