你更新了一版提示词,或者某个供应商在同一个模型 ID 下悄悄换了新检查点,生产环境里有些东西退化了。上一周的用户投诉和再上一周看起来只是略有不同。像 MMLU 这样的公开基准测试抓不到这种变化——它衡量的是模型在学术科目上的通用能力,而不是模型如何处理你产品的真实流量。
golden 评测集就是用来补上这个缺口的。它是一组经过人工审核的生产输入与预期输出的配对,用 Git 做版本管理,每次部署前跑一遍。它回答的是基准测试回答不了的那个问题:这次改动,对你实际服务的这批流量,是帮忙还是添乱?
![]()
它到底是什么,不是什么
golden 评测集是一批生产环境样本加上经过审核的预期输出,从训练中留出,在每个候选发布版本上评估。每一条预期输出都由具备领域知识的人确认过,或者明确判定该条不需要预期输出——因为格式、安全、语气这类无参考答案的检查本身就是通过标准。
正是这道审核工序让这套集合有用。没有它,当分数出现下滑时,你分不清是这次改动让质量退化了,还是第 23 条样本的标签本身就标错了。
把它当成行为层面的回归测试套件,而不是代码层面的。它在 CI 里跑,有已知正确的预期输出,能捕捉两次部署之间的漂移。和单元测试的区别在于,预期输出是一种判断,所以测试框架要做的远不止字符串比对。
golden 集不是基准测试,不是训练集,也不是 A/B 测试。基准测通用能力,golden 集测你在自己流量上的能力;训练集教模型,golden 集在模型退化时抓住它;A/B 测试衡量线上用户结果,golden 集衡量一次改动是否安全到值得去做 A/B 测试。
为什么生产数据比合成数据更适合打底
合成评测测的是模型回答“某人想象中用户可能会问的问题”的能力。你真正需要测的,是用户实际问过的问题,以及他们用的那种措辞。生产流量更适合打底,有三个原因。
- 分布是对的。如果你的流量里 70% 关于定价,评测集里就该有 70% 关于定价。从想象出来的边缘案例里抽的合成集保不住这个分布。保住观测到的分布,回归分数才能反映用户影响。
- 失败模式是你真正在意的那些。用户会找到你想都想不到的失败模式:一条消息混了三种语言,一张工单直接粘贴了整段错误日志,一个查询引用了你上季度改名的产品功能。合成集不会包含这些,除非有人恰好想到了。
- 样本跟着产品走。一个半年前上线、只处理密码重置的客服机器人,现在会收到多账号问题、退款升级请求,还有竞品界面的截图。从生产里抽的 golden 集会跟着这种漂移走,冻结在上线那天的合成集不会。
合成样本仍有位置,但它是补充而不是地基。用它填补已知失败模式的覆盖缺口——那些你真实样本太少的场景。可以用带结构化输出的模型调用生成,让每条样本落进你的数据集 schema,也可以对现有样本做改写。在元数据里标记为合成,并让它们只占集合的少数。
![]()
五步流程
第一步,抽取一段生产流量样本。从一到两周的输入输出日志开始。如果功能有季节性或者使用量很薄,就拉更长的窗口。
先随机抽样,再看抽出来的是什么。如果你的流量有长尾,随机抽样会过度代表头部。这通常正是你想要的,因为头部的回归影响用户最多,但要检查一下稀有且关键的意图有没有出现。
把以后可能想切分的每个字段都记下来,包括意图、功能区域、用户分群、时间戳,以及产出你抽到的那条响应的模型和提示词版本。这些元数据事后无法重建。
抽样生产流量就是在抽样用户数据。检查你的服务条款,在数据进入评测框架之前跑完 PII 清洗流程,并记录你转换了哪些样本,以便日后复现清洗过程。
目标是带着几百条原始样本进入第二步。你会大幅裁剪。
第二步,去重和聚类。生产流量是重复的。一个客服机器人可能一天看到上百次“怎么重置密码”,措辞略有不同。你要的是其中一条进集合,不是五十条。
精确匹配去重会漏掉改写。要抓住这些,需要检查……
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.