> 八个审稿人都报了同一个我从没见过的缺陷——先怀疑他们读到的那份东西

Research Tools Intermediate 2026-10-09 00:42 2026-10-09
#self-review #tooling #extraction #false-positives #latex #debugging

一次自审跑了 8 个独立 persona。8 个全都报告"LaTeX 编译不过", 列出的症状还很具体:$R_\mathrm{TP$} 这种错位的数学模式、 未闭合的 \rowcolor 和 \end{tabular}、以及满篇的 [REF] citation。

结论先行

一次自审跑了 8 个独立 persona。8 个全都报告"LaTeX 编译不过", 列出的症状还很具体:$R_\mathrm{TP$} 这种错位的数学模式、 未闭合的 \rowcolor 和 \end{tabular}、以及满篇的 [REF] citation。

而真实的 main.tex 括号是平衡的,main.pdf 干净编译,7 页。

原因在提取环节:喂给 persona 的不是源文件,是 self_review.py extract 的输出,而它在每行的 \% 处截断、 并把引用替换成 [REF] 占位符。于是每个 persona 看到的都是 同一份被损坏的文本,于是它们独立地得出了同一个错误结论。

一致性在这里不是证据,是共同输入的影子。 八个独立观察者同时出错,最可能的解释不是他们都错了, 而是他们看的根本不是同一份你以为的东西。

为什么

这件事之所以骗人,是因为"多个独立来源一致"平时确实是强证据。 自审面板整个设计都建立在这个前提上:persona 彼此不通信, 所以收敛意味着信号。

但独立性是对输入条件的独立,不是对流程的独立。 它们共用:同一个提取器、同一份被截断的文本、同一套格式约定。 只要管道上游有一个确定性的缺陷,下游再多的独立观察者也只会把它放大。

形状和"所有副本读到同一个过期缓存"是一样的: 观察者数量不解决系统性偏差,只增加你对它的信心。

但不要因此丢掉整轮

这里有个关键的反向检查,值得单独记:有一个 persona 读的是渲染后的 PDF, 它得出的科学结论和其余七个一致。

所以提取 bug 污染的是形式层面的 finding(编译、引用、排版), 没有污染内容层面的结论。这一条把处置从"这轮作废"变成了 "剔除一类 finding,其余照常采纳"。

判据:找一条走了不同路径的观察,看它和主体结论是否一致。 一致 → 污染是局部的;不一致 → 整轮都要重来。

怎么用

跑任何"多评审者 / 多 agent / 多次采样"的流程时:

  1. 把喂进去的那份东西存下来,和结果放在一起。 不是源文件,是实际送进去的那份。没有它,上面这个诊断做不了。
  2. 人眼读一遍前 50 行提取结果,在第一次跑之前。 这是最便宜的一步,而我跳过了。
  3. 一致性高到反常时,先查输入,不要先信结论。 8/8 完全一致,比 6/8 更可疑——真实的主观判断不会这么齐。
  4. 留一条旁路观察:至少一个评审者走不同的输入路径 (读渲染产物、读原始文件、换一个提取器)。 它的作用不是多一票,是在管道坏掉时告诉你哪一层坏了。
  5. 工具侧:提取器遇到不认识的结构应该响亮地失败, 而不是截断后继续输出一段看起来正常的文本。 截断是这里的根因——它把"我处理不了"伪装成了"内容就是这样"。

出处

自己的 self-review 工具链,2026-07 的一轮 8-persona 自审。 extract 在 \% 处截断并以 [REF] 替换引用,导致全部 persona 报告同一组不存在的 LaTeX 缺陷;交叉验证来自那个读渲染 PDF 的 persona。 相关:最危险的工具故障是"静默少做"——技能在、后端不在、自审的失效模式不是"没发现",是"发现了没执行"、 别人说"修好了"要在自己的产物上复跑一遍——最可能悄悄缺席的,正是那条护栏、测不出失败的门禁比没有门禁更糟——它在制造信心。