What · 是什么
证伪优先的评论过滤器:只看到 diff 与评论,用 Ground A/B 双地面验证消除幻觉评论
REVIEW_FILTER_TASK 是独立于审查主循环的反思组件:主审查产出评论后,由该组件对每条评论做有效性把关,而非模型自审
反思遵循证伪优先原则:先尝试推翻评论,推翻不了才批准,与『先找证据支持』的默认倾向相反
两条硬性证伪地面:Ground A——评论目标不在 diff 中(模型评论了未改动的代码);Ground B——diff 某行字面直接反驳(diff 内容本身推翻了评论说法)
五步过滤法:第一步保护主题否决(内存安全、并发、链接一致性、行为兼容性、未用参数等主题即使无硬证据也不轻易否决)→ 低价值否决(无实际价值的评论被滤除)→ Ground A/B 检查 → 批准
反思组件存在非对称信息边界:它只能看到 diff 与评论 JSON,看不到完整文件上下文,设计上以『保守否决 + 保护主题放行』应对信息不对称
schema 字段顺序承重设计:analysis 字段在前、comment_ids 在后,序列化顺序本身参与协议设计,保证反思输入输出解析的稳定性
Why · 为什么
原理 · Principle
同一模型自审自己的评论天然偏向『我的评论是对的』,独立反思组件用确定性五步法打破该偏差,是评论质量闸门
证伪优先比证实优先更省算力也更有效:多数评论会被 Ground A/B 快速否决,无需深入语义分析即可过滤
非对称信息边界是刻意的:反思组件不读完整文件,迫使它依赖 diff 字面证据,避免『脑补上下文』为错误评论辩护
保护主题否决弥补信息不对称:内存安全/并发/链接一致性/行为兼容性/未用参数是高价值主题,评论指向它们时即使 Ground 证据不充分也放行,防止误杀真问题
五步法把『否决』设计成有顺序的确定性流程,可单测、可审计:每条被否决评论都能指出命中了哪一步
How · 怎么做
触发时机:文件子任务 MainTask 调用 task_done 后,REVIEW_FILTER_TASK 作为独立阶段对该文件全部评论执行反思
输入边界:仅注入 diff 文本与评论 JSON(含 comment_ids、analysis 等字段),不注入完整文件内容,维持非对称信息边界
五步执行顺序:①保护主题检查——评论涉及内存安全/并发/链接一致性/行为兼容性/未用参数则倾向保留 ②低价值否决——无实质价值的空泛评论剔除 ③Ground A 检查——评论目标行是否在 diff 内,不在则否决 ④Ground B 检查——diff 某行是否字面直接反驳评论结论,是则否决 ⑤批准——通过前四步的评论进入最终结果
schema 解析:按 analysis→comment_ids 字段顺序解析反思输入,顺序即协议,保证跨版本解析稳定
结果联动:被否决评论的 comment_ids 从最终 manifest 剔除,不被 emitRunResult 输出
案例 · Cases
| 代表性案例 |
|---|
| 模型对某未改动函数发表『该函数缺少错误处理』评论,但该函数不在 diff 中——Ground A 命中,评论被否决,避免了对既有代码的噪音审查 |
| 模型对一行 diff 评论『可能引入空指针』,但该行字面已包含 nil 检查——Ground B 命中,评论被否决;而另一条涉及并发安全(保护主题)的证据不足评论仍被放行 |
反模式 · Anti-patterns
- 用主模型再次自审(把评论原样丢回给同一模型要求复核)——反思必须独立组件+确定性五步法,自审产生确认偏差
- 反思阶段读取完整文件上下文再判断——破坏非对称信息边界,模型会为错误评论脑补辩护理由,Ground 检查失效
- 把保护主题豁免理解为『保护主题永不否决』——保护主题只是证据不足时不否决,若 Ground A/B 硬性命中仍应否决
- 随意调整 schema 字段顺序(如 comment_ids 前置)——analysis→comment_ids 顺序是承重设计,改动破坏既有解析兼容性
正反实例论证 · Evidence
正例 · Pro
Ground A 否决目标不在 diff 中的评论
// 评论目标行号不在 diff 变更行集合内if !inDiff(comment.TargetLine, diffHunks) { veto(comment, GROUND_A) }// 例:模型评论了未改动的既有函数 → 否决证伪优先的最快路径:多数无效评论是评论了未变更代码,Ground A 无需语义分析即可确定性否决,避免噪音审查
反例 · Con
用同一模型自审(把评论丢回给模型复核)
// 反例:复核仍由审查模型执行selfCheck := llm.Verify(comments) // 确认偏差:模型倾向认可自己产出// Ground A/B 检查被语义化讨论取代 → 无效评论漏网自审产生确认偏差,证伪优先失效;反思必须是独立组件,仅凭 diff+评论 JSON 做确定性判定
正例 · Pro
保护主题豁免:高价值主题证据不足也放行
protected := {内存安全, 并发, 链接一致性, 行为兼容性, 未用参数}if comment.Topic ∈ protected && !groundA && !groundB { approve(comment) } // 证据不足不否决// 若 Ground A/B 硬性命中则仍否决非对称信息边界下反思组件看不到完整文件,保护主题豁免防止误杀真问题;但豁免不等于永不否决,硬证据命中仍否决
反例 · Con
把保护主题豁免误解为『保护主题永不否决』
// 反例:保护主题直接跳过所有检查if comment.Topic ∈ protected { approve(comment); continue } // Ground A/B 不再执行// 模型对未改动代码编造的并发问题评论被放行豁免只适用于『证据不足』情形,若 Ground A(目标不在 diff)或 Ground B(字面反驳)硬性命中,保护主题评论同样应被否决