很多人做模型对比,就是把同一个问题分别丢给两个模型,看谁答得顺眼就下结论,结果换个问题结论又反了。问题不在模型,在实验设计:指标没定、样本太少、评测方式带着偏向。这篇给一套能直接照做的流程——先定可比口径,再选指标和样本,最后按固定顺序读结果,让对比从「我觉得」变成「有依据」。
做模型对比最容易掉进一个坑:拿一个自认为典型的问题,分别问两个模型,谁的回答读起来顺眼就拍板。换几个问题再试,结论可能就反过来了。问题往往不出在模型上,而出在实验设计——指标没提前定、样本量不够、评判时自己已经知道哪个答案来自哪个模型。这篇给一套能直接照做的流程,让对比从「我觉得」变成「有依据」。
整套流程分四步:先把不可比的因素掐掉,再按任务类型选指标,接着设计有代表性的样本,最后按固定顺序读结果。四步里最容易省掉的是第一步和第四步,也恰恰是决定结论能不能站住的两步。
第一步:先把不可比的因素掐掉
对比实验里最常见的假结论,来自变量没控住。温度、最大输出长度、系统提示词、上下文拼接方式,只要有一项不同,差异就可能来自参数而不是模型本身。建议所有候选模型跑同一份请求模板,把参数显式写进记录表,别靠脑子记。
| 要固定的一项 | 怎么固定 | 不固定会怎样 |
|---|---|---|
| 输入提示词 | 同一份模板复制给所有候选 | 差异来自措辞而非模型 |
| 生成参数 | 温度、输出上限写进记录表 | 随机性被误读成能力差异 |
| 调用时段 | 交叉着跑,不要先跑完A再跑B | 负载波动混进结论 |
| 评判口径 | 同一套标准,最好打乱顺序盲评 | 知道来源就会有偏向 |
- 输出侧也要统一:别一个模型看内容、另一个模型看格式,否则格式分变成了印象分
- 记录调用时间:同一模型在不同时段表现会受负载影响,做A/B尽量交叉跑
- 把每次请求的原始返回存下来,后面复核不用重跑
- 报告里写明用的是默认口径还是调参口径,别和别的实验混着比
第二步:指标按任务类型选,别一套指标打天下
指标选错,后面做得再规范也白搭。抽取、分类、改错、结构化输出这类客观任务,可以用可自动判定的指标:命中率、字段完整率、格式合规率。关键是提前写好判定脚本,别事后人工数,人工数的时候你会不自觉地放水。
写作、问答、代码、咨询这类开放任务,自动指标基本失效,改用分维度打分:正确性、完整性、可执行性、是否编造。每个维度给三档描述,两个以上的人独立打,把分歧项单独拎出来复盘。
- 客观任务
- 能写成脚本判定的,优先用脚本,避免人工介入
- 开放任务
- 分维度打档,多人独立评,分歧项复盘
- 成本与延迟
- 同样的活儿花了多少token、等了多少秒,这条永远要记
- 单价核对
- 到 /official-api 看当时的数字,别用记忆里的价
第三步:样本怎么切才有代表性
从真实业务里抽题,不要用自己临时想的例子。一个可行做法是翻最近一段时间的工单、日志或聊天记录,脱敏后挑出高频场景,每类场景保证有若干条。样本量按差异预期来定:如果两个候选实力接近,题量太少根本分不出来,这时候要么加题量,要么承认这次分不出差异,比强行下结论靠谱。
- 抽题从真实工单/日志脱敏后挑高频场景,每类留几条,标注预期答案
- 切分把题目和答案拆开保存,评测人只看题目;留一份带干扰项的版本
- 设对照放几条明显超纲的题和几条极简单的题,看硬编和低级翻车
- 记录每条题记下调用耗时、token消耗,和分数放同一张表里
- 对照题里超纲的那几条,重点看模型会不会硬编答案
- 极简单的那几条,看有没有低级翻车,这两类比平均分更能说明问题
- 带干扰项的版本用来看模型会不会被无关信息带偏,知识库场景尤其关键
- 样本量不够时,宁可写「本次未能区分」,也别硬凑结论
第四步:结果怎么读、怎么写成能用的结论
先看失败案例再看总分。把两边都答错的题挑出来,这类题往往说明任务本身定义不清,不是模型的锅;把一边答对一边答错的题单独列出来,这些才是区分度所在。同一题换个说法再跑一遍,如果结论翻转,说明这个差异不稳定,不要写进结论。
| 现象 | 可能原因 | 下一步动作 |
|---|---|---|
| 两边都答错 | 任务定义不清或超纲 | 改任务描述,别急着换模型 |
| 一边对一边错 | 真正的能力差异 | 换同义题复跑,确认是否稳定 |
| 分数接近但延迟差很多 | 成本或负载问题 | 到 /price-watch 核对当时的数字再定 |
| 同一题结论翻转 | 差异不稳定 | 不写进结论,标注为不确定项 |
- 结论写成条件式:在什么任务、什么输入长度、什么成本约束下,A比B合适
- 反过来也要写:在什么条件下B更合适,别只写单向结论
- 给一个回退方案:换模型后表现不及预期时,退回原来那套的判断依据是什么
- 把回退方案一起写进报告,省掉下次扯皮
常见问题
只用一个提示词比多个模型,能算对比实验吗?
可以算初步摸底,但得不出可靠结论。单个样本的差异可能来自措辞巧合、生成随机性或者当时的负载。想让结论站得住,至少要有覆盖几类真实场景的一批题,并且同一题在不同模型上跑的口径完全一致。如果时间有限,与其多测几个模型,不如把题量加够。
人工打分主观性太强,有没有省事的替代?
分两条路:能自动判定的任务就用脚本判,提前写规则;不能自动判定的,就退一步只打粗粒度档位(可用/勉强/不可用),减少打分人的自由发挥空间。再让两个人独立打,只对分歧项讨论。比追求精细分数更重要的是把判定标准写清楚,别人拿着你的标准能复现。
测出来两个模型差不多,怎么定?
先确认是不是题量不够导致分不出来,可以补一批高难度题再跑。如果确实接近,就把决策权交给其他维度:成本、延迟、稳定性、许可证和部署方式。这几个维度往往有明确差距,不会都打平。可以到 /models 和 /benchmarks 查当时的可比数据,再结合自己的用量算一遍账。