模型级联中决定成本收益的核心是置信度排序能力而非准确率。实验证明,提升校准0.30比提升廉价模型准确率0.10更有效,级联成本可降低70%。
运行便宜的小模型。如果它置信度高,就直接返回答案。如果不够,就升级到贵的模型。大模型的费用只花在升级的那部分请求上。
讨论这个问题时,大家往往关注两个模型的准确率。但看看代码实际在读什么:
answer, confidence = small(x)
if confidence >= threshold: return answer
return big(x)
它读取的是置信度,而不是小模型是否答对了。所以决定级联是否有效的指标不是准确率——而是置信度分数是否能把错误答案排在正确答案之后。
这正是为什么校准比能力更重要
在相同的 20% 升级预算下:
第一个模型准确地知道该把哪些 30% 的请求交出去。第二个模型升级的则是一堆随机挑选的case,把大部分预算浪费在它本来能做对的请求上。
消融实验同样说明了这一点。将升级率固定在 20%:校准度提升 0.30 可获得 6.1 分,便宜模型的准确率提升 0.10 可获得 5.8 分,而贵模型的准确率提升 0.05 只能获得 0.9 分。校准度通常也是三者中最容易提升的——温度缩放只需要拟合一个参数。
级联没有单一分数
它是一条曲线。两个配置只能在相同成本下比较,这也是消融实验锁定升级率而不是比较自由浮动的准确率的原因。
固定的阈值不等于固定的预算
你调 threshold = 0.85,升级率是 20%。后来流量分布变了,同样的阈值升级率变成了 33%。你的代码没有任何变动,但账单却变了。
const sorted = confidences.slice().sort((a, b) => a - b);
const threshold = sorted[Math.floor(rate * sorted.length)]; // a BUDGET, not a constant
一行代码就把一个漂移的阈值转换成了固定的预算。你想让准确率还是成本保持不变,这是一个真实的设计决策——重要的是你主动做出这个选择,而不是在账单上发现它。
"两个都跑,有分歧再升级"不是一种服务策略
在准确率相同的情况下,它的单次请求费用是 26.00,而"永远用贵的"只需要 25.00——因为你已经为了一比较而支付了贵的调用费用。这是一个很好的离线寻找困难样本的技术。两者经常被混为一谈。
值得提的一个 bug
我的第一个置信度模型是 calibration * correct + (1 - calibration) * noise。当校准度为 1 时,所有分数都会塌缩成恰好 0 或 1——于是分位数阈值落在一个临界点上,结果根本不升级,核心发现测出来是零。
真实的置信度分数是连续的。修复方法是在"在整个范围内均匀分布"和"在正确的那一半上均匀分布"之间做插值:完全有序,且无 ties。
这是从零学 AI 系列的一部分——每天一个 AI 概念,浏览器内实测:链接