你还应该审查你的AI代理的代码吗?

你的代理写的代码比你以前合并的许多拉取请求要好。那么你还需要逐行阅读吗?关于双方的诚实论点,告诉你代理出错的10个信号,以及每个更改实际上值得多少审查。

争论在每个团队中以相同的方式开始。一方说,代理现在交付的代码比我们以前签字的许多拉取请求要干净得多,那我们为什么还要逐行阅读呢?另一方则说,因为我们是签字的人。

双方都是对的。这正是争论永无止境的原因。争论不会结束,因为问题本身是错误的,一旦你修正了问题,答案几乎变得无聊。

不逐行阅读代码的理由

从最强的乐观论点开始,因为它比大多数审查者承认的要强。

在一个有明确规范和测试套件的有界任务上,现代编码代理产生的代码比在截止日期下工作的中等人类更一致。它不会在错误路径上感到厌倦。它在周五下午六点写下空检查。它每次都遵循给定的项目约定,而没有疲惫的开发者允许的小小叛逆。

在人类审查之前,审查也已经破裂。任何在真实团队中工作过的人都知道 LGTM 反射:审查者的注意力在几百行后崩溃,随之而来的批准是社交的,而不是技术的。我们并没有失去严格审查的黄金时代。我们失去了一个已经大部分是戏剧的仪式。

然后是数量。一个开发者同时运行五个代理,每小时生成的diff比任何人类能仔细阅读的都要多。如果你的规则是“阅读所有内容”,那么你就悄悄地重新安装了自己作为你刚刚自动化掉的瓶颈。一个人快速浏览 900 行diff,产生签名而没有产生知识,这比根本不审查更糟,因为它制造了没有的保证。

保持人类在diff上的理由

现在是另一方,这一方的论点也比热衷者承认的要强。

问责制无法转移。 模型不会在凌晨三点被叫醒。它不在事件审查中,不与数据泄露的客户交谈,也不会将变更的后果带入下个季度。合并的人拥有结果,审查是行使所有权的方式,而不仅仅是声明。

代理审查者在与代理作者相同的方向上失败。 这是实际上解决“让另一个代理审查它”提案的论点。来自同一模型家族的两个代理,在相同的上下文中,分享先验,分享训练数据和盲点。它们的错误是相关的。第二个代理会乐于捕捉缺失的测试或未处理的错误,并乐于批准导致错误的领域的微妙误解,因为它也产生了相同的误解。两个方向错误的审查者并不等于一次有效的审查。

测量结果也不乐观。 行业数据表明,审查者在 AI 生成的更改上进行的回合比人类编写的更改多得多:代码到达得更快,但变得值得信赖的时间更长。一项 2026 年 1 月的研究进一步发现,代理生成的更改每次携带更多冗余和累积的技术债务,而审查者报告对批准它们的感觉更“好”。这种感觉与代码质量之间的差距,就是整个风险的一句话。

争论的框架是错误的

这里是结束会议的重新框架。

你审查代码不是因为你不信任作者。你审查它是因为你是签字的人。这是完全不同的活动,而整个争论源于混淆了它们。

一旦你看到这一点,“代理是否比人类更好”就不再是决定性的问题。决定性的问题是:如果这个更改是错误的,发现它的代价有多高,撤销它的代价又有多高? 营销标题中的一个错别字在几秒钟内被发现并在几秒钟内撤回。授权中间件中反转的权限检查由客户或监管者发现,并且它从未真正撤回,因为到那时数据已经被读取。

所以答案既不是“审查所有内容”,也不是“信任代理”。而是:

你停止逐行审查。你开始审查风险。

具体而言,审查从工作的中间转移到它的两个边界。之前:阅读计划,因为错误执行的错误计划是最昂贵的失败模式,而一个计划只有十五行,而不是九百行。之后:根据爆炸半径阅读diff。在此之间,行属于机器。

“代理搞砸了”实际上是什么样子

你可以带回团队的最有用的东西不是意见,而是一个客观信号的列表。不是“代码感觉不对”,而是你可以在不到一分钟的diff中检查的信号。这些是已经赢得其位置的信号。

  1. 测试在与其覆盖的代码相同的提交中发生了变化。 绿色是构造的,而不是观察到的。这是列表中信号最强的信号,也是首先要检查的信号。
  2. 一个断言被削弱或一个测试被禁用。 一个 skip,一个 only,一个断言被扩大以接受新代码返回的内容,一个 try/catch 吞下了测试本应暴露的错误。
  3. diff大于任务。 没有人要求的文件被触及。代理中的范围蔓延不是热情,而是代理在某个地方重新解释了目标的迹象。
  4. 一个虚构的表面。 一个 API 方法,一个配置选项或一个不存在的路径。它在代理的脑海中编译,而在其他地方则不存在。
  5. 环境被修复而不是代码。 一个硬编码的绝对路径,一个特定于机器的值,一个个人令牌,一个用户名。症状在代理的机器上消失,转移到其他人的机器上。
  6. 一个未被请求的依赖出现。 新的供应链,新的许可证,新的维护表面,由某个不会维护它的东西决定。
  7. 重复而不是重用。 它重新实现了已经存在二十行之外的一个帮助器。这是测量债务的机制:每个更改在局部看起来合理,而代码库悄悄地获得了第三种方式来做同样的事情。
  8. 摘要与diff不匹配。 “修复并测试”时没有测试运行。叙述以相同的信心生成,无论工作是否发生,因此将其视为需要验证的声明,而不是报告。
  9. 指令停止被遵循。 小约定的默默丢弃是会话在开始之前降级到完全幻觉的方式。如果你在你的上下文文件中使用了 金丝雀,这正是它存在的目的。
  10. 敏感领域在经过时被触及。 一个 .env 读取,一个新的出站网络调用,一个携带用户数据的新日志行,一个捆绑到功能提交中的迁移。

注意列表中没有的内容:风格、命名、格式、“我会以不同的方式做”。这些一直是人类审查中最薄弱的部分,现在确实是浪费人力。将它们从你的审查中删除,你就能重新获得你需要的注意力来关注上述十个项目。

一个更改值得多少审查?

决定的是爆炸半径,而不是diff大小。你的团队今天下午可以采用的表格:

更改性质审查级别
文案、CSS、文档、孤立工具快速浏览diff,交付
受标志保护的功能,测试通过阅读计划和diff摘要
共享模块,跨文件重构阅读每一行跨越边界
身份验证、支付、权限、个人数据逐行审查,由人类进行,无例外
迁移、删除路径、基础设施逐行审查,第二双眼睛,回滚计划

AI 生成代码的审查阶梯:五个级别,从快速浏览文案和 CSS,到需要逐行人类审查的迁移和基础设施,附带回滚计划。

diff的大小告诉你审查需要多长时间。爆炸半径告诉你这是否是可选的。

这些行不是关于信任级别的。它们是关于错误成本的,这是代码的属性,而不是谁写的。这使得表格可用:没有人需要就代理的好坏达成一致才能就表格达成一致。如果你的团队在哲学问题上僵持不下,跳过它,协商行而已。你会惊讶于这有多快收敛。

如果你的产品在欧洲处理个人数据,法律而非品味为你写了一行: AI 构建的功能在 GDPR 下必须遵守的内容 不是判断,而“代理写的”从来不是辩护。

当五个代理同时运行时会发生什么变化

以上所有假设你可以看到更改。随着并行代理,这一假设首先破裂,并且以特定的方式破裂:diff不再有单一作者。自上次提交以来,三个代理已经触及了工作树,而“谁更改了这个文件,作为哪个任务的一部分”这个问题不再有明显的答案。没有归属的审查不是审查,而是考古。

这是一个工具问题,这也是 AgentsRoom 将审查放在代理所在位置而不是拉取请求末尾的原因:

  • Review Mode 显示你的代理所做的每一个更改,作为可读的diff,在任何内容被提交之前。这是“根据爆炸半径阅读diff”的步骤,变得足够便宜,以至于人们实际上会去做。
  • 每个代理审查 按代理过滤diff,并让你分别提交每个代理的工作。五个并行代理变成五个可审查的单元,而不是一个不可读的工作树,坏更改仍然归属于产生它的任务。
  • 提交消息是从 真实diff 生成的,使用提交字段上的闪光按钮,因此历史描述了发生了什么变化,而不是代理所说的它在做什么。这个区别在凌晨三点、六个月后是重要的。

这些都不替代判断。它消除了不行使判断的借口。

让机器拥有这些行

如果你想停止逐行阅读,那么其他东西必须阅读它们。在实践中,有四件事承担这个负担:

代理没有在同一时间写的测试。 首先编写,或由不同的代理编写,或至少作为他们自己的更改进行审查。代码及其测试来自同一代的那一刻,它们就不再是独立的证据。

使用不同模型的审查者。 这是解决相关失败问题的实际答案。如果第二个代理进行审查,请在与作者不同的提供者或模型家族上运行它。你不会完全去相关错误,但 Codex 家族的审查者在 Claude 编写的代码上捕获的问题类别与同模型审查者明显不同,正因为它不共享作者的先验。

不会感到疲倦的门。 类型、lint、秘密扫描、覆盖率底线,一个拒绝与功能捆绑的迁移的 CI。你可以表达为门的每一条规则都是你不必再注意的规则。

一个自我闭合的循环。 一个构建、运行其工作与计划并在交付任何内容之前迭代的代理,消除了你审查中“甚至没有运行”的整个类别。这就是 自我修正代理循环,它是产生diff的代理与产生结果的代理之间的区别。它并没有回答人类是否应该签字的问题。它只是意味着人类正在签署已经有效的东西。

那么,你还审查吗?

是的,但比你今天做的要少。

停止逐行阅读以感到负责。在之前阅读计划,因为那是发生昂贵错误的地方。之后根据它可能造成的破坏比例阅读diff,使用阶梯而不是你的情绪。保持一个人类在身份验证、支付、权限、个人数据和任何不可逆转的内容上,因为模型无法承担问责制,而第二个代理共享第一个的盲点。将其他所有内容交给测试、类型、门和不共享作者模型的审查者。

那些搞错这一点的团队会在两个方向上失败,而这两者都是可以避免的。一个审查所有内容,成为瓶颈,悄悄开始在没有阅读的情况下批准,这是两全其美的最糟糕情况。另一个什么都不审查,快速交付两个月,然后花一个季度偿还它从未看到的债务。

你在站会上争论的并不是真正关于代理是否优秀。它是关于谁愿意签字。回答这个问题,审查政策就自然而然地写出来了。

常见问题

你还应该审查 AI 生成的代码吗?

是的,但不是逐行审查所有内容。在代理开始之前审查计划,然后根据更改可能造成的破坏比例审查diff。文案和 CSS 只需快速浏览。身份验证、支付、权限、个人数据和迁移每次都由人类逐行审查。

AI 代理能审查另一个 AI 代理的代码吗?

这有帮助,但不能替代在风险代码上的人类。来自同一模型家族的两个代理,在相同的上下文中,往往在相同的方向上失败。它们的错误是相关的,因此第二个代理捕捉到错别字和缺失的测试,但共享导致错误的盲点。如果你确实使用代理审查者,请在与作者不同的模型上运行它。

你怎么知道 AI 代理是否犯了错误?

寻找diff中的客观信号,而不是阅读风格。最强的信号是:测试在与其覆盖的代码相同的提交中发生了变化,这意味着绿色是构造的,而不是观察到的。其他信号包括范围蔓延、禁用或削弱的断言、虚构的 API、硬编码的本地路径和摘要与diff不匹配。

AI 代理会取代人类代码审查者吗?

它们已经取代了大部分逐行阅读。它们无法取代签名。问责制无法转移到模型上,因此人类仍然拥有在任何难以逆转的事情上合并的决定权。

你需要逐行审查 AI 代码吗?

仅在爆炸半径合理的情况下。逐行审查在几个代理并行运行时无法扩展,而一个人在下午六点快速浏览 900 行diff会产生签名而没有产生知识。将注意力放在那些撤销成本高的更改上。

什么内容绝不能在没有人类审查的情况下合并?

任何涉及身份验证、支付、权限、个人数据、数据库迁移、删除路径和基础设施的内容。这些共享一个属性:错误的代价与 diff 的大小不成比例。

下载 AgentsRoom

在一个窗口中运行你所有项目的 AI 智能体(Claude、Codex、Antigravity CLI、OpenCode、Aider、Grok Build、Mistral Vibe、Kimi Code)。

免费下载 AgentsRoom

配套应用:随时随地监控你的 Agent

使用 Claude、Codex、Antigravity CLI 或其他 AI 提供商。

获取扩展
Chrome Web Store

把 Bug 和需求直接发送到您的公开待办清单。

AgentsRoom 实际运行一瞥。

多项目管理
多供应商
多代理运行
实时状态
文件差异与提交
移动应用
实时预览
代理团队
浏览器自动化
Backlog 驱动开发
提示词库
技能库
查看所有功能