晨光里的AI
银色小机器人站在灰色展厅中央,双手被一条粗铁链拴住,链条横穿地面,四周墙上挂着几幅抽象画

入门系列文章 · 第 21 篇

如何让 LLM-as-Judge 更可信?先别让它什么都判

把所有评测维度塞进一个 prompt、让最强的模型打一个总分,这条路走不通。按可验证程度把评测拆成四层,给每层的模型授予不同权限:先收权,再校准。

Written by 晨旭发布于 约 9 分钟首发于公众号

TL;DR

评测器本身也会犯错。把事实、引用、结构、深度这些可验证程度完全不同的问题混成一个总分, 结果是事实错误被良好的行文掩盖,而且分数掉一分也不知道该修检索、证据筛选还是写作 prompt。 这篇按可验证程度把金融 Deep Research 的评测拆成四层:过程指标完全不用 LLM;事实评测让模型抽取、让程序判决; 引用核证把模型限制在给定论断与证据内并允许它弃权;只有真正主观的部分才交给 Judge,且用手写 Rubric 拆成二值项。 最后讨论离线 Rubric 如何用线上 A/B 的偏好对来筛选和校准。

目录

开篇

上一篇文章,我记录了第一次完整实践评测驱动时踩过的一些坑。

其中让我印象最深的一件事是:评测器本身也会犯错。

最近,我开始从头思考评测这个问题。在最开始做 AI 产品时,我会想,人能做的事情,为什么模型不能做?是不是只要我在提示词里考虑到所有评测维度、用最好的模型来判,然后通过 bad case,不断丰富维度、约束词,就可以驱动产品越来越好了呢?

但在不断实践之后,我逐渐发现这样是不行的。🙂‍↔️

还是拿金融 Deep Research 生成报告为例,它至少会包含四种完全不同的问题:

  • 系统有没有找到需要的材料?
  • 报告里的数字、日期和单位是否正确?
  • 报告标注的引用是否真的支持前面的论断?
  • 报告的结构、分析深度和风险讨论是否合理?

这四类问题的可验证程度完全不同。

「营收是多少」存在相对明确的标准答案;「某条引用是否包含这个数字」也可以回查证据;但「分析是否有深度」则很难用规则直接判断。

如果把这些问题全部交给 LLM 来输出一个分数,会产生几个问题。

  • 一个事实错误可能被看起来良好的结构和语言掩盖。
  • 分数的变化无法指导优化。总分下降了一分,到底应该修检索、证据筛选、数字处理,还是写作模型的 prompt?
  • Judge 可能本身就会受到报告长度、选项顺序、语言风格甚至模型家族的影响。

所以这样看,单纯用 LLM 判断,最大的问题是它把不同可信度、不同可验证程度的判断混在了一起。

👉 让 LLM 参与评测,但这不等于把最终裁决权交给 LLM。需要先收权,再校准。

「收权」解决:哪些问题不应该由 Judge 判断。

「校准」解决:对于剩下确实需要 Judge 的问题,如何验证它是否值得信任。

可以根据每类问题的可验证程度,把评测拆成不同层级,并给每层的模型授予不同权限。👇

第一层:过程指标完全不需要 LLM

最底层是过程指标。

这一层不判断报告最终写得好不好,只记录系统在研究过程中究竟做了什么,例如:👇

  • 搜索和抓取到了多少条证据
  • 抓取成功率是多少
  • 权威来源占比是多少
  • 最终证据来自多少个不同域名
  • 总耗时和 Token 消耗是多少
  • 某条目标事实是否曾经进入证据池

这些指标都可以从工作流状态中确定性计算,不需要调用模型。

这层最重要的价值不是评分,而是归因。

比如,一份报告漏掉了某个重要数字,这时就可以按照层级顺序一一排查:

  • 这个数字有没有进入证据池?
  • 它进入了证据池,那在筛选阶段模型有筛选到对应的文章吗?
  • 它已经交给写作模型,但最终模型有正确写进报告吗?
  • 写作模型写进去了,那是在报告期或者单位上出错了吗?

同一个「报告漏事实」,背后的根因可能完全不同。如果没有这些过程指标,所有问题最后可能都会被归结成是模型效果不好。

所以这一层做到了:

系统到底做了什么,信息从哪一步开始丢失的?

第二层:让 LLM 负责抽取,让程序负责判决

这一层是事实评测,会比过程指标更复杂,因为研究报告是自然语言文本。

例如,源文章的标准事实可能是:

某公司 2025 年营业收入为 3375.32 亿元。

报告里的表达却可能是:

公司全年实现营收约 3375 亿元,较上一年度基本持平。

要判断它是否正确,只靠代码规则就很困难,这时就需要利用 LLM 的自然语言能力从这些文字表述中来识别:

  • 指标是什么
  • 报告期是什么
  • 数值是多少
  • 单位是什么

但之后的「这个数字算不算正确」这些最终判决还是要交回给程序:

LLM 从报告中抽取候选事实
代码比较数值、单位、报告期和容差
得到 Fact Recall / Numeric Accuracy

👉 模型负责把自然语言转成结构化信息,程序负责决定它是否命中标准答案。

这里就是在收窄 LLM 判别的权限:

  • 有理解自然语言的权限;
  • 但没有决定答案是否正确的权限。

第三层:引用核证不是「有引用就算正确」

这层解决的是报告里的数字正确,并不代表对应的引用就正确。

例如:

公司 2025 年净利润增长 20% [3]

这里就需要检查:

  • [3] 对应的证据到底是什么
  • 证据里有没有这个指标
  • 报告期是否一致
  • 数值口径是否一致
  • 证据是支持、矛盾,还是信息不足

需要先把带引用的实质性论断逐条抽取出来,再和它引用的证据逐一核对。核证结果会被限制在三类:

  • supported
  • unsupported
  • unverifiable

每条结果都必须保留:

  • 被核证的具体论断
  • 引用了哪些证据
  • 判定结果
  • 判定依据

未引用的论断更危险

如果只检查带 [n] 的句子,还有一个明显的盲区:

模型最可能在没有引用的地方凭参数记忆写作。

所以我还会抽取不带引用的实质性事实,并将它们和整个证据池进行比对,统计:

  • 有多少实质性论断没有引用
  • 这些未引用论断中有多少能被证据池支持

这一层仍然调用了 LLM,但它的权限同样会被限制:

  • 只能在给定证据范围内判断
  • 只能输出有限的结构化结论
  • 每个结论都能回到具体论断和具体证据
  • 信息不足时允许输出 unverifiable,而不是强行判断

👉 LLM 不能被允许脱离证据去自由裁决。

第四层:真正主观的部分才交给 Judge

完成事实和引用核证之后,剩下的才是难以程序化的部分,例如:

  • 报告结构是否合理
  • 分析是否足够深入
  • 是否只是复述事实
  • 金融分析是否严谨
  • 风险和不确定性是否被充分讨论

这些问题很难找到唯一标准答案。在涉及投资建议的问题里,Judge 还会判断:

  • 结论是否有报告中的事实支撑
  • 是否使用了合理的估值锚
  • 是否同时讨论多头和空头因素
  • 是否包含必要的风险提示和免责声明

但这里有一个非常重要的边界:

Judge 只评价投资建议的论证质量,不判断买入或者卖出的方向最终是否正确。

方向是否正确,需要未来收益或真实业务反馈,这是离线 Judge 永远做不到的。

对于我现在的离线做法是用手写 Rubric 把主观要求显式化,把抽象要求拆成二值项。例如分析一家银行时,可以检查这些 Rubric:

  • 是否解释了营收接近零增长、净利润仍增长的结构性原因
  • 是否使用 PB 和股息率作为估值锚,而不是机械套用 PE
  • 是否讨论净息差下行、资产质量与 ROAE 变化

Judge 对每一项只能回答 passfail

仅仅提到关键词、没有实质分析,不算通过;如果 Judge 漏回某项,默认记为失败。最后汇总成 rubric_pass_rate。这样 Bad Case 就可以直接定位到缺失的分析点。

目前每个 case 使用的专属 Rubric 主要来自:

  • pairwise 对比中失败报告的裁判理由
  • ChatGPT / Gemini Deep Research 覆盖、而当前系统遗漏的分析
  • 沿工作流回放得到的 Bad Case
  • 卖方研究中常见的行业分析框架

当然,手写 Rubric 同样会引入我的主观偏差,但目前它至少是显式、可审计、可以修改和回放的,只适合我目前的实验条件。

从离线 Rubric 到线上反馈

前几天看到淘天技术团队在《让 Agent 可评、可控、可迭代:业务效果导向的评测体系与场景实践》中讨论他们一个真实线上产品的评测问题:营销策略 Agent 的输出没有唯一标准答案,一条离线看起来合理的策略,只有进入真实业务后,才能观察它是否带来了 ROI、GMV 等指标的增量。

文章中提到,线上反馈也不是一个可以直接写进评测集的标准答案。线上会有三个特点:

  • 反馈稀缺且延迟
  • 多个业务指标之间需要权衡
  • 结果还会受到货盘、周期和流量环境影响

所以他们通过 A/B 实验比较模型策略与基准策略带来的相对增量,再把结果组织成偏好对:

chosen = 线上业务效果更好的策略
rejected = 线上业务效果更差的策略

接下来,就是让 LLM 从偏好对中反推「为什么它会赢」:

  • 供给:结合偏好对差异和客观数据模式,生成候选 Rubric
  • 筛选:检查规则方向、位置交换一致性,并通过稳定性选择和交叉验证排除只在当前样本上有效的规则
  • 验证:用筛选后的 Rubric 重新判断偏好对,只保留高置信、与业务反馈方向一致的结果

这样,线上反馈提供的就是 Rubric 产生和验证的外部锚点,离线 Judge 可以以此尝试学习哪些可解释规则与真实业务效果存在稳定关系。

我想,这对于我的金融 Deep Research 体系的分工启发是:

  • 事实、数字和引用质量继续由前面的确定性评测与证据核证负责
  • 用户行为和专家偏好为主观质量提供线上偏好信号
  • 线上反馈经过实验与归因后,用来筛选、修正和淘汰离线 Rubric
  • 离线 Judge 负责低成本回归,线上实验保留最终业务解释权

所以,从离线手写 Rubric 走向线上产品,需要建立这样一个闭环:

离线 Bad Case 产生候选标准,线上反馈提供偏好锚点,验证后的 Rubric 再回到离线评测和版本准入。

最后

总结下来,可信评测的第一步是给 LLM 收权:

  • 能由程序确定的,交给程序
  • 需要理解自然语言的,让模型抽取、让程序裁决
  • 需要核验证据的,把模型限制在给定论断和证据中,并允许它弃权
  • 只有真正无法客观验证的部分,才交给 Judge

(但收权也不等于可信。👇

位置随机化、长度监控、多模型投票和参照锚,都只能降低偏见风险。所以,Judge 本身也需要自己的验证集和版本回归,同时测量准确率、一致性与高置信结论的覆盖率;没有把握时允许弃权。)

现在,我会把 LLM-as-Judge 理解为:

一个被严格限制权限、持续接受验证与回归的系统组件,而不是替代人工判断的最终裁判。

它只判断自己有资格判断的部分;并且每一个判断都能够被复核、被归因,也能够被推翻。

核心结论

标注「判断」「假设」的是我的看法而非事实;标注「已推翻」的保留在这里,不删除。

  • 让 LLM 参与评测,不等于把最终裁决权交给 LLM。可信评测的第一步是收权:能由程序确定的交给程序,需要理解自然语言的让模型抽取、让程序裁决,只有真正无法客观验证的部分才交给 Judge。#

    判断 · 把握较大

  • 把可验证程度完全不同的问题混成一个总分,一个事实错误会被良好的结构和语言掩盖,而且分数的变化无法指导优化——总分掉一分,不知道该修检索、证据筛选、数字处理还是写作 prompt。#

    判断 · 把握较大

  • 事实评测的正确分工是:模型把自然语言抽成结构化信息,程序比对数值、单位、报告期和容差后做出判决。模型有理解语言的权限,没有决定答案是否正确的权限。#

    判断 · 把握较大

  • 过程指标最重要的价值不是评分而是归因。没有它,「报告漏了一个事实」这类问题最后都会被笼统归结成模型效果不好,而根因可能在检索、筛选或写作的任意一环。#

    判断 · 把握较大

  • 离线 Judge 只能评价投资建议的论证质量,判断不了买入或卖出的方向最终是否正确——方向需要未来收益或真实业务反馈才能验证。#

    把握较大

引用本文

晨旭,《如何让 LLM-as-Judge 更可信?先别让它什么都判》,晨光里的AI,2026-09-21

[晨旭:《如何让 LLM-as-Judge 更可信?先别让它什么都判》](https://chenxu.xin/writing/llm-as-judge-limited-authority)

带进你的 AI 继续追问

这篇文章有一份干净的 Markdown 原文,可以直接交给任何模型读,不用复制粘贴。