LLM-as-a-Judge-它是什么-为什么它有效-以及如何使用它来评估-AI-模型
LLM-as-a-Judge:它是什么,为什么它有效,以及如何使用它来评估 AI 模型
“好吧,我们正式失去了理智。”
我们生活在一个连卫生纸都被宣传为“AI 驱动”的世界。我假设这只是我们混乱且快速发展的 AI 景观中另一个由炒作驱动的趋势。
但当我深入研究 LLM-as-a-Judge 实际上意味着什么时,我意识到我错了。让我解释一下。
每个数据科学家和机器学习工程师都应该在心中保留一张图片,它捕捉了整个模型复杂度、训练集大小和预期性能水平的全貌:

作者制作的照片
如果任务是简单的,拥有一个小的训练集通常不是问题。在某些极端情况下,你甚至可以用一个简单的基于规则的方案来解决它。即使任务变得更加复杂,只要你有一个大且多样化的训练集,你通常可以达到很高的性能。
当任务是复杂且你无法访问全面训练集时,真正的麻烦才开始。到那时,没有清晰的配方。你需要领域专家、手动数据收集和仔细的评估程序,在最坏的情况下,你可能需要数月甚至数年的时间来建立可靠的标签。
… 这是在大型语言模型(LLMs)出现之前。
LLM-as-a-Judge 范式
LLM 的承诺很简单:你通过一次 API 调用就能获得接近“博士级”的许多领域的专业知识。我们可以(并且可能应该)争论这些系统到底有多“智能”。越来越多的证据表明,一个 LLM 的行为更像是一个极其强大的模式匹配和信息检索者,而不是一个真正智能的代理[你应该绝对看看这个]。
然而,有一件事是难以否认的。当任务是复杂的,难以形式化,并且你没有现成的数据集时,LLMs 可以非常有用。在这些情况下,它们在你能够收集和标记足够的数据来训练传统模型之前,就能提供高级推理和领域知识。
那么,让我们回到我们的“大麻烦”红色方块。想象一下,你有一个难题,只有一个非常粗糙的模型初版。也许它是基于一个非常小的数据集训练的,或者它是一个你完全没有微调的现有模型(例如 BERT 或其他嵌入模型)。
在这种情况下,你可以使用 LLM 来评估这个 V0 模型的性能。LLM 成为你的早期原型的评估者(或裁判),为你提供即时反馈,而无需大量标记数据集或我们之前提到的巨大努力。

图片由作者制作
这将带来许多有益的下游应用:
-
评估V0 的状态及其性能
-
构建用于改进现有模型的训练集
-
监控现有模型或微调版本的阶段(遵循第 2 点)。
所以让我们来构建这个吧!
LLM 作为生产中的裁判
现在有一个虚假的三段论:因为你不需要训练一个 LLM,而且它们在 ChatGPT/Anthropic/Gemini UI 上使用起来很直观,所以构建一个 LLM 系统一定很容易。这不是事实。
如果你的目标不是一个简单的即插即用功能,那么你需要积极努力确保你的 LLM 是可靠的、精确的,并且尽可能没有幻觉,设计它以便在失败时优雅地失败(不是如果而是当)。
我们将涵盖以下主要主题来构建一个生产就绪的 LLM 作为裁判系统。
-
系统设计
我们将定义 LLM 的角色,它应该如何表现,以及它在评估期间应该使用什么样的视角或“角色”。
-
少样本示例
我们将给出具体的例子,展示不同测试用例的评估应该如何进行。
-
触发思维链
我们将要求 LLM 生成笔记、中间推理和置信度,以触发更可靠的思维链。这鼓励模型真正“思考”。
-
批量评估
为了降低成本和延迟,我们将一次性发送多个输入,并在一批示例中重复使用相同的提示。
-
输出格式化
我们将使用 Pydantic 强制执行结构化输出模式,并将该模式直接提供给 LLM,这使得集成更干净且生产安全。
让我们深入代码!🚀
代码
整个代码可以在以下 GitHub 页面找到 [这里]。我将在下一段中介绍它的主要部分。
1. 设置
让我们从一些基础工作开始。
代码的脏活儿是用OpenAI完成的,并用llm_judge包装。因此,你需要导入的以下块是:
注意:你需要OpenAI API 密钥。
所有生产级代码都在后端处理(稍后感谢我)。让我们继续。
2. 我们的用例
假设我们有一个想要评估的情感分类模型。该模型接受客户评论并预测:正面、负面或中性。
这里是模型分类的样本数据:
对于每个预测,我们想知道:
–这个输出是否正确?
–我们对这个判断有多自信?
–为什么它是正确的或错误的?
– 我们如何评分质量?
这就是 LLM 作为评委的作用所在。注意,真实值实际上并不在我们的现实世界数据集中;这就是我们最初使用 LLM 的原因。🙃
你在这里看到它的唯一原因是为了显示我们的原始模型表现不佳的分类(索引 2 和索引 3)
注意,在这种情况下,我们假装有一个更弱的模型在运行,存在一些错误。在现实案例场景中,这发生在你使用小模型或调整非微调的深度学习模型时。
3. 角色定义
就像任何提示工程一样,我们需要明确定义:
1. 谁是评委? LLM 将扮演评委的角色,因此我们需要定义他们的专业知识和背景
2. 他们在评估什么? 我们希望 LLM 评估的具体任务。
3. 他们应该使用什么标准? LLM 为了确定输出是好的还是坏的必须做的事情。
我们是这样定义的:
一些食谱说明:使用清晰的指示。提供你希望 LLM 执行的操作(而不是你希望它不执行的操作)。在评估程序中非常具体。
4. ReAct 范式
ReAct 模式(推理+行动)内置在我们的框架中。每个判断包括:
1. 得分(0-100): 定量质量评估
2. 判决: 二进制或分类判断
3. 信心: 评委有多确定
- 推理: 思路链解释
5. 备注: 额外的观察
这使得:
– 透明度: 你可以看到评委做出每个决定的原因
– 调试: 识别错误中的模式
– 人工介入: 将低信心判断路由给人类
– 质量控制: 跟踪评委的表现随时间的变化
5. 少样本示例
现在,让我们提供更多示例,以确保 LLM 对如何评估现实世界案例有一些背景知识:
我们将把这些例子与提示一起放在一起,这样 LLM 就能根据我们给出的例子学习如何执行任务。
一些食谱说明:覆盖不同场景:正确、错误和部分正确。显示评分校准(完美为 100,明显错误为 20-30,有争议的情况为 60)。详细解释推理。引用输入中的特定单词/短语。
6. LLM 评委定义
整个过程封装在以下代码块中:
就这样。10 行代码。让我们使用这个:
7. 让我们运行!
这是运行整个 LLM 评委 API 调用的方法:
因此,我们可以立即看出 LLM 评委正确地判断了“模型”的表现。特别是,它识别出最后两个模型输出是错误的,这正是我们预期的。
虽然这很好,可以显示一切都在正常工作,但在生产环境中,我们不能只是“打印”控制台中的输出:我们需要存储它并确保格式标准化。我们就是这样做的:
看起来就是这样。
注意我们也在“批量处理”,这意味着我们一次发送多个输入。这节省了成本和时间。
8. 奖励
现在,这里是关键点。假设你有一个完全不同的任务要评估。假设你想评估你模型的聊天机器人响应。整个代码可以通过几行进行重构:
由于两个不同的“评判者”仅基于我们提供给 LLM 的提示进行更改,因此两次不同评估之间的修改非常直接。
结论
LLM-as-a-Judge 是一个简单但具有很多实用性的想法。当你的模型粗糙、任务复杂且没有标记数据集时,一个 LLM 可以帮助你评估输出、理解错误并更快地迭代。
下面是我们构建的内容:
-
明确的角色和人格用于评判者
-
少量示例来指导其行为
-
思维链推理以提高透明度
-
批量评估以节省时间和成本
-
使用 Pydantic 进行结构化输出以用于生产
结果是一个灵活的评估引擎,可以在仅进行少量更改的情况下跨任务重用。它不是人类评估的替代品,但在收集必要数据之前,它提供了一个强大的起点。
在你出发之前
再次感谢你宝贵的时间。这对我们意义重大❤️
我叫 Piero Paialunga,就是这里这个人:

由作者制作的照片
我原本来自意大利,拥有辛辛那提大学的博士学位,并在纽约市的The Trade Desk担任数据科学家。我在 TDS 和 LinkedIn 上撰写关于人工智能、机器学习以及数据科学家角色演变的文章。如果你喜欢这篇文章并想了解更多关于机器学习的内容,你可以:
A. 关注我的LinkedInLinkedIn,我在那里发布所有故事
B. 关注我的GitHubGitHub,在那里你可以看到我所有的代码
C. 对于问题,你可以通过以下邮箱联系我:piero.paialunga@hotmail

浙公网安备 33010602011771号