PostHog ReviewHog 验证器模型评估:Sonnet 5 @ xhigh 评分表深度解读——“全量保留“背后的 50% 精确率

发布时间:2026/9/18 9:59:52
PostHog ReviewHog 验证器模型评估:Sonnet 5 @ xhigh 评分表深度解读——“全量保留“背后的 50% 精确率 PostHog ReviewHog 验证器模型评估Sonnet 5 xhigh 评分表深度解读——全量保留背后的 50% 精确率【免费下载链接】posthog:hedgehog: PostHog is the leading platform for building self-driving products. Our developer tools – AI observability, analytics, session replay, flags, experiments, error tracking, logs, and more – capture all the context agents need to diagnose problems, uncover opportunities, and ship fixes. Steer it all from Slack, web, desktop, or the MCP.项目地址: https://gitcode.com/GitHub_Trending/po/posthog导读NB.score.md是 PostHog 开源仓库中 ReviewHog 自动代码评审产品products/review_hog在验证器模型评估实验2026-08-validator-model-sol中Sonnet 5 验证器第二次运行N2的评分结果表。它以混淆矩阵和三项核心指标精确率、召回率、非真实发现丢弃率量化了 Sonnet 5 xhigh 在 22 条评审发现上的 keep/drop 表现召回率 100%、但精确率仅 50%、非真实发现丢弃率 0%。读完本文你将理解 ReviewHog 验证阶段的工作原理、这份评分表的生成方法论ground truth 建立、逐簇匹配、反证优先核实以及验证器全量保留为何是发布质量的失败模式并掌握如何用仓库中的脚本复现这一评估。一、这份评分表在评估什么实验背景与文档定位ReviewHog 的评审流水线中验证器validator是发布前的最后一道质量闸门评审器reviewer在沙箱中产出大量原始发现去重后交给验证器逐条判断 keep / drop是否真实、是否值得发布。验证器把守的正是发布到 PR 上的内容有多少是真实问题这一精确率指标。2026-08-validator-model-sol实验的核心问题是能否用 OpenAI Codex 的gpt-5.6-sol以更低成本、更短时间替代 Claude Opus 作为验证模型且不损失判定质量实验沿用此前评审器模型实验2026-07-reviewer-model-glm52的冻结 PR、固定 chunk 与零评论洁净环境并分为多个对照臂L 臂Opus 5 验证器 xhigh生产固定配置M 臂Sol 验证器 xhigh / full-accessN 臂Sonnet 5 验证器 xhighAlex 的追加实验即本文主角P 臂Sol 评审器 medium Opus 5 验证器NB.score.md正是 N 臂第二次运行N2的逐条评分表。它在仓库中的位置是 products/review_hog/eval/experiments/2026-08-validator-model-sol/findings/NB.score.md与其配套的真实基准 NB.truth.json、簇匹配结果 NB.match.json 共同构成 N2 的完整评估记录。二、评分表速览混淆矩阵与三项核心指标文档标题即实验配置Sonnet 5 xhigh validator, Sol reviewer xhigh (N2): 22 scored, 0 unscored——22 条发现全部完成评分无一条无法判定。评分表给出如下混淆矩阵realnot realkept1111dropped00由此导出三项核心指标kept-are-real精确率11/22 50%——Sonnet 5 保留的发现中只有一半是真实问题real-are-kept召回率11/11 100%——所有真实发现都被保留没有漏网not-real-dropped非真实丢弃率0/11 0%——11 条非真实发现一条都没被丢弃。这三项指标分别刻画验证器的不同能力维度精确率回答我发布的东西可不可信召回率回答我有没有漏掉真问题非真实丢弃率回答我有没有把噪音挡在门外。理想验证器应当同时做到高精确率 高召回率 高丢弃率而 Sonnet 5 在 N2 的表现是全盘照收——召回率满分但过滤能力为零。对比 FINAL_REPORT 的结论Opus 5 在两个 L 臂运行中丢弃了 22 条非真实发现中的 16 条82%/64%Sonnet 5 则从 N1 的 3/1127%退化到 N2 的 0/110%。三、真实基准如何建立76 个已知簇 反证优先核实评分表的可信度取决于 ground truth 的建立方法。根据 PLAN.md 与 FINAL_REPORT.md方法如下簇匹配实验针对冻结的 PR #75215heada7fb363btree 与评审器实验一致仓库维护了一个 76 个已知问题的注册表 known_clusters.json源自七月评审器实验的 judge 文件。每条新发现先由脚本scripts/build_truth.py、scripts/score_validator.py匹配到已知簇一致簇直接复用落在意见一致簇unanimous cluster中的发现直接采用注册表判定混合簇与新声明反证优先核实簇内意见不一或未匹配到簇的新声明逐条在冻结的工作树frozen worktree上做反证优先refutation-first的人工核实产物存放在 findings/verify/完全相同的声明直接复用既有判定。在 NB.truth.json 中可以看到每条发现的source字段如 NB6/NB13 标注verified (high)本次新核实、NB2 标注cluster 1/1 (KA2/LA14 same claim)一致簇复用、NB15 标注verified-same-claim:LA6相同声明复用。这种注册表 定向核实的分层策略保证了评分表既能复用历史判定、又对新增声明保持严格审查。四、N2 运行实录成本、耗时与 effort 配置根据 PLAN.md 的运行日志N2 于 2026-08-26 上午 09:33:30–10:30:38 本地时间执行总耗时 3414 秒实验环境携带 effort 修复补丁与重试加固stream_max_retries10、300 秒流空闲超时沙箱并发数从 10 降至 4项目N2 数据评审单元4 chunks9 个评审单元 4 个盲点单元漏斗28 条原始 → 22 条去重后 →22 条 valid零丢弃评审阶段耗时27m05s验证阶段10:04–10:3022 条判定评审 盲点成本$17.45251 次调用 $8.18117 次验证成本Sonnet 5 $9.35197 次调用 9 次claude-opus-4-8子代理调用 $2.37每条判定成本$0.48–0.53effort 观测评审与验证均为$ai_effortxhigh$ai_effort由网关从请求的reasoning.effort中读取是确认 effort 是否真正到达模型的唯一证据。N2 中评审与验证调用均确认 xhigh——这与 K1–K3 运行中所有gpt-5.6-sol调用都只有 low effort形成对照后者是本次实验发现的重大基础设施问题详见 FINAL_REPORT.md The effort pin never reached Codex 一节。验证器模型与 effort 在代码中的生产固定配置位于 products/review_hog/backend/reviewer/constants.pyVALIDATION_RUNTIME_ADAPTER RuntimeAdapter.CLAUDE、VALIDATION_MODEL claude-opus-5、VALIDATION_REASONING_EFFORT ReasoningEffort.XHIGH——即实验的 L 臂生产对照组。N 臂实验期间将其改为claude / claude-sonnet-5 / xhigh实验结束后已恢复生产固定配置。五、22 条发现逐条解读评分表逐条列出了 N2 的 22 条发现NB1–NB22格式为keep/drop、ground truthREAL/not、真实严重度sev与验证器给出的优先级prio。全部 22 条均被 Sonnet 5保留。以下结合 NB.truth.json 与 NB.match.json 的簇归属整理。5.1 保留的 11 条真实发现REAL召回率 100%编号严重度优先级(验证器)簇发现标题NB2must_fixmust_fix75The webhook carve-out accepts any bot authorNB3considershould_fix35Ready re-reviews get false trusted draft contextNB8must_fixmust_fix2Initial inbox reviews trust client-writable provenanceNB9must_fixmust_fix新增LA15Webhook carve-out uses writable output as provenanceNB10must_fixmust_fix2Do not authorize the carve-out with an unchecked truthy flagNB11should_fixmust_fix57Stamphog ignores opted-in secondary reviewersNB14considerconsider50Base-retarget dismissal promises a review after opt-outNB17considerconsider23Index the TaskRun branch fallbackNB18should_fixmust_fix29Fail closed when the webhook resolver cannot read settingsNB20should_fixmust_fix21Failed and canceled runs still qualify for re-reviewNB21considermust_fix新增LB21Opt-out can leave an untracked approval active这 11 条中NB9 与 NB21 是此前 18 次评审从未报告过的新真实问题reviewer_side.md 中 NB 集合标注new real [NB9, NB21]。NB9 对应的must_fix漏洞webhook 豁免路径用调用方可写的任务输出字段作为来源证明find_signal_implementation_run将find_task_run对可写output.pr_url的匹配当作该运行产生了该 PR的证据在 L/M 臂中以 LA15/MA9/MB17 反复出现是本次实验中验证器应当保住的最关键发现之一。召回率 100% 意味着这些真实问题在 N2 中一条未丢——这是 Sonnet 5 在 N2 唯一的正面表现。值得注意的细节验证器给出的优先级prio普遍高于真实严重度sev——如 NB11、NB18、NB20、NB21 均被 Sonnet 5 从should_fix/consider上调为must_fix。这与 FINAL_REPORT.md 中评审器自身优先级虚高、验证器的优先级覆盖在 xhigh 下更为关键的判断一致代码中优先级覆盖遵循 validator-wins见 constants.py 的effective_priority。5.2 被保留的 11 条非真实发现not real丢弃率 0%编号簇核实来源发现标题NB1无已反驳verified-same-claim:MA2Authorize settings against the canonical teamNB458verified-same-claim:KA13Broker failures permanently drop initial Stamphog reviewsNB558verified-same-claim:KA13Initial review dispatch has no durable recordNB637verified (high)The hosted bypass list omits the author-association gateNB7无LA15 子案例已反驳verified-same-claim:LB14Require a recorded implementation relationshipNB1239verified-same-claim:KA5Post-selection filters can hide the qualifying signal runNB13无已核实非真实verified (high)A disable race can create a review after repository opt-outNB1558verified-same-claim:LA6Use late acknowledgements for the initial review taskNB1658verified-same-claim:KB4Exhausted retries can strand queued reviewsNB19无LA15 子案例已反驳verified-same-claim:LB14Non-implementation signal tasks receive the carve-outNB2231cluster 0/6Delayed initial tasks ignore a later toggle opt-out这 11 条非真实发现覆盖三类反复出现的幽灵簇外加当日新核实反驳的声明NB1、NB7、NB13、NB19——与 FINAL_REPORT.md 对 Sonnet 5 的概括完全一致它保留了 Sol 会保留的同一批弱声明broker/retry 加固、无范围find_task_run查找、排队时 toggle 信任外加当天早上新被反驳的声明。特别值得注意的是 NB1 与 NB13Sonnet 5 不仅保留了它们还给 NB1 赋了must_fix优先级——对一个已被逐条核实反驳的声明给出最高优先级是高召回伪装下的低判别力的典型体现。5.3 三条幽灵簇为什么这些弱声明反复存活结合 NB.match.json 与 FINAL_REPORT.md非真实发现高度集中在三个已知簇簇 58broker/retry 加固请求NB4、NB5、NB15、NB16。这类声明要求为初始评审投递增加持久化记录、延迟确认、重试耗尽对账等机制。其被判定为不真实的原因是它们拷贝了既有 webhook 路径的刻意设计投递失败由后续重发覆盖且缺乏可复现的故障链簇 39无范围find_task_run查找NB12。声称团队过滤发生在选中候选行之后、可能遮蔽合格运行。被反驳的依据是查找本身已按仓库限定作用域其他团队 → None的契约有测试覆盖test_branch_targets.py等簇 31排队时 toggle 信任NB22。声称延迟初始任务不复查评审者 opt-out。该声明在七月已被反驳六次KA1/KB10 先例process_inbox_pr_review对队列时刻acting_user_id的读取有意的行为已属既有设计。这三簇在 L/M/N 各臂中几乎逐条重现如 NB4/NB5/NB15/NB16 对应 Sol 的 MA14/MA15/MB3/MB9/MB10说明这不是运行噪音而是模型在特定声明形态上的稳定判别缺陷——无论给 Sol 还是 Sonnet 5 增加推理 effort其判别门槛都不会因此提高。六、横向对比Opus 5 / Sol / Sonnet 5 的六臂分数findings/xhigh_summary.md 汇总了八次运行的完整评分。以下摘取与验证器质量直接相关的关键行指标L1 (Opus 5)L2 (Opus 5)M1 (Sol)M2 (Sol)N1 (Sonnet 5)N2 (Sonnet 5)判定条数232219202222保留条数111218181622保留中真实精确率9/11 (82%)8/12 (67%)11/18 (61%)12/18 (67%)8/16 (50%)11/22 (50%)真实中被保留召回率9/12 (75%)8/11 (73%)11/12 (92%)12/13 (92%)8/11 (73%)11/11 (100%)非真实被丢弃9/11 (82%)7/11 (64%)0/7 (0%)1/7 (14%)3/11 (27%)0/11 (0%)每条判定成本$1.06$1.06$0.72$0.80$0.48$0.53读数非常清晰Opus 5 是唯一兼顾精确率与丢弃率的验证器保留的发现 67–82% 是真实的同时能丢弃 64–82% 的非真实发现。它也有漏判丢弃了 LA8/LA17/LA21/LB10/LB13/LB17 六条真实发现含一条must_fix但整体平衡最好Sol 与 Sonnet 5 是同一种失败模式召回率极高92–100%但丢弃率极低0–27%发布内容约三分之一到一半不是真实问题成本优势被质量劣势抵消Sonnet 5 每条判定仅 $0.48–0.53约为 Opus 的一半但对一个几乎什么都不删的验证器来说省下的钱换来的是发布噪音盲评写作文本质量同样偏向后两者argumentation_judge_N_vs_L.json 中 Opus 赢得 29 对中的 20 对、Sonnet 仅 2 对、7 平Sonnet 的写作文本中位 290 词、平均句长 33 词且在单次运行内自相矛盾NA1 与 NA8/NA13 冲突、NA5/NA22 与 NA7/NA10/NA11 冲突。从 N1 到 N2 还有一个值得警惕的趋势Sonnet 5 的丢弃率从 27% 进一步降到 0%N1 中它尚且丢弃了 NA5any-bot carve-outmust_fix、NA22engine-flag 绑定must_fix等真实发现N2 则一条不丢——验证器在宁可全留的方向上更加极端。七、结论验证器的严格性决定发布质量FINAL_REPORT.md 基于全部运行给出的最终建议是继续使用 Opus 作为验证器。理由是 Sol 在真实 xhigh 下仍保留 19–20 条中的 18 条、几乎不丢弃非真实发现成本优势缩水到每条判定约 30%而 Sonnet 5 只是同一故事的一半价格版本。这是基于数据而非偏好的结论——结合 constants.py 的VALIDATION_*固定配置Claude /claude-opus-5/ xhigh可以看到生产默认正是实验验证出的最优组合。实验还给出了两个有复用价值的工程结论评审器与验证器应当分离考虑同一模型Sol作为评审器在 xhigh 下表现优异每轮真实发现 11–13 条是 low 的三倍还发现了 8 条此前 18 次评审都没报告过的真实问题但作为验证器却无法胜任。评审需要发散探索验证需要严格证伪两者对模型特性的要求不同验证器优先级覆盖validator-wins在严格模式下更有价值评审器产出的must_fix标签普遍虚高验证器对严重度的修正effective_priority直接决定哪些发现能通过发布阈值published_priorities_for。一个全保留的验证器会让这条修正通路失效。八、复现与延伸阅读如需复现此类验证器评估实验的运行配方记录在 PLAN.md 中flox activate -- bash -c DJANGO_SETTINGS_MODULEposthog.settings python manage.py \ run_review --pr-url github_pr_url --team-id 1 --user-id 1配合 scripts/harness/ 下的运行脚本、scripts/score_validator.py 评分脚本以及 scripts/build_truth.py 的真实基准构建脚本。评估的评分协议混淆矩阵与三项指标的定义可直接复用。与本文相关的关键仓库文件评分表本体findings/NB.score.md、findings/NA.score.md真实基准与簇匹配findings/NB.truth.json、findings/NB.match.json、known_clusters.json汇总报告FINAL_REPORT.md、findings/xhigh_summary.md、findings/reviewer_side.md验证器在流水线中的位置ARCHITECTURE.md第 8 步 Validate、issue_validation/prompt.jinjakeep/drop 判定提示词通过 MCP 拉取团队拥有的 review-hog-validation-criteria 技能作为判别标准验证模型配置backend/reviewer/constants.py综上NB.score.md 不仅是单次运行的成绩单更是 ReviewHog宽进严出评审漏斗中验证环节质量的可量化证据精确率 50%、丢弃率 0% 意味着验证器实际上把发布闸门完全交给了评审器。这也是该实验将验证器与评审器模型分开评估、并最终坚持 Opus 验证器的根本原因。【免费下载链接】posthog:hedgehog: PostHog is the leading platform for building self-driving products. Our developer tools – AI observability, analytics, session replay, flags, experiments, error tracking, logs, and more – capture all the context agents need to diagnose problems, uncover opportunities, and ship fixes. Steer it all from Slack, web, desktop, or the MCP.项目地址: https://gitcode.com/GitHub_Trending/po/posthog创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考