第 50 章 从模型评测扩展到系统评测
两个版本的助手都通过了四个请求中的三个,应该给它们做同样的改进吗?第一个版本没有把现行制度送到回答阶段;第二个版本正确拿到了历史制度,却提出了错误金额。总分相同,需要修的地方并不相同。
第 32 章区分了评测契约与模型表面上的流畅,第 46 章保留了 RAG 中间证据。第 47—49 章又加上选择、工具、预算和恢复。现在评测整个系统,不但要看用户是否得到合适结果,还要看得到结果的路线是否遵守约定。
50.1 固定目标,再定位失败
Section titled “50.1 固定目标,再定位失败”模型可以选出合法的操作名,却在不该选择它时作出这个选择;检索可以找对文件,却没有把单位装进上下文;最终回答甚至可能完全正确,同时却发生了一次未获授权的取消。这些观察各不相同,单独一个答案分数无法全部表示。
表 50.1:每一层需要保留什么证据。
| 层次 | 应保留的输入与观察结果 | 本项目检查什么? |
|---|---|---|
| 模型/受限选择 | 完整选择输入、模型摘要、输出及停止原因 | 最多调用一次;值合法;选择质量另行测量 |
| 检索 | 问题、日期、候选顺序、分数及所选来源 | 找到适用来源,或正确返回空结果 |
| 上下文 | 完整序列化输入与原文范围 | 证据经过组装后,范围和单位仍在 |
| 生成/引用 | 候选答案、解析字段与支持引文 | 分开检查结构、金额、原文范围和来源适用性 |
| 工具/轨迹 | 宿主主体、提案、审批引用、预算和回执 | 操作获准;尝试有限;恢复不重复副作用 |
| 端到端 | 用户所需结果与前面全部安全条件 | 有依据的回答、合适的暂不作答或拒绝,或者核验过的操作结果 |
某一层“没有走到”,不能悄悄算作通过。如果检索根本没有提供资料,也未必适合把后续未回答再算成一个独立生成错误。应保留最早可以观察到的失败,以及后续受到的影响。最早发现的缺陷可以指引修复,但不能证明后面没有其他缺陷。
KA-1 对 Mini GPT 的验收决定保持不变。选做的 Qwen 选择适配器是另一个组件,使用单独记录。原来的九题词汇检索对照也保留:两种语言中,Keyword 都通过 5/9,BoW Count 通过 6/9,TF-IDF 通过 7/9。增加复杂工作流,不是删掉便宜基线或更换不利案例的理由。这九题与下面四题的契约不同,不能共用一个分母。
50.2 相同总分背后,可以是不同的系统
Section titled “50.2 相同总分背后,可以是不同的系统”例 50.1:两套系统都得到 3/4。 固定四个请求及其顺序:现行住宿限额、历史住宿限额、取消审批制度,以及没有资料支持的主题。第一题要求按 2026-09-14 回答 750,第二题要求按 2025-09-14 回答 600。第三题要回答带引用的审批规则,不是实际取消订单;第四题应该暂不作答。这些是教学诊断案例,不是从用户中随机抽取的样本。
系统 R 在检索处故意丢掉现行制度资料库;系统 G 保留正确检索,却故意把历史答案的候选金额改成 750。其他处理相同,最后的支持关口会拦住错误候选,不把它公开返回。两种变体都在同一组有序请求上实际运行。
表 50.2:相同总分背后的每一项结果。
| 请求 | 所需结果 | 系统 R | 系统 G |
|---|---|---|---|
| 现行住宿限额 | 带 v2 引用回答 750 | 失败:无来源,暂不作答 | 通过 |
| 历史住宿限额 | 带 v1 引用回答 600 | 通过 | 失败:提出 750,被关口拦下 |
| 审批制度 | 带引用回答制度 | 通过 | 通过 |
| 不支持的主题 | 暂不作答 | 通过 | 通过 |
R 通过后三行,G 通过第一、第三和第四行。两者都是三项成功,除以四个请求各自要求的结果,所以 。不支持的主题也应进入分母,因为正确地不作答就是它的验收目标。“实际返回的答案中有多少正确”会使用另一个分母,可能掩盖 R 漏答了一题。
R 的第一行在检索层失败,后续针对肯定答案的检查不适用。G 的第二行中,检索和上下文都通过,结构检查也接受整数金额,但这个金额不符合历史问题要求,更不符合来源,因此留下了生成和支持检查失败的证据。只查数据结构找不出它:600 和 750 都是整数。
对固定请求 ,用 表示它完整满足验收契约,用 表示没有满足。评测 个请求时,端到端成功率为:
这里的 数的是这份契约下的请求,不是 Token、返回的引用,也不是实际工具调用。R 的分子为 ,G 的分子为 。求和后,失败发生在哪一行的信息丢掉了,所以还要保留逐项记录。
- 模型之外目标:现行=750
- 处理步骤检索 v2 → 保留第 1—3 行
- 处理步骤选择 → 组织回答 → 检查
先保存每一步产物,再判断失败层。
- 应用保存的记录系统 R:一题检索漏掉
- 应用保存的记录系统 G:历史问题回答成 750
- 文本片段两者均答对 4 题中的 3 题
R 要查候选选择,G 要查生成与支持检查。总分无法代替这个判断。
图 50.1 把最终结果接回中间产物。修复 R 的证据选择,与修复 G 的答案组织,是不同的改动。如果同一请求里两处都错了,只修检索,可能会让原来被遮住的生成失败显露出来。因此,归因之后还要重跑有关路径,不能看到第一个错误消失就宣布完成。
50.3 软件测试、模型评测与服务监控各管什么
Section titled “50.3 软件测试、模型评测与服务监控各管什么”软件测试可以向只有两个候选的选择位置注入 cancel_order,检查是否没有发生工具调用;也可以在响应丢失后重新打开数据库,数实际副作用。这些测试容易重复,因为预期行为来自明确规则。它们不能测出真实模型有多大概率提出非法值。
模型评测则要在固定样本上记录提示词、输出、解码配置和失败。重复随机运行可以观察变化,但把一个请求重复十遍,不等于覆盖了十种相互独立的用户需要。温度为零,也不能让一个小样本自动获得全面覆盖。格式错误和截断都应该报告,不能在算分之前丢掉这些记录。
线上监控看到真实使用中的错误率、延迟、拒绝频率和用户报告,也会受到选择偏差影响。如果 100 位用户中只有 20 位给了反馈,其中 17 位满意,那么 描述的是反馈者,而不能自动当作全部 100 位用户的满意率。中途离开、没有走到反馈页面,或不喜欢答案的人,可能有规律地缺席。分组复查和有计划的抽样回访,可以发现自愿反馈遗漏的问题,但仍需要说清采集规则。
三者相互补充。单元测试验证特定输入下的有限行为,评测反映特定样本与配置下的表现,监控发现实际运行中的变化。任何一项通过,都不能替另外两项作保证。
50.4 Judge 也需要独立参照
Section titled “50.4 Judge 也需要独立参照”LLM Judge 是用来评价另一条答案的模型。当精确匹配太窄时,这种做法很有吸引力,但裁决仍然是一次模型输出。评分标准、参考证据和解析规则都成为评测器的一部分,也就同样需要评测。
先用作者规定的差旅契约:现行 750,旧版 600,取消尚未获批。四条答案分别是“现行 750”“现行 600”“现行 750,旧版 600”“现行 750,订单已取消”。第一、第三条通过,第二、第四条因包含无依据结论而失败。本地 Qwen Judge 在两种语言下都给出了这四项判断,与作者给定的预期规则一致 8/8。固定这些输出之后,一位真实读者按同一依据规则独立给出了相同的四项标签,并同意匿名用于校准。两种语言下,按含义区分的四个案例均与人工判断一致。这是八次模型判断与四个人工标注案例的比较,不是八份独立人工标注。单独的标签文件记录来源、授权与限制;本次没有取得第二位标注者的判断。
我们还用研究作者公开的 MT-Bench 数据检验迁移表现,其中保留人工标注的第一轮答案对,许可为 CC BY 4.0。抽取规则在本地 Judge 执行之前固定:按原数据顺序,从问题编号 100 开始,选不同题号,只保留第一轮,并限制输入长度,得到四个案例。这是一小组便于阅读的英文样本。每对保留的一票人工偏好,是参照判断,不是全体一致、更不是绝不会错的真理。
例 50.2:一次没有通过的人工校准。 跑步题中,答案 A 说超过第二名之后,自己是第一名,被超过的人是第二名;答案 B 说自己是第二名,被超过的人变成第三名。沿顺序检查:原来的第一名并没有被超过,所以 B 符合这次位置变化。保留的人工标签偏好 B。本地 Judge 在原顺序下却选择 A,交换两个候选的位置后又判为平局。简单差旅题上的表现,没有迁移到这个基本问题上。
表 50.3:四个人工参照案例与实际判断全部列出。 “交换后”已经换算回原来的 A/B 身份。
| 案例与关键差别 | 人工偏好 | 原顺序 | 交换后,映射回原身份 | 保守汇总结果 |
|---|---|---|---|---|
| 想象自己是遭砍伐的树:A 按创作要求采用树的视角;B 因自己是 AI 而拒绝代入 | A | B | B | B |
| 超过第二名:A 说第一/第二;B 说第二/第三 | B | A | 平局 | 平局 |
| 白宫谜题:A 杜撰它在几座彩色房屋中间;B 回答美国华盛顿特区 | B | 平局 | 平局 | 平局 |
| 健康的 Thomas 每天去医院:A 主要猜测治疗;B 还提出工作与照护他人的可能 | B | A | A | A |
保守规则只保留交换顺序后仍然成立的偏好;不一致时记为平局。四项汇总结果,没有一项与对应人工标签相同,一致率为 。有三对在位置交换后保持判断一致,所以位置一致性为 。树和医院两题始终与人工偏好不同,谜题始终判平局。可见,前后判断一致,不等于判断正确。
这次校准的决定是:拒绝让该配置自动决定系统是否通过验收。这不是说它在任何任务上都表现差,也不是重现了 MT-Bench 论文的总体结果。样本很小,为方便阅读而选取,只有英文,任务分布又不同于差旅问答。这位读者提供的差旅标签补上了有限的领域内证据,但不能抵消这些失败,也不能证明更难的差旅问题仍与人工一致。固定数据保留了完整原始答案对、来源版本、所在行、人工标签和本地原始输出。
50.5 高分究竟奖励了什么
Section titled “50.5 高分究竟奖励了什么”检查位置、长度和自偏好,需要控制比较条件。能保持不变时,应固定问题和内容,否则真正的质量差别也可能看起来像偏差。
表 50.4:附加本地探测及其结论边界。
| 改变的条件 | 实际观察 | 能得出什么? |
|---|---|---|
| 交换有依据的 750 与无依据的 600 | 两种顺序都偏好 750 | 这一对差别清楚的答案经受住了位置交换 |
| 把同一条正确句子重复三遍 | 两种顺序都偏好短答案 | 这一对没有偏爱重复;不能据此否认所有长度偏差 |
| 答案完全相同,只交换“本 Judge 模型”与“另一模型”标签 | 两种顺序都选排在前面的答案 | 来源标签与位置混在一起,不能证明自偏好 |
| 让 Qwen 新生成四条答案,各与原来获得人工偏好的答案比较,再交换顺序 | 2/4 对在两种顺序下都偏好自己的答案 | 确实测试了自己生成的文字,但新答案对没有独立人工质量标签 |
最后一项刻意与人工校准分开。旧人工标签评的是原来的两个答案,不能移给新生成的 Qwen 答案。例如,Qwen 新生成的跑步答案正确说了“第二名”,却又说刚超过的人在自己前面。这种一半对、一半错的结果说明,知道来源是谁,或看到一句正确表述,都不能证明两条答案质量相当。2/4 的自身答案偏好是观察结果,不能证明具有因果意义的自偏好。
Zheng 等人的论文讨论了位置、冗长程度和可能的自偏好效应,也明确保留了对后一项归因的不确定性。因此,我们保留位置交换、质量参照与分歧,而不把“用了 LLM Judge”当成已经完整解决评测。
50.6 数清楚那些会影响决定的错误
Section titled “50.6 数清楚那些会影响决定的错误”例 50.3:总分可能掩盖错误放行。 下面另给一份手算案例,不是 Qwen 的实测混淆矩阵。十条答案有独立参照标签:五条应通过,五条不应通过。一个假想 Judge 接受了五条好答案中的三条,也接受了五条坏答案中的一条;它拒绝了另外两条好答案和四条坏答案。
表 50.5:先按参照质量计数,再给指标命名。
| 参照标签 | Judge 接受 | Judge 拒绝 | 行合计 |
|---|---|---|---|
| 应通过 | 3 | 2 | 5 |
| 不应通过 | 1 | 4 | 5 |
| 列合计 | 4 | 6 | 10 |
与参照相同的决定有七项:三次正确接受,加上四次正确拒绝,因此准确率为 。在接受的四条答案中,三条确实应通过,所以接受结果的精确率为 。在五条应通过的答案中,Judge 接受了三条,所以召回率为 。分母不同,是因为每个问题挑出了不同的一组案例。
如果让这个 Judge 自动放行答案,那一条被接受的坏答案尤其重要。如果所有拒绝都交给人复查,两条被拒的好答案又会增加复查工作。因此,决定阈值需要考虑错误代价、处理能力和风险容忍度,不能只追求更大的总体百分比。对本次实际配置来说,与人工参照的分歧已经足以支持继续关闭自动放行。
50.7 KA-7 的实践与回归报告
Section titled “50.7 KA-7 的实践与回归报告”system_eval.py 生成相同总分的对照矩阵和中间轨迹。模型探测与确定性的故障运行分开保存。judge-calibration.json 映射交换后的标签、保留平局,分别计算作者规则、经授权的差旅人工标签和公开人工参照结果,并记录拒绝自动放行的决定。Notebook 从保存的原始记录重新计算这些数,不需要连接模型服务。
回归报告还检查第 49 章的实际工具不变量:拒绝审批产生零次副作用,重新打开后的恢复只产生一次,回放修改次数为零。模型选择、检索、上下文、生成/引用、工具/轨迹与端到端都有对应观察,但不把它们随意平均成一个万能分数。失败归因报告为各类问题列出修复责任人和需要重跑的目标。
50.8 本章小结
Section titled “50.8 本章小结”评测系统既要看最终答案,也要看处理路线。保留请求级分母、中间产物、失败案例和便宜的基线。Judge 可以在四个简单领域案例上与人工一致,却在其他任务上与人工判断不同。交换候选位置能发现部分不稳定,但不能把错误标准或能力不足的评测器自动变正确。KA-7 同时保留成功的软件控制与未获准自动使用的 Judge,明确自己的验收边界。
质量证据仍不能解决全部隐私、公平、权利与责任问题。下一章将沿数据生命周期逐项追踪这些责任。
50.9 习题
Section titled “50.9 习题”- 系统 R 改成不把暂不作答计入分母,于是报告返回的三个答案全部正确,为 3/3。现行制度题的失败修好了吗?请分别说明两个有用的分母。
- 轨迹显示检索后存在 v2,进入模型的上下文却为空,最终暂不作答。先查哪一层?调整生成温度能解决这个已观察到的缺陷吗?
- 表 50.5 中,一个更严格的 Judge 拒绝了原先误收的坏答案,却也多拒绝了一条好答案。重算准确率、精确率和召回率,解释代价。
- 四对完全相同的答案,每次都被判为“A 更好”,重复运行也从不改变。位置交换应该暴露什么?为什么反复运行一致还不够?
- 一项新的自偏好研究把答案 B 换成新生成的答案,却保留旧人工标签。错在哪里?应该怎样建立有效比较?
50.10 参考解答
Section titled “50.10 参考解答”- 没有修好。实际返回的三条答案中,正确比例确实为 3/3;但请求级成功率仍为 3/4,因为一条本应给出的答案缺失。两者如实命名时都有用,不能悄悄相互替代。
- 先检查上下文选择或组装:资料已经找到,却在后面丢失。改变温度不会把缺失输入补回来。修好组装后,仍要重跑生成与支持检查,因为后面可能还藏着缺陷。
- 新计数是两次正确接受、零次错误接受、五次正确拒绝和三次误拒好答案。准确率仍为 ,精确率为 ,召回率为 。这个夹具中,放行结果更干净,却挡住了更多有用答案。若一条都不接受,精确率应记为未定义,不能自动算成完美。
- 交换后,字母 A 指向了另一个答案。换算回原身份,就会发现偏好的答案变了。稳定地选择某个位置,是可重复行为,不是质量判断能力;按给定标准,完全相同且有依据的答案应该平局。
- 人工标签属于某一对具体答案,不只是属于题目。原答案对应继续用于已有标签的校准;新答案对应另外取得独立质量标签。比较时隐藏来源、交换位置,并保留平局与分歧,不能看到自己的答案获胜就声称证明了自偏好。
50.11 参考文献
Section titled “50.11 参考文献”- Liang 等,Holistic Evaluation of Language Models,§§2.1—2.4 与 §4。场景、适配方式和指标的区分,有助于明确评测契约;本书的应用分层矩阵为原创设计。
- Zheng 等,Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena,§§3.3—3.4 与 4.1。介绍偏差探测、位置交换和人工对照,也说明自偏好结论的限制。
- LMSYS MT-Bench 人工判断数据。本书固定抽取四项人工标签案例,按 CC BY 4.0 使用,保留第一轮文字和标签;它不是论文的完整基准。