那个读不懂判决的核查器
报告有一道最后防线:一个步骤,把写完的稿子对着原始数据重读一遍,标出文字和数字打架的地方。我们把最便宜的模型换进去,植入六个已知错误。它抓到两个——而且一次都没抓到「结果被讲成了错的判决」这一类。
Post A 结尾留了个承诺:推理 effort 只在思考本身就是产品的地方才值回成本——事实核查、下判决、走证明。我们的报告流水线里正好有这么一步。一份研究报告封存之前,一个核查器会把叙述对着结构化结果重读,标出矛盾:一个和 run 数据对不上的数字、一段文字说「supported」而记录里并非如此的假设。它一直跑在最便宜的模型上。于是我们对它做了旗舰篇说该做的事——按住一切、只变一个变量(模型)——量它还抓不抓得住它本该抓的东西。
1 · 核查是个召回问题——那就把错误植进去
gold set · 植入 6 个
你没法拿一份干净报告去考核事实核查器;干净报告里根本没东西可找。于是我们拿一份真实、内部一致的报告,植入六个我们自己选定的错误——三个数值(把一个陈述里的数字改成和 run 数据矛盾)、三个判决(把一个假设的结论改写成错的)。现在答案是已知的,每个模型都按同一把尺子打分:六个植入错误,抓到几个?不靠品味、不靠 rubric——只是对着 gold set 量召回。
2 · 它读得懂数字,读不懂判决
两条 verdict 各 0 / 5
柱子底下的模式比柱子本身更尖锐。haiku 有时能抓到一个错数字——死亡率差了十个点、一个 odds ratio 被挪动。但在三个植入判决里的两个上——文字把一个假设说成「supported」而记录标的是 not-supported——它得了五分之零。它看不出叙述在声称与结果相反的东西。而这正是下游看不见的那种漏:核查器什么都没找到时,返回一个空列表——和它崩溃、或纯粹漏掉时返回的一模一样。静默漏抓和正常通过,长得是同一个形状。这是我们最在意的失败,而便宜模型悄无声息地在制造它。
3 · 没有谁乱吠——而挑刺的那两个是对的
误报其实是真的
召回的另一面是噪声:一个模型会不会在干净报告上凭空造问题?这里意外反了过来。在没植入的报告上,两个较小的模型各标了一处——一个风险差写成 −10.3%,而 31.2 − 21.0 = 10.2。那不是幻觉;那是一处一直躺在报告里的真实凑整错,opus 和我们自己在跑的核查器都放过了。所以诚实的记分牌是:没有模型乱吠,而那些「误报」是小模型更较真,不是更不较真。(这也意味着我们的干净基线并非完全干净。这条备注我们留着。)
把模型配给步骤
并给你的核查器配 gold set
Post A 说,在思考就是产品的地方把 effort 拧上去。这是同一条规则往上一层:一个整份工作就是抓矛盾的步骤,模型就是召回本身,而最便宜的那个读不懂判决。我们把这个核查器从它上面挪走了。更大的那条教训,行动起来最便宜:任何你指望它去抓点什么的步骤——核查器、守卫、过滤器——在你信它之前,都该先给它一套植入失败的 gold set,因为它唯一没法自己告诉你的,就是它悄悄放过了什么。
Bench note · honest edges
单报告、单步骤、植入 6 个错误;haiku/sonnet n = 5、opus n = 4。匹配靠 signature token,不是人工盲评。成本是 CLI 计的、偏高——稳的是相对形状。方向性的现场记录,不是研究。