
AI代码审查被指顺序颠倒:应在写码前约定完成标准
来源标题:AI code review has the order backwards
有观点认为,在AI代理写代码的时代,逐条审查每次改动已不再合理,正确做法是在代码产生前先约定「完成」的标准,再让机器去证明。文中称2026年11月7日有197处改动按此方式合入,无人阅读diff。文章指出,一个审查者每天只能认真处理约十几条diff,而几个代理在早晨喝第一杯咖啡前就能产出同样数量。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
AI代码审查的顺序搞反了
Dispatch 001 · 2026年11月9日 · 5分钟阅读 审查diff是一种过时的做法。当agent在写代码时,逐一审查每一处改动毫无意义。在代码存在之前先就“完成”的定义达成一致,然后让机器去证明它。11月7日,197处改动就是这样落地的,没有一个人读过diff。这就是它的运作方式。 代码曾经以人类的速度到达。一个队友写好,另一个在喝咖啡时读一遍,一天忙下来也就十几处改动。Pull request完美适配那个世界:审查者总能跟得上。 然后coding agent登场了。它们几分钟甚至几秒钟就能写完一处改动。太好了。但仔细审查仍然需要十分钟甚至更久。一个审查者一天大概只能认真对待十几处diff。几个agent在喝完早晨第一杯咖啡之前就能产出这么多。 你看,pull request是为这样一个世界设计的:团队理解代码库,并且已经就方向达成一致。在那个世界里,审查PR是第二双眼睛,用来确认计划在正轨上、团队方向一致、代码被充分理解。在一些公司里,不起眼的pull request还充当合规记录——证明另一个人审查过。 Agent没参加那场会。它们不知道计划,不共享团队的方向感,而且它们会兴高采烈地把错误的东西做得非常出色。于是pull request变成了任何人检查方向的第一个也是唯一的地方,而这时代码已经存在了。可怜的审查者在这个阶段几乎没有选择:接受或拒绝。 于是审查变得越来越薄。流程悄悄变成了橡皮图章。批准意味着有人看过了,但这话越来越不真实。作为合规记录,它现在记录的是一次点击。随着时间推移,没人能阻止机器把越来越多的代码库搅成面目全非的东西。 这件事有个名字。机器写的代码从一头进去,人批准的代码从另一头出来,而中间没有任何环节确认过它是对的。这叫代码洗白。加入agent只是加快了洗涤周期。而所有人都在假装。 然而,当出问题时,人们怪罪人类。构建者本应写出更好的prompt、多测试。审查者本应发现它;那本来就是他们的工作。审查者指向构建者,构建者指向agent,agent谁也不指,因为它已经往前赶了三个工单了。这就是那个蜘蛛侠meme,中间夹着一场生产事故。 那张图里没有人做了什么不寻常的事。流程要求一个人以任何人都读不了的速度为代码背书,然后在他们做不到时问是谁的错。更努力地工作无法弥合这个差距。改变判断发生的位置才能。 把判断移到成本低廉的地方:最开始。在代码存在之前一次性确定“完成”意味着什么,让机器把每一处改动都对照它来把关。 我们把这个决定叫做bar。它是一份简短的清单,列出工作完成时必须为真的事项,以及机器将如何证明每一条。假设你想要一个密码重置功能,标准如下:
- 重置链接在发送后30分钟过期 [测试]
- 已使用的重置链接第二次被拒绝 [测试]
- 重置邮件在2秒内发出 [测量] 三行。你十秒钟就能读完,并且确切知道交付意味着什么。没有人能在十秒钟内读完它们背后的diff,而且幸运的是,没有人需要这么做。 bar同时充当书面记录。几个月后,任何人都可以打开这个条目,看到当时要求了什么、哪次运行证明了每一条、以及是谁检查的。相比之下,pull request的批准主要只能告诉你有人找到了绿色按钮。 你只做一件事:和队友就bar达成一致——什么必须为真,以及机器如何证明它。Pullboard负责其余的一切: 每一处改动都走同样的四步,无论周一早晨还是周五晚上。 Pullboard是用Pullboard构建的。一个普通的周六,11月7日: 审查循环中没有人类,然而一整天的工作交付了。没有人坐在审查队列里怀疑人生。人类编写了agent必须达到的bar。人类观察并调优机器。人类质疑agent是否做对了,并要求提供证据。 跳过审查难道不冒险吗?没有什么被跳过。只是不再是人眼看了。每一处改动都由一个没有编写它的模型、使用在确切commit上运行的测试,对照其bar的每一条款进行检查。一个疲惫的人 skim 一遍diff,检查的东西更少,而且对自己检查了什么什么都不写下来。 如果结果错了怎么办?那就是bar放它过去了。把bar磨得更锋利,之后每一处改动都会满足更锋利的标准。Pull request让你一处diff一处diff地永远修同一个错误。bar让你一次修好,agent既构建又审查。 那架构呢?它被写下来了,所以机器可以把每一处改动都对照它来把关。Doctrine(内部规则)作为agent和gate执行的条目存在于repo中:文件大小限制、禁止的模式、哪些模块可以import哪些。违反一条,改动在审查者有机会看到之前就被拒绝了。人类的判断力被投入到编写规则中,一次,而不是在每一处diff中重新阅读它。 写bar不花时间吗?花。但远少于读diff。bar是几行字,每个条目写一次,而且它在工作之前。bar塑造了被构建的东西,更锋利的bar产出更锋利的工作。 你不再是那个傍晚六点眯着眼看diff的人了。你决定“完成”意味着什么,你设定bar,你让机器保持运转。当某样东西运行缓慢时,你修工厂,而不是修零件。你的判断力终于用在了真正重要的地方。 Prompting用于探索。Declaring用于交付。
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。