
很多团队把评测集当成一次性建设上线前整理几百道题之后每次换模型、改提示词都重跑只要分数没有下降就认为系统稳定。几个月后评测仍是九十分线上投诉却越来越多。原因不一定是评测程序算错了而可能是它一直在准确测量一个已经不存在的世界。用户开始用新的业务术语知识库增加了新产品移动端带来更短、更口语化的输入攻击者换了提示注入手法客服流程又增加了转人工规则。与此同时研发反复查看固定失败题并针对性优化旧题从挑战变成熟题。评测分数保持不变覆盖的真实流量和风险却持续缩小。这就是评测资产的漂移与老化。解决办法不是每月随机增加几十道题也不是发现分数太高就故意把题目写得更怪。需要把评测集视为有版本、有适用范围、有健康指标的数据产品持续比较线上与基准分布识别漂移发生在哪一层按来源和风险补充样本冻结不可变版本并用桥接样本解释新旧分数差异。本文以企业知识助手为例给出一套从监控、诊断、更新到发布的完整方案。示例环境为 Python 3.11仅使用标准库方便在任何 CI 中运行。文章中的阈值用于演示计算方法实际门槛必须依据自己的历史数据、抽样误差和业务成本校准。1. 什么叫评测集“过期”过期并不等于所有答案都错了。一份题库可能事实仍正确但用户分布已经变化也可能用户没变业务规则更新后参考答案失效还可能样本和答案都有效却因为团队对固定题目过度优化而失去区分度。判断过期应看它是否还能代表当前系统的目标、输入、环境和风险。评测集有一个隐含有效期由四个变化速度共同决定业务政策更新速度、用户输入变化速度、系统能力迭代速度和威胁变化速度。年度政策问答可能按季度审查互联网搜索助手的时效题可能按天更新支付权限规则一旦变化就应立即失效。统一规定“每半年更新一次”看似规范实际会让高变化领域长期暴露也让稳定领域无意义翻新。更可靠的做法是事件触发加定期审查。事件包括知识源大版本、工具接口变化、模型或提示重大升级、新用户群上线、线上事故、监管规则变化和异常漂移告警。定期审查负责发现没有明显事件但逐渐积累的变化。2. 五类漂移必须分开诊断输入数据漂移是用户表达和属性分布变化例如长问题变短、英文比例上升、图片输入增多、某类产品咨询变多。输入变化不一定导致性能下降但旧题库可能不再代表流量。概念漂移是同样输入对应的正确行为发生变化。例如新制度规定差旅标准按预订日期而非入住日期判断旧参考答案便失效。它通常无法只看输入统计发现必须监控规则、标签和结果关系。难度漂移是问题的求解复杂度变化。用户学会提出多约束问题知识库文档更长答案需要跨文档比较或者模型迭代让旧题全部变得简单基准失去区分度。难度不是字数更多取决于所需证据、工具步骤、歧义和干扰因素。覆盖漂移是业务能力树变化后评测权重仍停留在旧功能。例如产品上线图表问答基准仍全是纯文本检索。此时各题本身都有效但总分已经不能代表产品。评审漂移是评分标准、人工判断或裁判模型发生变化。同一回答在不同时间得到不同分原因可能是 rubric 改了也可能是评审模型版本替换。若不把裁判版本纳入记录团队会把评分器变化误认成系统进步。线上与评测差异输入数据漂移概念与规则漂移难度漂移能力覆盖漂移评审与裁判漂移重采样输入与权重更新证据和参考答案增加组合与边界样本修订能力树重校准Rubric与裁判把所有变化统称为 data drift 会产生错误修复。输入比例变化可能只需重加权概念变化必须修改答案难度老化需要新题裁判漂移则应冻结或重新校准评分器。先分类才能知道该改数据、系统还是度量。3. 评测基准与线上观测必须使用同一特征语言比较分布前需要为两侧提取相同的、隐私安全的特征。知识助手可以记录意图类别、语言、渠道、输入长度桶、是否包含附件、所需知识域、检索命中数、工具步数、是否追问、是否转人工和最终反馈。不要只比较原始文本向量因为向量距离很难解释也可能隐藏具体业务类别的消失。特征字典要有版本和明确计算方式。例如“长问题”是字符数超过某阈值还是 Token 数超过某阈值“检索失败”是无召回还是有召回但证据不足。线上与离线必须复用同一实现否则监控到的差异来自特征代码而非用户变化。隐私限制同样重要。漂移监控不需要永久保存完整问题。可以在受控流水线提取类别、长度、哈希和脱敏摘要再删除或按政策保留原文。小流量类别要做最小计数保护避免仪表盘间接暴露某个用户的敏感意图。4. 从分层快照开始而不是先上复杂算法最实用的第一步是建立两个时间窗口基准构建时的参考窗口和近期线上窗口。按能力、渠道、用户角色和风险等级统计比例观察评测集与线上之间的绝对差值。若线上 30% 是多轮追问而基准只有 2%即使复杂统计检验尚未运行覆盖问题也已经明显。分层是为了避免总体指标掩盖局部变化。企业整体中文比例稳定不代表海外租户没有快速增长平均输入长度稳定可能是移动端变短与桌面端变长互相抵消。至少按产品入口、租户类型和高风险能力查看但切分过细会产生大量噪声因此只保留有业务含义且样本量足够的维度。快照应保存计数、比例、缺失率和采样范围。只保存百分比会失去置信信息1/2 与 5000/10000 都是 50%证据强度完全不同。样本不足时报告“不确定”不要为了仪表盘完整强行输出红绿灯。5. 用 Jensen-Shannon 散度监控类别分布类别型特征可以用总变差距离、卡方检验或 Jensen-Shannon 散度。Jensen-Shannon 对称、有界并能处理分布对比适合做稳定仪表盘。它只告诉我们分布不同不告诉变化是否损害模型因此必须与分层质量指标结合。下面代码计算平滑后的 Jensen-Shannon 散度并保留一个最小自检。输入使用类别计数函数自动对齐缺失类别。平滑避免某一窗口没有出现某类别时对数计算出错。from__future__importannotationsfrommathimportlog2fromtypingimportMappingdefdistribution(counts:Mapping[str,int],keys:list[str],alpha:float)-list[float]:ifany(value0forvalueincounts.values()):raiseValueError(counts must be non-negative)totalsum(counts.get(key,0)alphaforkeyinkeys)iftotal0:raiseValueError(empty distributions require positive smoothing)return[(counts.get(key,0)alpha)/totalforkeyinkeys]defkl_divergence(left:list[float],right:list[float])-float:returnsum(p*log2(p/q)forp,qinzip(left,right)ifp0)defjs_divergence(reference:Mapping[str,int],current:Mapping[str,int],alpha:float0.5,)-float:keyssorted(set(reference)|set(current))ifnotkeys:return0.0leftdistribution(reference,keys,alpha)rightdistribution(current,keys,alpha)middle[(pq)/2forp,qinzip(left,right)]return(kl_divergence(left,middle)kl_divergence(right,middle))/2defdemo()-None:stablejs_divergence({qa:70,tool:30},{qa:700,tool:300})shiftedjs_divergence({qa:70,tool:30},{qa:30,tool:70})assertstableshiftedassert0.0shifted1.0if__name____main__:demo()不要把0.1或任何固定值当作行业通用告警线。先用过去多个稳定窗口计算正常波动范围再结合样本量和业务影响设阈值。低频高风险意图即使总体散度很小也可能需要立即补题所以还要设置类别级绝对变化和“新类别出现”告警。6. 连续特征与嵌入漂移怎么处理输入长度、检索分数、响应时延等连续特征可以比较分位数、Kolmogorov-Smirnov 统计量、Wasserstein 距离或分桶后的 PSI。选择方法时要考虑可解释性和样本量。对于业务人员P50、P90 和超阈值比例往往比单一距离更容易行动。文本嵌入可以捕捉未预先定义的新表达但风险也更大。更换嵌入模型会让所有距离失去可比性均值向量可能掩盖多峰分布向量变化也可能来自无害措辞。实践中可以固定嵌入模型版本先聚类得到可解释主题再监控主题比例和离群簇同时由人工检查新增簇样本。Maximum Mean Discrepancy 等方法能比较高维分布适合研究或成熟平台但它仍不能回答业务语义。无论算法多复杂告警之后必须能落到一组代表样本、受影响能力和可能根因否则只会产生没人处理的漂移分数。7. 漂移是否有害要看条件性能输入分布变化不等于模型退化。用户从长句改成短句系统可能仍然表现良好。真正关心的是各分层上的成功率、拒答准确率、工具成功率、证据正确率和人工升级率是否变化。应把“分布变了”和“质量变差”作为两个信号再用影响矩阵排序。高漂移但质量稳定的类别可以先重采样和观察低漂移但质量骤降可能是代码或依赖回归高漂移且质量下降需要优先补充评测并调查系统低漂移且质量稳定则保持。对于还没有可靠线上标签的场景使用人工抽样、延迟反馈或弱标签但要在报告中标注证据等级。总体分数可能出现辛普森悖论。某个版本在每个能力内都略有提升但由于流量转向更难能力总体成功率下降反过来也可能总体上升而高风险能力下降。报告同时展示固定权重基准分、按当前线上权重重算分和每个关键分层的结果才能区分系统变化与流量变化。8. 难度漂移怎样量化难度至少有三种来源。内在难度包括所需推理步骤、证据数量、歧义和干扰项经验难度来自一组模型或人工的实际通过率区分度表示题目能否区分强弱系统。只用“简单、中等、困难”的生成标签不可靠应结合可计算属性和实测结果校准。对 RAG 题可以记录答案所需文档数、证据跨度、是否有冲突版本、正确证据排名和无关文档比例。对 Agent 题记录工具步数、状态依赖、权限检查、是否需要确认和错误恢复。对开放生成记录 rubric 维度与硬失败条件。这些结构特征比题面字数更接近真实复杂度。旧基准的另一种老化是“饱和”。如果多个候选系统在绝大多数题上都通过题库对新改进失去区分度。不要简单删除所有简单题它们仍保护基本回归。可以保留一组核心回归题再新增能区分当前系统的挑战集并分别报告避免总分被挑战集难度任意操纵。9. 用项目分析检查样本健康经典测量思想可以帮助评测集治理。对每道题统计通过率、不同系统之间的方差、与所属能力总分的相关性、重复运行的不稳定率和人工争议率。长期所有系统都通过的题可能是核心回归也可能价值降低所有系统都失败的题可能真正困难也可能答案错误对强弱系统结果相反的题值得审查。下面代码根据多次系统运行计算每题通过率和区分差。示例将系统按整体能力分成高低两组比较两组在单题上的通过率。它不是严格心理测量模型但足以发现没有区分度或反向区分的异常样本。from__future__importannotationsfromdataclassesimportdataclassfromstatisticsimportmeandataclass(frozenTrue)classItemHealth:item_id:strpass_rate:floatdiscrimination:floatdefitem_health(results:dict[str,dict[str,int]])-list[ItemHealth]:iflen(results)4:raiseValueError(at least four systems are required)item_idssorted({itemforscoresinresults.values()foriteminscores})ifany(set(scores)!set(item_ids)forscoresinresults.values()):raiseValueError(all systems must evaluate the same items)rankingsorted(results,keylambdasystem:mean(results[system].values()),)splitlen(ranking)//2low,highranking[:split],ranking[-split:]health:list[ItemHealth][]foritem_idinitem_ids:values[results[system][item_id]forsysteminranking]high_ratemean(results[system][item_id]forsysteminhigh)low_ratemean(results[system][item_id]forsysteminlow)health.append(ItemHealth(item_id,mean(values),high_rate-low_rate))returnhealthdefdemo()-None:runs{baseline:{a:0,b:0,c:1},old:{a:0,b:1,c:1},current:{a:1,b:1,c:1},candidate:{a:1,b:1,c:1},}report{item.item_id:itemforiteminitem_health(runs)}assertreport[a].discrimination0assertreport[c].pass_rate1if__name____main__:demo()不要根据一次报告自动删除题目。c全部通过可能是必须永远守住的基础安全规则反向区分也可能说明强系统更愿意拒答而旧 rubric 错把激进回答判为正确。健康指标用于生成审核队列最终决策回到业务目标和证据。10. 概念漂移必须从来源变更追踪知识型评测不应靠定期人工逐题翻查才发现答案过期。每条样本保存来源文档 ID、版本、章节和证据片段摘要文档发布新版本时系统找到受影响样本并标为needs_review。若只记录一个网页 URL页面原地更新后既无法判断变化也无法复现旧分数。来源差异不能直接自动改答案。条款文字变化可能只是格式也可能改变规则范围。可以用结构化 diff 和模型摘要帮助审核员定位但需要确定性校验日期、金额、枚举和权限变化。审核通过后创建新的样本版本并决定旧样本是归档、保留为历史政策题还是迁移到新答案。时间型问答尤其要保留“问题发生时间”。用户问旧订单时可能仍应使用旧制度不能因为当前文档更新就把全部历史答案改成新规则。评测上下文应明确业务时间、知识截点和允许来源避免把时效问题误判为幻觉。11. 评审漂移怎样被隔离LLM-as-Judge 让开放回答评测可扩展但裁判模型升级、提示变更和供应商服务变化都会改变分数。每次运行记录裁判模型标识、参数、提示模板摘要、rubric 版本和解析代码版本。若其中任一项变化先在固定锚点集上重跑与人工金标比较再决定是否建立新裁判版本。锚点集应包含明确优秀、明确失败和容易分歧的回答并覆盖不同能力。监控裁判与人工的一致性、重复评分稳定性、位置偏差和长度偏好。两个候选回答比较时交换顺序涉及安全硬规则时先用确定性检查不能让裁判以“整体表达不错”为由原谅数据泄露。裁判更换后不要直接把新分数接到旧趋势线上。选取一批桥接运行旧裁判和新裁判同时评同一批冻结输出估计系统性偏移并在仪表盘标明断点。若两者对关键样本结论不同优先人工仲裁而不是用一个平均换算公式掩盖语义差异。12. 新旧基准如何保持可比评测集更新后直接比较 v1 的 82 分和 v2 的 78 分没有意义因为题目和权重变了。需要维护一个桥接集一部分在两个版本中完全相同且仍有效的锚点题一部分是同一能力的新旧配对题。候选系统同时跑旧版、新版和桥接集报告系统变化与基准变化的贡献。至少展示三种数字固定旧版上的回归结果、固定新版上的当前结果、按当前线上分布重加权的业务结果。旧版不必永久运行达到约定迁移周期后可以归档但历史输出、配置和数据摘要要保留以供审计。不要为了让趋势线平滑而偷偷调整旧分数。基准升级就是一次测量体系变化应像财务口径调整一样公开说明。版本说明列出能力树变化、样本数量变化、来源更新、权重调整、裁判变化及已知限制。13. 评测集的版本模型每个不可变发布包含数据 Schema 版本、内容版本、rubric 版本、裁判配置、能力树版本和来源清单。可以用语义版本表达兼容性修正元数据但不改变分数为补丁新增样本或兼容字段为次版本改变目标、权重或评分含义为主版本。具体规则由团队定义关键是历史运行能精确恢复。数据包生成内容摘要运行记录引用摘要而非“latest”。CI 中的上线门禁只能使用已批准版本latest可以用于探索不能用于发布判定。删除样本时保留原因和替代项不从历史包中物理覆盖。版本也要有状态draft、review、approved、deprecated、archived。草稿可快速迭代approved 才能决定上线deprecated 保留迁移窗口archived 只读。权限上生成者不应单独批准自己的高风险样本至少由领域或安全负责人复核。14. 更新样本时避免追逐短期噪声某一周突然出现一个新说法不一定值得重构题库。使用持续性、规模、质量影响和战略重要性四个维度判断。短期营销活动造成的流量峰值可以建立临时评测切片持续增长的新产品意图则应进入核心能力树。高风险事件即使低频也可能立即加入安全回归集。从线上抽样时避免只收集失败。仅用失败样本更新会把基准变成极难问题集合失去对真实流量的代表只按流量抽样又会淹没稀有风险。合理的基准通常包含代表性集、挑战集和安全门禁集三者分开报告而不是强行揉成一个总分。新样本进入前要通过证据审核、隐私处理、去重和切分检查。来自同一事故的十个改写应作为来源组管理不能分散到开发和隐藏测试。开发者可以看到一个代表例用于修复隐藏集保留不同表达用于验证泛化。15. 告警与处置闭环漂移告警必须带行动建议。输入类别变化但质量稳定负责人可以重加权并观察新类别出现且无评测覆盖创建采样任务质量下降但分布稳定转给系统回归排查来源文档变化自动冻结受影响题的上线门禁资格裁判锚点不稳定暂停用该裁判比较版本。每个告警保存窗口、样本量、特征版本、基准版本和代表样本。处置结果包括无害变化、监控误报、题库缺口、系统缺陷或业务规则变化。长期统计这些原因可以调整监控而不是不断堆阈值。SLA 应按风险分级。高风险权限规则变化可能要求当天完成重审一般语言比例变化可以周度处理。未处理告警到期后仪表盘应明确标记相关评测“不再代表当前分布”而不是继续显示一个绿色总分。16. 常见失败模式第一种是每次漂移就整体重采样。这样历史可比性迅速消失也可能把短期噪声写入核心基准。应保留锚点按受影响能力增量更新并使用桥接运行。第二种是只监控文本向量。向量报警难解释嵌入模型升级还会产生假漂移。先建立业务特征和来源追踪向量用于发现未知簇而非取代语义分类。第三种是分布不变就认为安全。概念漂移可能在完全相同的问题上改变正确答案必须监听政策和工具契约变化。第四种是看到旧题饱和就全部删除。基础回归仍有价值应把核心集与挑战集分开挑战集不断演进核心集保护最低能力。第五种是更新裁判却不重跑锚点。分数变化可能全来自裁判偏好。任何裁判配置变化都应形成版本断点。第六种是把统计显著等同业务重要。大样本下很小差异也可能显著低频安全风险又可能因样本少而不显著。决策必须结合影响成本和风险门槛。17. 安全、隐私与边界线上漂移监控会接触真实用户数据。只采集评测所需字段尽早脱敏限制访问和保留期限对于敏感行业原始文本只在隔离环境短暂处理仪表盘展示聚合特征。抽样进入题库前重新审查不能因为它已经存在日志中就默认可用于测试。攻击者可能主动制造漂移批量提交特定提示改变分布或诱导团队把恶意样本写进基准。采样要按用户和来源限权异常流量单独标记新增安全规则由专家确认。不要让线上输入自动变成隐藏集答案。评测更新不能成为放松上线标准的手段。若新版更难导致分数下降应解释变化并重新设定有业务依据的门槛而不是调权重让数字回到原水平。相反若线上风险增加旧门槛可能必须提高。漂移检测也有能力边界。它能提示分布和关系变化不能证明因果更不能自动决定正确业务行为。最终结论需要代表样本、来源证据、系统 trace 和领域判断共同支持。18. 从零落地的四个阶段第一阶段不必建设复杂平台。给现有题库补能力、来源、风险和版本字段冻结一个不可变基线线上按同一能力标签做周度快照。第二阶段加入类别分布、长度分位数和分层质量指标建立人工复核流程。第三阶段增加来源变更触发、样本健康分析、裁判锚点和桥接集。第四阶段再考虑嵌入簇、MMD、自动采样和更精细的版本路由。输入变而质量稳质量下降规则变化覆盖缺口冻结基准版本线上特征快照漂移与分层质量变化是否有害重加权与观察系统根因排查重审证据与答案新增来源组样本桥接运行批准新版本每个阶段都应能独立产生价值。不要等到“全自动漂移平台”完成才开始治理一个带来源版本的题库和一张分层对比表已经能发现大量问题。自动化只应替代重复计算不能替代对评测目标的判断。19. 验收清单检查评测集是否声明目标用户、业务时间和适用范围每条样本是否有能力、风险、来源与版本线上和离线是否复用同一特征实现漂移指标是否报告样本量是否同时观察分布和条件质量难度是否有结构特征和实测证据裁判是否版本化并用锚点校准新旧基准是否有桥接集历史运行是否引用不可变内容摘要敏感样本是否完成脱敏与权限控制。最后检查负责人和处置时限。没有 owner 的告警只是装饰没有重审期限的needs_review会永远堆积。高风险题一旦来源失效应从上线门禁中隔离而不是继续以旧答案阻止或放行发布。20. 仪表盘应该呈现什么一个可行动的仪表盘不以总分大字报结束。顶部先展示基准版本、适用时间、当前线上覆盖率和未处理高风险告警随后按能力列出线上流量占比、评测样本占比、分布差、线上质量和固定基准结果。任何数字都能下钻到脱敏代表样本、来源版本和最近处置记录。趋势线上明确标出模型、提示、知识库、裁判和基准版本的变更点。没有这些事件分数突变无法解释。低样本类别显示计数和不确定状态不用红绿色制造确定感超过有效期或来源待审的结果加醒目标记防止管理者继续把它当成当前证据。仪表盘之外保留机器可读导出发布流水线根据批准版本和明确门禁做判断。可视化服务不可用时CI 仍应使用冻结数据完成验证反过来仪表盘变绿也不能绕过样本审查和安全硬门槛。小结评测集过期的本质是测量对象、正确概念、难度、覆盖范围或裁判发生了变化而测量工具仍停在原地。治理它需要两条并行证据线上分布告诉我们用户世界怎样变化分层质量与来源变更告诉我们这些变化是否影响正确行为。可靠做法不是不断覆盖一份 CSV而是冻结版本、追踪来源、监控漂移、审核样本健康、维护裁判锚点并通过桥接集解释新旧口径。保留基础回归集单独建设挑战和安全门禁集当基准不再代表当前世界时明确标记失效而不是继续展示漂亮总分。只有这样评测才能长期承担发布决策而不是成为历史成绩单。参考资料NIST AI Risk Management FrameworkNIST AI RMF Generative AI ProfileA Survey on Concept Drift AdaptationA Kernel Two-Sample TestHELM: Holistic Evaluation of Language ModelsDynabench: Rethinking Benchmarking in NLPOpenAI Evals 开源项目RFC 3339网络日期与时间格式