同会话自审在结构上就是无效的。模型在对话上下文中保留着生成推理,不愿意质疑自己的决定。任何 prompt 指令都克服不了这一点。
数据
| 方法 | 每文件发现数 |
|---|---|
| 同会话 + “严格审查” | 0.2-0.5 |
| 独立实例 | 3.7 |
| 人类基线 | 4.1 |
差距是 7-18 倍。独立实例达到了人类表现的 90%。同会话审查只达到 5-12%。
为什么 Prompt 指令没用
“批判性审查”、扩展思考、角色扮演 prompt、最低发现数量要求——全都测试过了。最大改进:0.2 → 0.5 条发现。生成推理在对话上下文里。每一次评估都经过”我写这段是因为…”的滤镜——这个滤镜压制了真正的批评。
强制最低发现数量会产生编造的问题。模型为了凑数发明问题,而不是找到真的问题。
架构层面的修复
两次独立的 API 调用,上下文完全隔离:
调用 1(生成): claude -p "为 auth 模块写单元测试" > tests.ts
调用 2(审查): claude -p "审查 tests.ts 的正确性和覆盖缺口"
审查者只收到生成的输出和审查标准。没有生成 prompt,没有对话历史,没有设计目标。它根据代码本身的优劣来评估。
投入产出
独立审查增加额外的 API 时间(3 分钟 CI 预算中多出约 45 秒)。生产数据:独立审查以 $180 的额外 API 成本阻止了每月 $1,000 的 bug 损失——净省 $820/月。
审查者应该收到什么
- 生成的代码/输出(被审查的产物)
- 项目审查标准(来自 CLAUDE.md)
- 测试执行结果(客观事实,不是主观推理)
- 原始需求作为独立文档
绝不能收到:生成 prompt、对话历史、或任何关于代码为什么这样写的推理。
一句话总结: 自审偏差是结构性的而非行为性的——唯一的修复是一次独立 API 调用,审查者零生成上下文,达到 3.7 条发现而非同会话的 0.3 条。