构建最小可行评估
问五位工程师哪个 Claude 模型最适合处理某项任务,您会得到五种不同的意见。而评估(eval)给您的是一个数字,而且一个有用的评估可以从小规模开始。本课为 Meridian(一家虚构的工程咨询公司)构建一个小型评估。
本视频中的演示录制于 2026 年 8 月。它运行在 Claude Haiku 4.5、Claude Sonnet 5 和 Claude Opus 5 上。在更新的模型上结果会有所不同。每节课的演示都是一次独立的评估运行,因此其分数和成本不会与其他课程中的相匹配。
评估是模型要参加的测试。 它有三个部分:真实的输入、每个输入的期望答案,以及对每个模型返回结果进行评分的方法。每个模型都在每个输入上运行您的提示。一个输入连同其期望答案构成一个案例(case),而对每个案例评分则得到一个分数。
Meridian 的提取提示从每份月度项目报告中提取三个字段:项目 ID 和进度状态(两者都是简短的值),以及最大风险(一个句子)。
构建评估就像进行一场考试,您是老师,而模型是学生。
| 考试 | 评估 |
|---|---|
| 老师在任何人参加考试之前就写好了试题和答案标准。 | 您在任何模型运行之前写下期望答案。 |
| 评分机按照答案标准给选择题部分打分。 | 代码将某字段与其期望答案进行比较。 |
| 论述题交给助教,按照评分指南打分。 | 一个句子交给 LLM 评判者,按照评分标准打分。 |
| 老师在信任助教处理其余部分之前会先批改几份论述题。 | 您对一个样本进行人工评分。 |
LLM 评判者是第二个检查答案并判断其是否正确的模型。任何对答案进行评分的事物都称为评分者(grader),无论它是代码、模型还是人。您将分六步构建 Meridian 的评估:
- 为每个字段选择评分者
- 设计案例集
- 写下期望答案
- 为最大风险字段设置 LLM 评判者
- 运行模型并对其答案评分
- 在信任评判者之前先对样本进行人工评分
为每个字段选择评分者
给答案评分有三种方式。规则是选择最快且同时可靠、可扩展的方法(在新标签页中打开)。
- 基于代码的评分。 您的代码检查某个答案是否与期望答案完全匹配,或是否包含某个关键短语。这是最快、最可靠的方式,并且能扩展到任意数量的案例。
- LLM 评判者。 当两个不同的句子都可能是正确的时候,评判者适合这种情形。它同样快速、灵活且可扩展。
- 人工评分。 人工阅读每个答案,这能提供最好的质量,但速度慢、成本高,因此排在最后。对于专业化、高风险的工作,以及取决于判断力的答案,人仍然是合适的评分者。
对每一个能够精确检查的字段使用代码,只把剩下的交给评判者。 以下是这三个字段在 Meridian 某个案例(报告 r032)上的具体做法。
| 字段 | r032 中的期望答案 | 评分者及原因 |
|---|---|---|
project_id | MER-2524 | 代码,精确匹配,因为 ID 要么对要么错 |
schedule_status | delayed | 代码,精确匹配,因为该字段只能是 on_track、at_risk 或 delayed |
top_risk | 燃气公司负责的管道迁移工程比其承诺的进度落后了四周。 | 评判者,因为同一风险可以用很多种方式表达 |
不过,当一份报告未指出任何风险时,期望的 top_risk 答案就是 null,即 JSON 的空值。代码可以用精确匹配来检查这一点。
设计案例集
四条规则塑造了整个案例集。它们建立在文档中的评估设计原则(在新标签页中打开)之上。
- 让案例具有任务针对性。 用您自己的真实报告来构建案例,因为样例数据只能展示模型在样例上的表现。
- 自动化评分。 您会一遍又一遍地运行这个案例集,所以日常评分必须能在没有人的情况下进行。
- 重量不重精。 在相同的工作量下,许多自动评分的案例比少数精心手工评分的案例能告诉您更多信息。
- 对边缘案例进行分层。 边缘案例是生产环境仍会发送的不常见输入,例如一份扫描版报告。按照每种边缘案例在生产中所占的比例,给每种类型大致相应比例的案例,比如如果扫描报告占到达报告的 5%,就让它们在案例集中也占大约 5%。
最重要的是,案例组合应该看起来像生产环境发给您的东西。 团队往往把"大量"理解为数百个案例,但一套 20 到 50 个简单案例的集合就是很好的起点(在新标签页中打开)。
Meridian 确定了 50 个案例。其中 30 个是典型报告,10 个涉及多个项目,10 个是缺失风险案例,也就是没有风险部分的报告。这两种不常见的类型在 Meridian 收到的报告中出现得足够频繁,因此它希望都有所覆盖。
写下期望答案
由人写下期望答案的案例集称为带标签集(labeled set)。在任何模型运行之前,自己从报告中写下每个期望答案。 代码评分者会将模型的答案与这些答案进行比较。
Meridian 将其带标签集保存在一个文件 golden.json 中,每个案例对应一条记录。一条记录包含该案例的 id、其 category,以及每个字段的期望答案。category 的值是 typical、multi_project 或 missing_risk。
为最大风险字段设置 LLM 评判者
top_risk 字段存放一个句子。代码无法判断两个不同的句子是否指的是同一个风险,因此这个字段要交给评判者。这就是那道论述题,就像那位助教一样,评判者也需要一份评分指南。
这份指南就是评分标准(rubric),一套书面规则,规定什么算正确、什么算不正确。它应当详细且清晰(在新标签页中打开)。
评判者的提示中包含报告、答案和评分标准。每一项都放在自己的 XML 标签中(在新标签页中打开),这样评判者就不太可能把它们混淆。您的期望答案不在提示中,因为评判者要根据报告本身来判断。这样,答案不会仅仅因为风险的措辞与您的不同就失分。不过您仍要保留您的期望答案,因为在您手动给样本评分时,那就是您对正确答案的记录。
评判者对某个答案的判定称为其裁定(verdict)。只有当裁定以您的代码能够统计的形式返回时,它才有用。 结构化输出(在新标签页中打开)正好提供了这一点。您随请求一起发送一个 JSON schema,响应必须与其匹配。JSON schema 描述了 JSON 可以包含哪些字段,以及每个字段可以填入什么内容。
Meridian 的 schema 有两个字段,explanation 和 verdict。裁定必须是 correct、incorrect 或 unknown。explanation 是对评判者为何做出该判断的简短说明,所以当您想了解某个答案哪里出了问题时,读的就是这个字段。
最重要的值是 unknown。它给评判者提供了一条退路(在新标签页中打开),一个说"我无法判断"的选项。如果没有这个选项,每当评判者拿不准时,就不得不在另外两个选项之间做猜测。
运行模型并对其答案评分
在评分开始之前,您需要先有答案。用您要测试的每个模型,对每个案例运行提示,并将每个答案保存到文件中。Meridian 用 Claude Haiku 4.5、Claude Sonnet 5 和 Claude Opus 5,在全部 50 个案例上运行了其提取提示。
先在代码也能评分的案例上测试一次评判者,看这两个评分者是否一致。 Meridian 的第一次评判者运行只取了 10 个缺失风险案例,三个模型合计产生了 30 个答案。它们的期望答案是 null,所以代码也能对它们评分。把每个裁定和对应答案保存在一起,以便您之后手动核查评判者。
| 模型 | 正确 | 不正确 | 未知 | 与代码评分者一致 |
|---|---|---|---|---|
| Haiku 4.5 | 5 | 5 | 0 | 10/10 |
| Sonnet 5 | 10 | 0 | 0 | 10/10 |
| Opus 5 | 10 | 0 | 0 | 10/10 |
评判者的第一次运行,针对代码也能评分的 10 个缺失风险案例。
对于没有风险部分的报告,Meridian 现在为每个模型都有了一个数字,而以前只有各种看法。
Haiku 4.5 的五个不正确答案都是同一种错误,案例 r045 就展示了一个例子。
| 在案例 r045 中 | 文本 |
|---|---|
| 报告关于县许可证续期的说法 | "团队预计续期不会出现任何问题。" |
| Haiku 4.5 的答案 | "县许可证续期窗口将在下季度开启,如果未能及时完成,可能会影响项目的连续性。" |
| 评判者的解释 | "该答案把这条明确表示安心的常规说明转换成了最大风险,而评分标准规定这是不正确的。正确答案本应是 null。" |
评判者的解释指出了该答案所犯错误的类型。该错误来自提取提示,因为提取提示从未说明当报告未指出风险时该怎么做。
在信任评判者之前先对样本进行人工评分
评判者在全部 30 个答案上都与代码一致,但这些答案本来代码也能检查。评判者真正的工作是评判自由文本,而代码对此无能为力。在把这项工作交给它之前,先测试它是否可靠(在新标签页中打开)。 有两种做法会有所帮助。
- 亲自给样本评分。 手动对一批已保存的答案进行评分,并将您的评分与评判者的裁定进行比较,因为评判者的判断应当与人类专家高度一致(在新标签页中打开)。在您和评判者意见不一致的地方,把评分标准写得更清楚,然后再次运行。
- 使用没有写出这些答案的评判者。 通常最好用与生成输出不同的模型来评分(在新标签页中打开)。
要点总结
- 在精确检查能够奏效时用代码评分,在两个不同句子都可能正确时用评判者评分,在取决于判断力时用人来评分。
- 在任何模型运行之前先写下期望答案,并构建一套看起来像生产环境的案例集。
- 给评判者一份评分标准、一个其裁定必须匹配的 schema,以及说
unknown的选项。 - 在信任评判者之前,先对其工作的一个样本进行人工评分。