Open Code Review 项目解析知识图谱 / 分组目录 / 核心架构 / 独立反思

独立反思

核心架构高级方法机制G-A · 核心架构

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

正反实例论证 · 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(字面反驳)硬性命中,保护主题评论同样应被否决

实践资产 · Assets

提示词
独立反思过滤 prompt 原文(五步法 / Ground A/B / 非对称信息边界)
internal/config/template/prompts/review_filter_task_user.md · 5303 B
源码节选
agent.go 核心节选:Run 流水线 / dispatchSubtasks / executeSubtask / REVIEW_FILTER
internal/agent/agent.go · 3451 B

相关边