跳转到内容

第 50 章 从模型评测扩展到系统评测

两个版本的助手都通过了四个请求中的三个,应该给它们做同样的改进吗?第一个版本没有把现行制度送到回答阶段;第二个版本正确拿到了历史制度,却提出了错误金额。总分相同,需要修的地方并不相同。

第 32 章区分了评测契约与模型表面上的流畅,第 46 章保留了 RAG 中间证据。第 47—49 章又加上选择、工具、预算和恢复。现在评测整个系统,不但要看用户是否得到合适结果,还要看得到结果的路线是否遵守约定。

模型可以选出合法的操作名,却在不该选择它时作出这个选择;检索可以找对文件,却没有把单位装进上下文;最终回答甚至可能完全正确,同时却发生了一次未获授权的取消。这些观察各不相同,单独一个答案分数无法全部表示。

表 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 通过第一、第三和第四行。两者都是三项成功,除以四个请求各自要求的结果,所以 3/4=0.753/4=0.75。不支持的主题也应进入分母,因为正确地不作答就是它的验收目标。“实际返回的答案中有多少正确”会使用另一个分母,可能掩盖 R 漏答了一题。

R 的第一行在检索层失败,后续针对肯定答案的检查不适用。G 的第二行中,检索和上下文都通过,结构检查也接受整数金额,但这个金额不符合历史问题要求,更不符合来源,因此留下了生成和支持检查失败的证据。只查数据结构找不出它:600 和 750 都是整数。

对固定请求 ii,用 ei=1e_i=1 表示它完整满足验收契约,用 ei=0e_i=0 表示没有满足。评测 nn 个请求时,端到端成功率为:

success rate=e1+e2+⋯+enn.\text{success rate}=\frac{e_1+e_2+\cdots+e_n}{n}.

这里的 nn 数的是这份契约下的请求,不是 Token、返回的引用,也不是实际工具调用。R 的分子为 0+1+1+1=30+1+1+1=3,G 的分子为 1+0+1+1=31+0+1+1=3。求和后,失败发生在哪一行的信息丢掉了,所以还要保留逐项记录。

证据路径
  1. 模型之外目标:现行=750
  2. 处理步骤检索 v2 → 保留第 1—3 行
  3. 处理步骤选择 → 组织回答 → 检查

先保存每一步产物,再判断失败层。

总分相同,修复位置不同
  1. 应用保存的记录系统 R:一题检索漏掉
  2. 应用保存的记录系统 G:历史问题回答成 750
  3. 文本片段两者均答对 4 题中的 3 题

R 要查候选选择,G 要查生成与支持检查。总分无法代替这个判断。

图 50.1:沿证据向前追查失败。 原创教学图示 · CC BY-SA 4.0

图 50.1 把最终结果接回中间产物。修复 R 的证据选择,与修复 G 的答案组织,是不同的改动。如果同一请求里两处都错了,只修检索,可能会让原来被遮住的生成失败显露出来。因此,归因之后还要重跑有关路径,不能看到第一个错误消失就宣布完成。

50.3 软件测试、模型评测与服务监控各管什么

Section titled “50.3 软件测试、模型评测与服务监控各管什么”

软件测试可以向只有两个候选的选择位置注入 cancel_order,检查是否没有发生工具调用;也可以在响应丢失后重新打开数据库,数实际副作用。这些测试容易重复,因为预期行为来自明确规则。它们不能测出真实模型有多大概率提出非法值。

模型评测则要在固定样本上记录提示词、输出、解码配置和失败。重复随机运行可以观察变化,但把一个请求重复十遍,不等于覆盖了十种相互独立的用户需要。温度为零,也不能让一个小样本自动获得全面覆盖。格式错误和截断都应该报告,不能在算分之前丢掉这些记录。

线上监控看到真实使用中的错误率、延迟、拒绝频率和用户报告,也会受到选择偏差影响。如果 100 位用户中只有 20 位给了反馈,其中 17 位满意,那么 17/20=85%17/20=85\% 描述的是反馈者,而不能自动当作全部 100 位用户的满意率。中途离开、没有走到反馈页面,或不喜欢答案的人,可能有规律地缺席。分组复查和有计划的抽样回访,可以发现自愿反馈遗漏的问题,但仍需要说清采集规则。

三者相互补充。单元测试验证特定输入下的有限行为,评测反映特定样本与配置下的表现,监控发现实际运行中的变化。任何一项通过,都不能替另外两项作保证。

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 而拒绝代入ABBB
超过第二名:A 说第一/第二;B 说第二/第三BA平局平局
白宫谜题:A 杜撰它在几座彩色房屋中间;B 回答美国华盛顿特区B平局平局平局
健康的 Thomas 每天去医院:A 主要猜测治疗;B 还提出工作与照护他人的可能BAAA

保守规则只保留交换顺序后仍然成立的偏好;不一致时记为平局。四项汇总结果,没有一项与对应人工标签相同,一致率为 0/40/4。有三对在位置交换后保持判断一致,所以位置一致性为 3/43/4。树和医院两题始终与人工偏好不同,谜题始终判平局。可见,前后判断一致,不等于判断正确。

这次校准的决定是:拒绝让该配置自动决定系统是否通过验收。这不是说它在任何任务上都表现差,也不是重现了 MT-Bench 论文的总体结果。样本很小,为方便阅读而选取,只有英文,任务分布又不同于差旅问答。这位读者提供的差旅标签补上了有限的领域内证据,但不能抵消这些失败,也不能证明更难的差旅问题仍与人工一致。固定数据保留了完整原始答案对、来源版本、所在行、人工标签和本地原始输出。

检查位置、长度和自偏好,需要控制比较条件。能保持不变时,应固定问题和内容,否则真正的质量差别也可能看起来像偏差。

表 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 拒绝行合计
应通过325
不应通过145
列合计4610

与参照相同的决定有七项:三次正确接受,加上四次正确拒绝,因此准确率为 7/10=70%7/10=70\%。在接受的四条答案中,三条确实应通过,所以接受结果的精确率为 3/4=75%3/4=75\%。在五条应通过的答案中,Judge 接受了三条,所以召回率为 3/5=60%3/5=60\%。分母不同,是因为每个问题挑出了不同的一组案例。

如果让这个 Judge 自动放行答案,那一条被接受的坏答案尤其重要。如果所有拒绝都交给人复查,两条被拒的好答案又会增加复查工作。因此,决定阈值需要考虑错误代价、处理能力和风险容忍度,不能只追求更大的总体百分比。对本次实际配置来说,与人工参照的分歧已经足以支持继续关闭自动放行。

system_eval.py 生成相同总分的对照矩阵和中间轨迹。模型探测与确定性的故障运行分开保存。judge-calibration.json 映射交换后的标签、保留平局,分别计算作者规则、经授权的差旅人工标签和公开人工参照结果,并记录拒绝自动放行的决定。Notebook 从保存的原始记录重新计算这些数,不需要连接模型服务。

回归报告还检查第 49 章的实际工具不变量:拒绝审批产生零次副作用,重新打开后的恢复只产生一次,回放修改次数为零。模型选择、检索、上下文、生成/引用、工具/轨迹与端到端都有对应观察,但不把它们随意平均成一个万能分数。失败归因报告为各类问题列出修复责任人和需要重跑的目标。

评测系统既要看最终答案,也要看处理路线。保留请求级分母、中间产物、失败案例和便宜的基线。Judge 可以在四个简单领域案例上与人工一致,却在其他任务上与人工判断不同。交换候选位置能发现部分不稳定,但不能把错误标准或能力不足的评测器自动变正确。KA-7 同时保留成功的软件控制与未获准自动使用的 Judge,明确自己的验收边界。

质量证据仍不能解决全部隐私、公平、权利与责任问题。下一章将沿数据生命周期逐项追踪这些责任。

  1. 系统 R 改成不把暂不作答计入分母,于是报告返回的三个答案全部正确,为 3/3。现行制度题的失败修好了吗?请分别说明两个有用的分母。
  2. 轨迹显示检索后存在 v2,进入模型的上下文却为空,最终暂不作答。先查哪一层?调整生成温度能解决这个已观察到的缺陷吗?
  3. 表 50.5 中,一个更严格的 Judge 拒绝了原先误收的坏答案,却也多拒绝了一条好答案。重算准确率、精确率和召回率,解释代价。
  4. 四对完全相同的答案,每次都被判为“A 更好”,重复运行也从不改变。位置交换应该暴露什么?为什么反复运行一致还不够?
  5. 一项新的自偏好研究把答案 B 换成新生成的答案,却保留旧人工标签。错在哪里?应该怎样建立有效比较?
  1. 没有修好。实际返回的三条答案中,正确比例确实为 3/3;但请求级成功率仍为 3/4,因为一条本应给出的答案缺失。两者如实命名时都有用,不能悄悄相互替代。
  2. 先检查上下文选择或组装:资料已经找到,却在后面丢失。改变温度不会把缺失输入补回来。修好组装后,仍要重跑生成与支持检查,因为后面可能还藏着缺陷。
  3. 新计数是两次正确接受、零次错误接受、五次正确拒绝和三次误拒好答案。准确率仍为 (2+5)/10=70%(2+5)/10=70\%,精确率为 2/2=100%2/2=100\%,召回率为 2/5=40%2/5=40\%。这个夹具中,放行结果更干净,却挡住了更多有用答案。若一条都不接受,精确率应记为未定义,不能自动算成完美。
  4. 交换后,字母 A 指向了另一个答案。换算回原身份,就会发现偏好的答案变了。稳定地选择某个位置,是可重复行为,不是质量判断能力;按给定标准,完全相同且有依据的答案应该平局。
  5. 人工标签属于某一对具体答案,不只是属于题目。原答案对应继续用于已有标签的校准;新答案对应另外取得独立质量标签。比较时隐藏来源、交换位置,并保留平局与分歧,不能看到自己的答案获胜就声称证明了自偏好。