跳到主要内容

为什么你的 LLM 评估器失准了 —— 以及数据优先的修复方案

· 阅读需 10 分钟
Tian Pan
Software Engineer

大多数团队构建 LLM 评估器(evaluators)的顺序都是错误的。他们先写标准,然后再看数据。这种倒置是评估失准的根本原因,而且在交付首个 AI 产品的团队中几乎普遍存在。这些标准在纸面上听起来很合理 —— “回复应当准确、有帮助且简洁” —— 但当你将它们应用于真实模型输出时,你会发现评分标准(rubric)与你真正关心的内容并不匹配。你最终得到的评估器评分的是你并未衡量的内容,却漏掉了真正重要的失败情况。

解决方法不是制定更好的评分标准。而是一个不同的工作流:先看数据,再定义标准,然后在信任其进行无人值守运行之前,根据人类判断验证你的评估器。

准则优先的陷阱

标准的评估设置通常是这样的:团队定义通过/失败规则(“回复不得与源文档冲突”),为 LLM 裁判编写提示词(prompt),并在其测试集上运行。如果与人类标签的一致性看起来还可以 —— 比如 75% —— 他们就会发布该评估器。

问题在于,如果不知道错在哪 25%,75% 的一致性就毫无意义。LLM 评估器往往在你最关心的案例上出现系统性失败:模糊的输出、边缘幻觉,以及技术上正确但实际无用的回复。这些不是随机错误;它们聚集在那些只有在你阅读了数百个实际输出后才会显现的失败模式周围。

在阅读数据之前编写标准,意味着你在为你想象中的模型编写标准,而不是你现有的模型。孤立定义的评估标准会导致两种失败模式:要么太抽象(评估器无法一致地应用它们),要么太狭隘(由于这些类别在定义时不可见,它们漏掉了整个失败类别)。

还有一个更微妙的问题:标准往往反映了团队 想要 模型做什么,而不是模型 实际 做了什么。当你针对真实输出运行这些标准时,你学到的不是模型是否优秀 —— 你学到的是你对模型的心理预期是否准确。

数据优先:实践中的样子

替代工作流反转了这一顺序。在编写任何一行评估标准之前,你先花时间标记真实的模型输出 —— 通常是 20 到 50 个样本 —— 标记为通过或失败。不需要评分标准,只需凭直觉判断实际数据。这会迫使你面对模型存在的具体失败模式,而不是你预期的那些。

标记之后,模式就会显现。你会注意到模型在事实陈述上总是在以一种技术上站得住脚但实际没啥用的方式含糊其辞。或者它格式化列表是正确的,但使用的正式程度不对。或者它在 80% 的时间里能得到正确答案,但在某些可预测的边缘案例中自信地给出错误答案。这些模式构成了你标准的基础 —— 根植于证据而非理论。

这种方法有一个有意义的副作用:它极大地减少了精力的浪费。预先编写标准的团队通常会花几个小时完善评分标准,结果在标记后才发现该标准衡量的是模型从未真正遇到困难的地方,却漏掉了真正重要的失败模式。从数据开始,使得标准成为真实观察的浓缩,而非推测。

标记步骤还能强制团队内部达成一致。不同的人对于“好”是什么样子往往有不同的直觉。通过具体的例子显现这些差异,比讨论抽象标准要有效得多。你最终要么在特定的输出上达成一致,要么不一致 —— 如果不一致,你就在它变成评估器校准问题之前找到了真正的分歧。

二元标签优于复杂量表

在评估设计中,最反直觉但得到最多实证支持的发现之一是:对于大多数生产用例,二元标签 —— 通过或失败、好或坏 —— 的表现优于多点量表。

采用 5 分或 7 分量表的论据是它们更具表现力。一个平庸的回复不应该得到与主动有害的回复相同的分数。但在实践中,应用多点量表的人将大部分认知精力花在相邻评分之间的边界上。这是一个 3 分还是 4 分?这种权衡降低了吞吐量并引入了不一致性。两个评审员通常会一致认为某事是“坏”的,但在它是 2 分还是 3 分上存在分歧。

二元标签消除了这种边界问题。输出要么符合你的标准,要么不符合。这使得标记更快、更一致且更容易验证。它还使你的评估器更易于构建和解释。一个对比二元预测与二元基准真相(ground truth)的 F1 分数,比尝试解释李克特量表(Likert scale)上的评分者间相关性要实用得多。

权衡在于信息密度。二元标签无法区分“勉强通过”和“优秀”,如果你试图改进一个已经超过通过阈值的模型,这一点很重要。在实践中,大多数团队远未达到那个程度 —— 他们正在试图捕捉明显的失败,而不是对可接受的回复进行排名。在。在你穷尽了二元标签所能提供的信息之前,它是最正确的默认选择。

在信任你的评估器之前先验证它

构建 LLM-as-judge 评估器非常简单。验证它才是大多数团队会跳过的步骤,也是真正工作的核心所在。

验证工作流:获取已标注的数据集,将其拆分为开发集(development set)和预留测试集(held-out test set),然后针对开发集运行你的 LLM 评估器。跟踪精确率(precision)、召回率(recall)、F1 分数和 Cohen's kappa 系数——而不仅仅是总体的吻合度(agreement)。Kappa 非常重要,因为它修正了随机巧合带来的吻合度,这对于某种标签占据主导地位的不平衡数据集尤为重要。

然后进行优化。调整评估标准、模型温度、提示词结构或模型本身。在开发集上进行多次试验。当你认为自己拥有一个出色的评估器时,针对测试集进行一次“冷启动”验证。如果测试集的表现较开发集显著下降,说明你对开发集的分布产生了过拟合。

最后一步是大多数团队学到惨痛教训的地方。一个很小的开发集——哪怕只有 20 个样本——也可能导致评估器在开发集上表现良好但在泛化时失败。这种失败并非偶然;而是因为开发集捕捉的是特定子集的案例,而测试集展现的是评估器从未见过的另一组子集。这在评估领域相当于训练集的“死记硬背”(memorization)。

实际意义在于:将你的评估开发集视为一种设计产物,它需要像主训练数据或微调数据一样关注多样性。开发集中代表性不足的边缘案例(edge cases)会成为评估器的盲点。

何时使用集成评估器

单一的 LLM 裁判虽然方便,但很脆弱。它对什么是“好”有着固定的看法,对提示词措辞敏感,并且在面对上下文中未见过的输入类别时可能会产生“自信的错误”。规模化运行评估的团队一致发现,多个专注于特定标准的较小评估器,其表现优于试图一次性评估所有指标的单一大型评估器。

实际设计方案:将评估分解为独立的维度。事实准确性与响应格式合规性是不同的判断,而这又与语气恰当性不同。为每个维度构建一个评估器,并使用快速、廉价的模型——gpt-4o-mini 或 claude-3-haiku 非常适合大多数结构化评估任务。在更高层级聚合这些结果。

这种架构具有复合效益。当评估器失败时,你确切地知道是哪个维度出了问题。你可以更换或重新训练单个组件,而不会干扰其他组件。此外,针对每个维度的专门提示词往往比试图涵盖一切的通用提示词更加一致。

主要成本是额外开销。更多的评估器意味着更多的 API 调用和提示词维护。但对于任何以一定规模运行生产环境评估的系统来说,精度上的提升通常足以证明这种成本是值得的。

将评估基础设施视为核心产品

团队在评估方面犯下的最深层错误是将其视为一次性的设置任务,而不是持续的基础设施。你定义标准、构建评估器、验证它,然后宣布评估完成。随后,模型发生了变化,用例发生了漂移,评估器也在悄无声息中变得不再适用。

评估基础设施需要与它所衡量的产品一样进行持续投入。这意味着:

  • 为标注数据集建立版本。 基准真相(Ground truth)标签是评估系统中最持久的资产。存储它们时应附带元数据,以便重建它们是如何以及为何创建的。
  • 发现新的失败案例时及时添加示例。 每一次生产事故都是一个等待捕捉的评估案例。如果你的评估套件原本能捕捉到这个失败,那么它现在就应该被纳入套件。
  • 底层模型更改时重新验证评估器。 针对某一模型版本校准的评估器可能无法完美迁移到下一个版本。
  • 监控评估器吻合度的长期变化。 如果人工审核员与 LLM 评估器的分歧率开始上升,说明评估标准发生了漂移或模型行为发生了变化。

到 2026 年,能够交付可靠 AI 产品的团队将不是那些拥有最强基础模型的团队。而是那些拥有最严谨反馈回路的团队——这种严谨始于针对现实而非针对预期校准的评估。

总结

如果你的 LLM 评估器是在你阅读数据之前定义的,那么它们衡量的东西可能与你关心的略有不同。修复方案虽然麻烦,因为它要求按正确的顺序做事:第一是标注,第二是定义,第三是针对预留数据进行验证。

二元标签(Binary labels)在表达力上似乎是一种退步。其实不然——它们在可靠性上是一种进步。多个专门的评估器可能看起来像过度设计。其实不然——它们决定了你的评估器是能捕捉真实失败,还是只会给你虚假的信心。

构建评估工具是一项工程任务。它值得像处理任何生产系统一样投入同样的严谨性——迭代、验证和版本控制。那些以此方式对待评估的团队,其评估工作才能随着时间的推移真正改善产品。

References:Let's stay in touch and Follow me for more thoughts and updates