高效审 AI diff 的方法

200 行 diff,编译过 ≠ 安全——按高级工程师的顺序读。

这篇讲什么

一段 200 行的 AI diff,能编译、跑测试过、看起来合理——这恰恰是现代代码库里最高风险的一种产物,因为所有表面信号都在说”快合并”。这篇讲一个资深工程师在审 AI 补丁时的真实阅读顺序、先看什么、以及最容易踩中的几类失败模式(无声删除、丢失分支、伪造测试通过)。

这篇适合谁看

审 AI PR 的所有人——不管作者是同事还是一小时前的你自己。如果你团队刚开通 agent 编程、PR 队列突然变 3 倍长,这篇尤其有用。

什么时候适合用

合并任何 AI 触碰过的 PR 之前。也包括 approve 自己的 AI 辅助 PR 之前——最尴尬的 AI 改动往往就是在”自审”环节漏出去的,因为人会默认自己记得当时要的是什么。

开始前准备

  • 把分支 pull 到本地,不要只在 GitHub 网页审。你需要能跑 git loggit blame 和测试。
  • 确认 PR 有像样的描述。“我让 Claude 修了那个 bug”不算描述,必要时退回。
  • 把 AI 声称修好的那个测试 / 复现步骤摆在你面前。如果根本没有,第一个要问的就是它到底在解什么。
  • 关掉编辑器的 diff 折叠。AI agent 特别擅长把删除塞进折叠的区域里。

具体步骤

  1. 先看删除。git diff --stat 排序,找红色最多的文件。AI agent 经常把它没看懂的分支、错误处理、整段 feature flag 悄悄删掉。
  2. 其次看重命名。 git log --followgit diff -M 能识别真重命名。有时 AI 是”删掉再新建”,blame 历史会丢,行为变更可能被藏在一次”重命名”里。
  3. 最后看新逻辑。 新代码读起来最爽,最容易点头放行。留到状态最好的时候再看。
  4. 跑 AI 声称修好的那个测试。 先 checkout 到 main 确认它失败,再 checkout 到分支确认它通过。AI 有时通过改 assertion 来”修”测试。
  5. git log <branch> --not main 看每个 commit。出现 “fix typo” 却动到业务逻辑的 commit,是恐慌修复的标志,值得再看一眼。

AI 经常错、人通常不会错的几件事

  • 因为”happy path 更干净”而无声删除 if (err) return
  • 循环条件改了一——<<=,off-by-one 被当作”代码清晰度”提交。
  • 时区处理回退到系统默认,因为 agent 没看到那个 TZ 测试。
  • 鉴权检查下沉一层,看着对、但已经不覆盖公开路由了。
  • 测试里原本打真实接口的网络调用被 mock 掉了。
  • 顺序敏感的配置(Express middleware、Webpack loader)被”重构”打乱。

建议的操作流程

删除 -> 重命名 -> 新代码 -> 从 main 和分支分别跑那个测试 -> 看 git log 有没有惊奇 commit -> approve 或退回。200 行的补丁全程应该 5-10 分钟。超过就说明 PR 太大,要求拆分。

60 秒快速 sanity 脚本

把这段放进 shell,快速扫 AI 补丁:

git fetch origin
git diff --stat origin/main...HEAD | sort -k3 -n -r | head
git log origin/main..HEAD --oneline
git diff origin/main...HEAD -- '*.test.*' '*spec*'   # 只看测试改动
git diff origin/main...HEAD | grep -E '^-' | head -40 # 只看删除

如果最后一行显示删掉了 trycatchif (err)return——停下,回去看上下文。

FAQ

  • CI 绿了就能信吗?: 算必要不充分。CI 抓你写过测试的回归;AI 的失败模式经常活在测试覆盖之外。
  • 审一个 PR 多久合理?: 大致 30 行有效 diff 用 1 分钟;再大就该拆。
  • 如果测试也是 AI 写的呢?: 用加倍的怀疑读测试 diff。至少确认有一条 assertion 在断言 AI 不可能从 prompt 里推断出的具体值。
  • 能让 AI 审自己的 diff 吗?: 当第二意见可以,当唯一意见绝不行。它经常恰好漏掉自己刚做错的事。
  • 可以带 comment approve 吗?: 人 PR 可以;AI PR 直接退回。agent 一轮就能把所有 comment 都改好,没必要省。
  • 超大生成文件(lockfile、schema)怎么办?: 折叠看,但抽查 agent 声称变化的版本号是不是真的变了。

容易踩的坑

  • 先看新代码——你会被意图吸住,错过删除。
  • 把”能编译”当”是对的”——很多 bug 类型检查照样过。
  • 跳过 AI 声称修好的那个测试——你失去了唯一的 ground truth。
  • 只在网页 UI 上审——你什么都跑不了,也就什么都没法证伪。
  • 没描述的 AI PR 也合并——以后线上出问题,未来的你零上下文。
  • 有 nit 也一轮 approve——agent 可以无限免费重写,用就完了。

相关阅读

标签: #AI 编程 #教程