"手感直逼某模型"不能当选型依据:先搭最小自建评测集
一条”某新模型首批实测、手感直逼某模型”的帖子在群里传了一圈,第二天就有人提议把线上服务切过去。这类传播的结构几乎一样:作者自选几道题,没有基线,没有重复次数,把”看起来更好”直接当成结论。它不一定是在造假,问题在于这套信息在结构上就不支撑任何选型决策——它记录的是一个人、一次运行、在他自己那点任务分布上的第一直觉。而选型要回答的是另外三件事:在我们的业务里失败长什么样,一次调用要花多少钱,多久能回第一个包。
公开榜单也不能替代。它测的是别人挑出来的题、按别人的提示模板、在别人的采样参数下、只记对错不记成本。想让自己具备判断能力,只有一条路:搭一份私有评测集。下面按最小可用的规格来讲,一个小团队短期就能立起来的那种。

一、公开分数和手感都到不了你的业务,错位发生在四处
任务分布是第一处。公开题库和自媒体实测偏爱代码与推理题,因为这类题好出、好展示、判定清楚,跑一遍就能给个通过率。企业负载的大头不是这个:结构化抽取、按模板改写、带上下文的检索问答、日志与告警的处置建议、多轮排障对话、把客户口语转成内部术语。这些任务的共同点是判定标准带业务约束,错了不是”语法不通”,而是”漏了这个字段””时间范围取错””把待审核的当成已通过的”。
判定方式是第二处。能自动判定的题撑起榜单的可信度,一旦换成需要人看质量的回答,各家口径就不通用了。同一份答案,用字面相似度打分会惩罚同义改写,用模型打分会奖励冗长和格式化排版。
提示风格是第三处。同一个模型在两套提示模板下的表现差距,往往大于两个模型在同一模板下的差距。别人评测用的是打磨过的模板和少量示例,你线上用的是一段没有示例的指令。拿别人的模板结论套自己的模板,等于换了题目还沿用旧分数。
成本与延迟是第四处,也是榜单里完全没有的一维。跑分只问对不对,选型要同时看每千次调用花费、首包延迟、完整响应延迟、超时率、并发触顶次数、上下文长度上限。一个在难题上略胜但首包慢上一截的模型,放进客服链路就是事故。
还有一点不该由本篇展开:题目可能已经被练过。这个下一篇专门写数据污染,这里只需要记住一条——分数高和能力强之间隔着一层可验证性。
二、题从哪来:先抽题,不要编题
来源有优先级。真实工单与客服对话、代码提交与评审意见、线上日志与告警的处置记录、历史故障复盘,这四类按顺序取。它们共享一个特质:出错时有人真的难受过。
不要自己编题,理由不是懒,而是编题会把”你知道怎么答对”的路径全部覆盖掉,恰好测不出你不知道的那部分失败模式。更实际的问题是分布:人编的题目会自动集中在边角语法和清晰输入,漏掉线上真正的噪声——错别字、口语断句、上下文被截断、一条消息里塞三个需求、附件没解析成功只剩半句话。这些噪声才是失败率的主要来源。
抽样要做分层。按任务类别分开成组,组内随机抽,不按”有意思”挑;每类单独统计,不要把七类题混成一个总数,那样分数会掩盖分布。条数上要清楚一件事:在每类几十条这个量级里,类内波动主要来自方差而不是能力差距,所以先把类别划干净比先把总量堆大更有用。覆盖度检查的尺子是”业务里出现过的失败类型有没有题对应上”,不是题目数量。
输入模板要固定下来:系统提示、示例、字段顺序、输出格式要求全部版本化。换模板等于换题目,两次运行就不再有可比性。每条题带元数据:来源标识、任务类别、原始上下文长度、判定方式、这道题预期会暴露的失败类型标签。最后这一列在复盘时最值钱,它把”挂了七道题”变成”抽取类的字段漏取问题又出现了”。
三、输出判定分三类,工具和责任都不同
| 判定类别 | 适用任务 | 实现手段 | 必须防的坑 |
|---|---|---|---|
| 可程序判定 | 结构化抽取、格式转换、代码修复、按规则改写 | 单元测试与执行结果、JSON Schema 校验、正则约束、编译通过性、字段级比对 | 判据只写”什么算对”,没写”什么算错”;判定脚本自身有缺陷,把错判成对;输出与原文的映射关系没留,无法定位错在哪 |
| 有参考答案 | 摘要、问答、报告要点、术语归一 | 关键点清单覆盖率、语义等价判定、要点级人工核对 | 把参考答案写成一篇范文,然后按字面相似度打分,同义改写全被判错 |
| 无标准答案 | 语气与风格、多方案取舍、处置建议、解释质量 | 成对比较加位置交换去偏、按评分表人工打分、经校准的模型判分 | 直接取单个判分模型的绝对分当结论;把答案长、排版整齐当成质量好 |
参考答案这类要特别说一句:参考答案的正确形态是一份”必须命中的要点清单”加上”出现即判错的禁止项”,而不是一段漂亮文本。清单化的判据既能机器核对也能人核对,还能在更换判分模型时充当一致性检验的锚点。
无标准答案那类,判分模型需要校准,而且校准要先做:取一小批人评标注当对照,量一下判分与人在各类任务上的一致程度,一致不上的类别退回人工;判分模型与被测模型同源时,偏袒风险要单独测一轮,不能默认它中立。判分提示与判分模型版本固定并留档,判分换版视作题库变更同等级的动作。
四、方差、成本、延迟要一起报
方差控制就三件事,都便宜,但经常被省掉。
同一提示在同一题目上的重复次数要固定,并在报告里写明这个数字是几次运行的结果。只跑一次的结论没有意义,因为多数失败是采样造成的偶发。
采样参数全量记录:温度、top_p、最大输出长度、是否启用思考链、系统提示版本号。两个模型在两套采样参数下比较,差异归因不清。
把统计显著性说成人话:两条曲线的波动区间重叠时不要下结论,样本量小的类别里,通过率上的小差异通常就是噪声。团队内不需要背假设检验,只需要一条纪律——差异落在噪声带里就不许写进选型报告。
成本和延迟必须和分数同一轮测出来,用同一批题、同一套模板。要拿的数是:每千次调用花费(按实际计费口径,输入输出、缓存命中、思考链计费差异都要落到同一个算法下,网关或厂商控制台给的”成本”是估算,进财务口径前要和对账单校准一次)、首包延迟与完整响应延迟分开看、超时率与重试率、并发触顶时次。评测报告固定输出”分数、单位成本、延迟分布”三列,缺任何一列都只算偏好测试,不算选型依据。
五、它的正确定位是回归门禁,不是排行榜
排名是一次性的,门禁是持续起作用的,前者会腐坏,后者才产生复利。
- 挂进 CI:固定题库、固定模板、固定判分版本,任何一次换模型、换提示、换检索配置、换分块参数都触发同一套评测。
- 失败样本留档:原始输入、模型输出、判定依据、判分版本与判分人一起存。复盘时要能一眼分清”模型退化了””模板改了””判分误伤了”这三种情况,它们的责任人完全不同。
- 变更记录:题库、判分、模板各自独立版本号,每条变更写为什么改。
- 门禁规则:新增失败样本必须先归因再放行,绝对不允许靠调阈值让它过去。阈值调动的记录要单独留,因为它是评测集腐坏最快的一条路。
评测集腐坏的信号有三类:题目或其变体出现在公开语料和网页上,分数不再反映能力;业务任务变化,新场景没进题、老场景占比已经挪走;判分模型换版,同一份答案换了判分人。对应的治理动作是定期换题并保留一批只做历史对照、按业务流量占比复审分层、判分换版先在对照集上重跑并与历史一致性对齐。换题必须记为什么换,否则一年后没人说得清这套题代表什么。
六、洹拓视角:先纠正六个高频错误,再谈能不能自己判定
一份自建评测集真正的门槛不是代码,是纪律。六个最常见的错误,每个都能在评审会上看到:
- 用通用题库判专业能力。拿公开代码题的通过率决定要不要接入客服链路。
- 只看通过率,不看失败类型。同样掉一截分数,”字段漏取”和”整体不遵循格式”是两类问题,修法和责任人完全不同。
- 判分模型与被测模型同源,把偏袒当成优势。
- 提示里带了解题提示。为了展示效果把关键约束塞进示例,测的是提示工程而不是模型能力。
- 样本量不足却报出精细的通过率数字。每类几十条的题,报出一个带两位小数的数字,等于把四舍五入之后的噪声当结论。
- 把一次运行的波动当结论,据此切换线上服务。
我们在给客户做这类系统时,把选型评审的第一个问题固定成一句话:这个结论能不能由你自己的判定复现出来。能复现,才允许进入采购讨论;不能,所有对比都按偏好处理。一家公司的模型选型能力,等价于它有没有一份可信的私有评测集——不是因为它更准,而是因为它是唯一一份你有权换题、有权改判分、有权重跑的资产。