AI 写的代码怎么审查?拆解 Claude Code 团队从 PR 到上线的整套流程

2026年10月28日 更新:2026年10月28日 · 作者 Taylor Yang · #AI #AI 工具 #开发效率

Claude Code 约 90% 的代码由 AI 写。他们靠多层自动检查、按风险分级审批和快速回滚保证质量,人只管方向、高风险代码和最终负责。

AI 写的代码怎么审?Anthropic 的 Claude Code 团队给出的做法是:**别指望人一行行读完,把大部分检查交给机器和 AI,按改动的风险决定要几个人批准,再用合并队列、功能开关和快速回滚兜底。**人的精力只留给几件机器替不了的事:要不要做、高风险代码、架构、看证据、为结果负责。

这篇按一段代码从写完到用户手里的顺序,把这套流程完整走一遍。资料来自 Anthropic 在 2026 年 10 月发布的 How the Claude Code team does code review,其中的理解和评论是我自己的。

为什么 AI 写的代码这么难审

现在用 AI 写代码很普遍了,可怎么审这些代码,一直没个统一说法。

一行一行看?根本看不过来,AI 分分钟写出几千行。Anthropic 自己的大仓库里,每天落地的改动从 5 月的约 2,500 个涨到了 9 月的 30,000 多个,靠人逐行读显然不现实。

干脆不看?又不放心,谁知道它写的跟你脑子里想的是不是一回事。

那只审重要的部分?听着可行,可谁来判断哪部分重要?很多事故恰恰出在看起来不起眼的地方。

Claude Code 团队的处境更极端:他们说 Claude Code 自己大约 90% 的代码是 Claude 写的。那他们是怎么保证质量的?

先说结论里的数字:6 月到 9 月,Claude Code 仓库合并的 PR 翻了一倍多,需要回滚的比例反而降了 40% 以上。代码合得更多,出问题的比例更低。

值得留意的是,原文标题讲“代码审查”,内容却远不止审查。审查跟整个发布流程绑在一起,所以下面也按发布流程来讲。

先补个背景:一段代码平常是怎么上线的

写完代码后,要合并到主分支(main 或 master)。合并前一般先提交一个 PR(Pull Request),可以理解成“这段代码申请合进主分支”。

提交 PR 后通常有两类检查:

检查都过了才能合并。合并了也不等于用户马上能用,还要走一个发布环节。

所以整个过程可以分成四段:PR 前、PR 中、合并时、合并后。Claude Code 团队的大框架也是这四段,变化在于每一段里具体做什么,好适应 AI 大量写代码的情况。

PR 前:先让 AI 自证能跑,再换一个新 Agent 来查

原文说,现在大部分审查在 PR 出现之前就发生了。这一段分两步。

第一步:让 AI 自己验证产品能正常运行

给 AI 配上能运行的东西:测试、构建、浏览器、截图对比设计稿等。要求它把运行结果拿出来,光说一句“做完了”不算数。

Claude Code 的作者 Boris Cherny 认为,给 Claude 一个验证自己工作的办法,大概是拿到好结果最重要的一件事;他估计这能让最终结果好上两到三倍。

第二步:用一个全新的 Agent 检查代码质量

这里有个坑。很多人会想:代码本来就是这个 AI Agent 写的,需求在它那儿,思考过程也在它的上下文里,让它自己检查最合适。

实际跑下来,它会漏掉很多问题。它记得自己当初怎么想的,回头检查时还是顺着原来的思路走,很容易觉得自己写对了。

Anthropic 的办法是开一个上下文全新的子 Agent,只把目标和代码改动发给它,让它判断这些改动能不能达成目标、有没有风险。它不知道写代码时发生了什么,这听着像缺点,恰好让它更客观。

另外,如果自动审查老是报同一类问题,他们会从源头修:改技能、加 lint 规则,或者更新两个说明文件:

PR 中:四道检查,只有一道需要人

提交 PR 后,要过四道关:自动检查(CI)、AI 审查、安全审查、按风险审批。前三道全是机器,最后一道才轮到人。

自动检查(CI):能自动跑的都放这里

CI 是每次提交后自动跑的一整套检查:lint、类型检查、多平台测试、试着构建项目等。原文说,一个普通的 CLI PR 在有人看之前,可能已经跑了几十项检查。

PR 模板里还会问两件事:这个改动怎么测的?出了问题怎么撤回?Claude 可以帮忙填,但提出改动的那个人要签字确认。

AI 审查:发现问题、筛掉噪音、逐条回应

每个 PR 在人看之前,都会先过一遍 Claude 的审查。可以拆成三步理解。

**1. 发现问题。**AI 拿着改动、整个仓库和 PR 写明的目的一起看,问三个问题:这个改动解决了它要解决的问题吗?跟现有系统合得来吗?会不会弄坏别的地方?如果是修 bug,它还会去找根本原因。

**2. 筛选问题。**几个 Agent 同时找 bug,再由另一组 Agent 对每条发现投票,足够多的 Agent 认为是真问题才会发出来。只关于代码风格、诊断信息或清理冗余的意见直接丢掉。这些过滤规则他们先在自己的 PR 上做过 A/B 测试才留下。

**3. 处理问题。**留下来的意见按严重程度排好,标成三类:重要问题、小问题、遗留问题。遗留问题指原来就有、跟这次改动无关的 bug,单独标出来,免得作者背锅。每一条都必须回应:要么改掉,要么写明理由关掉。只要还有一条没处理,PR 就不能合并。很多时候,Agent 会在夜里把修复做完,作者第二天回来,PR 已经又过了一轮。

效果方面,他们刚上线这个功能时,内部 PR 里收到实质性审查意见的比例从 16% 涨到了 54%。超过 1,000 行的 PR 大多会被挑出问题,小 PR 大多干干净净地通过。

安全审查:单独一轮,能卡住合并

安全问题另有一轮自动审查。跟 AI 审查一样,它的发现只要还有一条没处理,PR 就合不进去。如果后面某次提交修好了问题,这条发现会自动关闭。想自己用,可以试试开源的安全审查 GitHub Action 或 /security-review 命令。

按风险审批:改错别字和改计费,待遇不一样

改文档里的错别字,和改计费或自动更新相关的代码,风险显然不同。所以他们按风险把改动分成三档:

风险等级典型改动需要几个人批准
低文档、文案、只有内部员工用的功能、藏在功能开关后面的新增改动自动审查和安全检查都通过后,不需要人批准
中普通产品改动,以及缓存、自动更新器、系统提示词这类敏感区域1 人
高风险最高的代码,以及一小部分固定要两人审的路径2 人

这张表背后还有几条规矩,我觉得比表本身更值得抄:

AI 审查本身是怎么越变越好的

流程搭好之后,AI 审查还得持续调。原文围绕三件事:找出真问题、少提没用的意见、审查能正常结束。

用真实事故当考题

他们把过去引发事故的 PR 收集起来,连同后来的修复和回滚,请熟悉那块代码的工程师确认 bug 是什么、在哪里。每个案例就是一道考题,合起来是一个评测集,而且每出一次事故就多一道题。

打分思路很简单:把案例里的 PR 交给 AI 审查,看它有没有找到那个真实的 bug,找到算 1 分,没找到算 0 分。每次改提示词、换工具、换模型,都用同一套题再考一遍,分数涨了才保留改动。这个评测集每天都在跑。

统计“没用的意见”

只看找没找到真 bug 还不够。AI 报得越多越容易得分,可没用的意见也越多,开发者得一条条看。

他们用两种办法衡量噪音:

  1. **看作者怎么处理每条意见。**分成四类:改了、说它错了、说这是故意这么写的、觉得无所谓。只有第一类算有用。
  2. **拿确认没问题的 PR 去测。**统计 AI 有多少次报出了“会诱导别人做出有害修改”的意见。

他们写明的优先级是:先抓真 bug,其次减少审查轮数。

作者是 Agent 时,噪音的代价更大。人看到一条鸡毛蒜皮的意见,几秒钟就能略过;Agent 会老老实实去改,于是多一次提交,又多一轮审查。

让审查能收尾

审查怎么会停不下来?AI 审查提意见,写代码的 AI 照着改,交回去;下一轮又有新意见,又改……原文提到,有个 CLI 的 PR 一晚上来回改了 50 多轮,最后是作者手动叫停的。

他们用 git blame 查了审查 AI 反复报的问题,发现约 59% 的代码在它第一轮看的时候就已经在那儿了。也就是说,它很少发现新 bug,每一轮只是多翻出几个老问题。

于是他们改了重审规则:

  1. **超过三轮就停一停。**三轮还没通过,审查 AI 会提醒作者退一步,想想整体思路是不是有问题,别再一点点修补。
  2. **前几轮之后,只看新改的部分。**头几轮,审查会把改动连同它影响到的地方整体看一遍。比如改了一个函数,它会去查项目里哪些地方调用了这个函数。这样查得全,但每一轮都整体重看,总能翻出点前几轮就存在的问题,审查就永远停不下来。所以几轮之后,范围收窄到新改的那几行。前几轮已经把改动和影响范围看过好几遍,这样收窄基本不会漏掉大问题。
  3. **同类问题一次指出。**同一种错误出现了好几处,就一次全标出来,作者一次改完,免得下一轮又被挑出另一处。
  4. **不重复提意见。**提过的意见,后面几轮不再提。

效果很明显。按原文图表的数据,调整之后:

指标调整前调整后
一轮审查加修改就通过的 PR65%78%
需要 5 轮及以上的 PR8.9%1.5%
平均需要几轮才通过2.081.32

此外,审查 Agent 每晚还会扫一遍已有代码,把老 bug 提前挖出来。

合并时:用合并队列排队上主分支

PR 过完前面这些关,也不会直接合进主分支,而是先进合并队列排队。

轮到某个 PR 时,系统把它和最新的主分支合在一起,所有检查再跑一遍,通过了才真正合进去。下一个 PR 也一样,只是这次跟它合在一起的主分支已经包含了上一个 PR。

这一步防的是这种情况:两个 PR 各自测试都没问题,合到一起却把主分支弄坏了。合并队列能把这种 PR 拦下来退回给作者,保证主分支一直能正常运行。

合并后:功能开关、分批发布、快速回滚

代码进了主分支,还要安全地送到用户手里。这里有三件事。

**功能开关。**新功能通常先藏在一个开关后面,一开始只对 Anthropic 员工打开。员工每天都在大量使用 Claude Code,很多问题在普通用户碰到之前就被他们发现了。

**分渠道发布。**Claude Code 有两个发布渠道:latest 是最新版,stable 是稳定版。新版本先发到 latest 给愿意尝鲜的用户,stable 会晚一段时间再跟上。

**观察和回滚。**总有漏网之鱼,所以最后一层拼的是发现快、撤回快。功能开关不用重新部署就能关掉,这是最快的止损办法;开关解决不了,就回滚或重新发布一个没问题的版本。Claude Code 还有每周轮换的值班,事故复盘时会问一句:这个问题本该在哪一层被拦住?

原文也坦白了还没做到的部分:发现坏的合并,目前仍要靠作者、值班人员和回滚、事故看板;他们还没有“数字一变就自动收紧审批”的熔断机制,团队希望先有它,再让更多代码走零人工合并。

有位同事的说法我很认同:放慢确实能降低出错率,但主要是因为你什么都做得少了。他们宁愿在发现和修复问题上更快。

一个 bug 想混到用户手里,要闯多少关

把四个阶段串起来看:

单看任何一层都可能漏掉问题,叠在一起,一个 bug 想一路混过去就很难了。而且这么多关卡里,除了重要代码要人审批,其余几乎都是机器和 AI 自动完成。

在我看来,这整套设计都围着一个目标转:**保证质量的前提下,尽量少用人。**原文的说法是,他们的目标是让大部分 PR 最多只需要一个人参与(这个人可以就是作者),同时回滚和事故不增加。回滚率和事故率是护栏,这两个数一涨,说明省下的人力只是挪到了救火上。

人的时间该花在哪五件事上

既然人的时间和注意力最宝贵,那该花在哪?原文列了五件事:

  1. **判断该不该做。**产品方向、品味、功能范围,机器判断不了。原文提到,有个团队宣布自己的审查瓶颈已经解决了,但团队外部提交的改动仍保留人工审查,好让有人问一句:“这事我们真该做吗?”
  2. **审高风险代码。**计费、自动更新、CI 配置这些地方,一出问题影响就很大,得有人亲自盯。
  3. **把关架构。**架构一旦定下来,就成了后面代码的样板,人和 AI 写类似功能都会照着来。样板错了,错误会被照抄到一处又一处。
  4. **看证据。**以前审查看的是每一行代码;现在主要看证据:测试输出、跑了什么命令、返回了什么、产品截图、AI 的发现。原文给了一条很实用的标准:如果你说不出这些检查会漏掉什么,就别随手批准,要求一次真正的审查。
  5. **为结果负责。**不管代码是谁敲的,上线后都得有一个人对它负责。AI 背不了锅。

想在自己团队试,可以先做这几步

原文最后给了一份落地清单,大部分东西现在就能用上。如果你的团队也在大量用 AI 写代码,可以挑着先做:

如果团队规模小、改动量不大,人工审查还看得过来,就没必要一次全上。我会先做 PR 模板和“意见必须处理完才能合并”这两条,成本最低,马上能见效。

写在最后

去年,很多人还在争 AI 写代码靠不靠谱,不少人觉得 AI 写出来的基本是垃圾,真写代码还得靠人。今年这种声音少多了,AI 写代码的能力确实一天比一天强。还坚持纯手工写代码的人,很难跟用 AI 的人拼速度。

写代码变容易了,真正让人头疼的问题换成了:AI 写的代码怎么审,产品质量怎么保证。Anthropic 这篇文章给了一个挺实在的答案,从“PR 翻倍、回滚比例降四成”的结果看,这套流程是靠谱的。

这篇文章讲了很多细节,我觉得最核心的一点是重新划分人和 AI 的分工:AI 负责大量执行,写代码、跑检查、找问题;人负责最关键的决策,这个需求该不该做、用什么架构、出了问题谁负责。

这让我想起 OpenAI 讲 Harness Engineering 时的一句话:Humans steer. Agents execute. 人来掌舵,AI 来执行。Anthropic 和 OpenAI 最后走到了同一个方向。

回到开头的问题:AI 写的代码怎么审?往深一层想,它问的其实是怎么把人有限的注意力用在最关键的地方。

Anthropic 这套流程未必是最终答案,模型越来越强,流程还会变。但大方向应该不会变:能交给 AI 的尽量交给 AI,人把时间花在最重要的决策上。这可能也是整个软件开发接下来要走的路。