LLM 评审结果的归并与比较

使用 LLM 审查报告时,直接比较“发现了多少条问题”并不合适。同一张表中的四处错误,有的模型逐行列出,有的合并成一条。条数的差异可能只是拆分习惯不同。

还有一种差异来自核验深度。两个模型即使给出相同数量的问题,也可能只有一个找到了影响结论的错误。


一个能量提取错误

在一次计算化学任务中,Agent 使用 re.search 提取输出中的第一个 FINAL SINGLE POINT ENERGY,把优化起点的能量当成了收敛结果。

提取值为 −436.30180 Hartree,收敛值为 −436.600122 Hartree,两者相差约 187 kcal/mol。

几何优化过程中会反复计算能量,同一个关键词可能出现多次。正确解析需要结合计算是否收敛、输出属于哪个任务段,以及能量对应的几何。简单改成“取最后一个匹配值”也不总能解决问题,例如文件中可能包含后续失败的计算。

部分评审只检查了脚本打印的汇总结果,认为它与报告一致。另一些评审继续查看脚本和原始输出,才发现这个错误。只看问题总数,无法区分这两种情况。


归并成问题矩阵

比较评审结果前,可以先做去重:每一行表示一个具体问题,每一列表示一次评审,单元格记录是否发现了这个问题。

为方便归并,要求评审输出以下信息:

  • 报告中的原文及位置;
  • 报告声称的内容;
  • 与之冲突的事实及证据位置;
  • 涉及数值时,分别记录报告值与实际值。

以下是一个示意矩阵,1 表示发现,0 表示未发现:

问题 评审 A 评审 B 评审 C
能量提取错误 1 0 1
频率结论与输出不符 1 1 0
方法参数写错 0 1 1

三次评审都发现了两条问题,但内容并不相同。只比较条数会认为结果一致,矩阵则能直接显示各自漏掉了什么。


如何判断是同一个问题

归并时,先检查引文是否能在报告中找到,再结合原文位置、数值对应关系和偏差大小判断是否为同一问题。多个数值必须按相同顺序配对,避免把不同物种的数据混在一起。

数值相近不一定代表同一问题,表述不同也不一定代表不同问题。例如,两个评审给出的收敛能量只在末位小数上不同,但都指出取到了优化起点,它们应当归为同一项。反过来,同一行数据既有舍入误差,又有计算结果选错的问题,就需要分别处理。

这里的原文位置和数值偏差是辅助判据,还需要确认它们指向相同的物理量和计算对象。无法确定的条目可以保留为待复核,不必强行合并。

一条汇总意见可能同时对应多个问题,可以将它分别标记到这些问题上。但不能因为有这条汇总意见,就把几个独立问题合并成一个。

归并后,可以比较各次评审的覆盖范围,以及哪些问题只被少数评审发现。不过,所有评审发现的问题并集仍可能有遗漏,以它为分母得到的覆盖率不能直接当作真实召回率。

问题的重要程度也要单独看。一个能改变反应能符号的解析错误,与一个软件版本笔误,都只占矩阵中的一行,但对报告结论的影响不同。矩阵负责整理发现结果,是否扣分以及扣多少分仍需要另行判断。

另外,同一模型重复运行,与不同模型交叉评审需要分开统计。前者主要反映运行波动,后者才适合讨论模型之间的互补性。