自己审自己等于没审
主力模型自审时倾向于认同自己。防止把自审当成独立审查,用异构二审和人工批准补上
重大改动由另一个模型家族独立二审,人最后拍板
发生了什么
主力模型写完代码,我让它自己再审一遍,结论往往是“没有大问题”。
后来改成换一个不同家族的模型独立审。有一次,它抓出了主力模型漏掉的 2 个高危安全问题。另一次是人工二审:4 个 commit 的文档里散落着约 85 处不该公开的内部信息,类型检查和测试全绿,一处也拦不住。
为什么会这样
自审的模型和写代码的是同一套偏好。读到自己的实现时,它会顺着当初的思路去理解,“我这样写是因为……”读起来总是合理的。如果审查还在同一个会话里,上下文里的错误假设也会被原样继承。自审能挑出一些低级错误,但替代不了独立的批准。
换一个模型家族,训练数据和偏好都不一样,盲区未必重合。我手里只有几次成功的例子,证明不了“盲区一定不重合”;能说的是,异构审查多次带来了自审没给出的增量发现。至于信息泄漏这类语义问题,工具链本来就不管:类型对、测试过,不代表内容可以公开。
Anthropic 的 The AI-native SDLC playbook 在发布阶段也设了同样的关卡:写代码的 agent 不能批准自己的改动。
怎么做
主力模型写完,换一个模型家族审。我用 Codex CLI:
codex review --base main -c model_reasoning_effort=medium推理强度 medium 就够,xhigh 可能卡很久。装了 gstack 也可以直接用 /codex。Kimi、Gemini 也行,关键是不共享上下文,也不共享同一套模型偏见。
审查者只拿 diff 和 spec,不拿对话记录。它要知道“要做什么”和“改了什么”,不需要知道主力模型当时是怎么想的。
plan 阶段就可以审一次。跨字段的不变量问题,在计划里就能抓到,比写完代码再返工便宜得多。
人最后拍板。审查意见按严重程度列出,改哪些、不改哪些由人决定,结论留在 PR 里。涉及对外内容的改动,再加一轮人工通读。
用数据评估这个组合值不值。这一步我还没有系统做过。如果要长期用,建议每次二审记几笔:抓到几个主力模型漏掉的真问题,提了几个误报,花了多少时间和钱;再加上线后才暴露、两边都没审出来的漏报。攒一段时间,再决定换不换模型、是不是每次都审。