Part 2 · Serving & Cost 服务与成本

2.3 Model Routing 模型分级与路由:贵模型只用在刀刃上

难度 ★★☆ 阅读 ~14 min 面试出现频率 中高 前置 2.1 延迟指标
Core Concept 核心概念

请求的难度分布是极不均匀的

几乎所有生产系统的流量都长成同一个形状:大量简单请求 + 少量困难请求。「帮我把这段话改得正式一点」和「分析这三份财报的矛盾之处」被同一个入口接收,然后被同一个最强的模型处理。前者用一个小两个数量级的模型也能做得很好,你却为它付了旗舰价格。

与此同时,模型的能力-价格谱系非常宽:同一家厂商的小模型与旗舰模型之间,单位 token 价格常常差出一到两个数量级,自托管的小模型更是可以把边际成本压到接近于零。model routing(模型路由)要做的就是把这两件事对上:让每个请求落到「刚好够用」的那一档模型上。

这里的收益结构值得先算清楚。假设 80% 的请求可以由便宜 20 倍的小模型胜任:

全部走大模型:成本 = 1.0(基准)
80% 走小模型(价格 = 大模型的 1/20):
 成本 = 0.8 × 0.05 + 0.2 × 1.0 = 0.04 + 0.20 = 0.24

→ 成本降到约 1/4,但这个数字的上限被那 20% 死死锁住
(本式为按上述假设的自行推导,用于说明结构)

注意最后一行——这是路由最重要的直觉:即使小模型完全免费,成本也降不到 0.20 以下。困难请求构成了成本的地板。所以路由的收益天花板由「简单请求的占比」决定,而不是由「小模型有多便宜」决定。在动手之前,先去测你的流量里简单请求究竟占多少;如果只有 30%,那么再精妙的路由也救不了你。

三种路由模式

① 静态路由 — 按任务类型硬编码 请求 规则判断 小模型 · 分类/抽取 大模型 · 推理 简单可靠,但粒度粗 ② 学习式路由 — 预测「小模型够不够」 请求 router 模型 小模型 大模型 粒度细,但必须「未卜先知」 ③ 级联 — 先便宜地试,不行再升级 请求 小模型 质量检验 通过 返回 不通过 大模型重做 判断更准,代价是失败要付两次
图 2 · 三种模式的取舍。核心差异在「什么时候做决定」:静态和学习式路由必须在看到答案之前决定,级联则可以看到答案之后再决定——准确度更高,但升级的那部分请求要付两次成本和两倍延迟。

① 静态路由:按任务类型硬编码。「意图分类走小模型、复杂推理走大模型」。优点是可预测、可解释、零额外延迟;缺点是粒度粗——同一类任务里也有难有易。这是绝大多数团队应该先做的版本,往往已经吃掉了大部分收益。

② 学习式路由:训一个轻量分类器,直接预测「这个请求小模型能不能搞定」。粒度细得多,但它要解决一个本质困难——在没看到答案之前判断答案好不好。这个判断天然不可靠,且需要标注数据来训练。

③ 级联(cascade):先用小模型跑,再用某种手段检验结果(置信度信号、规则校验、甚至让模型自评),不合格则升级到大模型重做。它把「预测难度」换成了「验证质量」——后者通常容易得多。代价是被升级的请求付了两遍成本、两倍延迟。

级联的盈亏平衡(自行推导)

E[成本] = c_小 + p × c_大 (p = 升级率)
划算条件:c_小 + p × c_大 < c_大 ⟹ p < 1 − c_小/c_大

若小模型是大模型价格的 1/20:只要升级率 p < 95% 就比全走大模型便宜
若小模型是大模型价格的 1/2:需要 p < 50% 才划算

→ 成本上级联的门槛低得惊人;真正的约束是延迟,不是成本

这个推导给出一个反直觉的结论:只要两档模型的价差够大,级联在成本上几乎稳赚。它真正的代价在延迟——被升级的请求要串行经历两次完整推理,P99 延迟会明显恶化。所以级联适合对成本敏感、对尾部延迟宽容的场景(如异步批处理、后台任务),不适合语音对话这类 TTFT 敏感的场景。

路由错误的代价是不对称的

这是设计路由时最容易被忽略的一点。两类错误的后果完全不同:

把简单请求路由到大模型——多花了钱,用户毫无感知。这是一个可以承受的错误。

把困难请求路由到小模型——用户收到一个错误或劣质的回答。这是产品事故,而且往往悄无声息:没有报警、没有异常日志,只有用户默默流失。

因此路由阈值不应该按准确率最优来调,而应该按代价最优来调——刻意偏保守,宁可多走一些大模型。一个实用的做法是:把阈值调到「小模型误接困难请求」的比例低于某个业务可接受的上限,然后在这个约束下最大化小模型的分流比例。先定质量底线,再谈省钱。

Case Study 真实案例

RouteLLM:用偏好数据学一个路由器

RouteLLM: Learning to Route LLMs from Preference Data (ICLR 2025)

LMSYS 团队把「该用强模型还是弱模型」形式化成一个可学习的问题,并用一个现成的数据源来训练它:Chatbot Arena 的人类偏好数据——大量「同一个问题,两个模型的回答,人类选了哪个」的记录。这些数据天然编码了「哪类问题上强弱模型的差距大、哪类问题上差不多」的信息,而后者正是路由决策所需的全部。

> 85%
MT Bench 上的成本下降(vs 全部使用 GPT-4)
45%
MMLU 上的成本下降
35%
GSM8K 上的成本下降
95%
同时保持的 GPT-4 性能水平

三个数字的差异比数字本身更有信息量。同一套方法,在 MT Bench 上省 85%,在 GSM8K 上只省 35%——这不是方法不稳定,而是三个基准的请求难度分布不同。MT Bench 含大量开放式对话,弱模型也能给出人类满意的回答;GSM8K 是数学推理,强弱模型的能力差距真实存在且难以回避。

这印证了本章开头的判断:路由的收益上限由你的流量构成决定。别人报告的节省比例对你几乎没有参考价值,除非你的请求难度分布和他相似。上线路由前的第一件事不是选算法,而是在自己的真实流量上测出「小模型足够好」的请求占比。

另一个值得借鉴的是数据来源的选择:他们没有专门标注「这个问题难不难」,而是复用了已有的偏好对比数据。这个思路可以直接搬到自己的系统里——线上已有的用户重试、点踩、人工接管记录,就是现成的路由训练信号。

来源:Ong et al., "RouteLLM: Learning to Route LLMs with Preference Data",后发表于 ICLR 2025;数字引自论文与 LMSYS 公开博客。基线为全部使用 GPT-4。
Tooling Sidebar 工具层
路由的落地形态(会过期,正文不依赖本区块) 截至 2026-08

开源框架:RouteLLM 提供可直接替换 OpenAI 客户端的路由实现,附带在偏好数据上训好的路由器;各类 LLM 网关(LiteLLM 等)普遍支持基于规则的多模型路由与自动回退。

厂商内置:部分商业 API 已提供「自动选择模型档位」的接口形态,由服务端决定用哪一档。便利之处是零改造,代价是路由逻辑不透明、无法按自己的质量底线调整阈值——对质量敏感的场景应保留自己控制路由的能力。

路由器本身的成本:学习式路由的分类器必须极轻(小型 embedding 模型 + 逻辑回归量级),否则路由开销会吃掉分流省下的钱,还会给每个请求加上一段固定延迟。用 LLM 做路由判断通常是错误的选择——你为了省钱又多调了一次模型。

与缓存的相互作用:路由到不同模型意味着缓存池也被分割(见 2.2)。若两档模型各自维护前缀缓存,分流会降低各自的命中率。流量不大时,路由省下的钱可能抵不过缓存命中率下降的损失,值得实测。

必须监控的三个指标:各档模型的分流比例、级联的升级率、以及按档位分开统计的质量指标。第三个最常被遗漏——总体质量指标会把小模型的退化平均掉,必须按档位分桶才能看见。

Quiz 自测

章末自测

决策题一个文档问答产品,日均 10 万次调用,目前全部走旗舰模型。小模型价格是旗舰的 1/15,实测在 60% 的请求上质量无差异。给出你的方案,并说明先做什么、后做什么。

第一步:先算收益上限,判断值不值得做。理想情况(60% 完美分流)成本 = 0.6 × (1/15) + 0.4 × 1 = 0.04 + 0.40 = 0.44,即最多省 56%。关键认识:那 40% 的困难请求锁死了 0.40 的成本地板,任何路由方案都突破不了。如果省 56% 不足以改变项目的经济性,就不该在这上面投入。

第二步:先上静态路由,不要一上来就训模型。把可以按规则识别的简单任务(摘要、格式化、关键词抽取、短问答)直接指向小模型。这通常能拿到理论收益的大半,且当天就能上线、随时可回滚。

第三步:用级联覆盖规则识别不了的部分。文档问答对尾部延迟通常宽容(用户已经准备好等一会儿),符合级联的适用条件。按上文公式,价差 1/15 时只要升级率 < 93% 就比全走大模型便宜——成本上几乎稳赚。检验手段优先选确定性的:答案是否包含有效引用、是否符合输出 schema、是否回答了问题(而非拒答)。

第四步:有了线上数据再考虑学习式路由。级联的升级记录天然就是训练数据——「这条请求小模型失败了」就是标签。此时训路由器的边际成本很低,且能把两次调用的延迟代价降下来。

贯穿始终:先定质量底线。上线前明确「小模型误接困难请求」的可接受上限,按它调阈值;监控必须按档位分桶,否则小模型的质量退化会被平均掉。灰度发布,从 10% 流量开始。

估算题级联方案:小模型成本 1 单位、延迟 500ms;大模型成本 12 单位、延迟 2000ms;升级率 25%。对比全走大模型,成本与平均延迟各如何变化?P99 延迟呢?

成本:E = 1 + 0.25 × 12 = 4 单位,相比全走大模型的 12 单位,省 67%。

平均延迟:E = 500 + 0.25 × 2000 = 1000ms,相比 2000ms 改善 50%(75% 的请求只花 500ms 就返回了)。

P99 延迟:这是要害。被升级的请求延迟 = 500 + 2000 = 2500ms,比全走大模型的 2000ms 恶化了 25%。由于升级率 25% > 1%,P99 必然落在被升级的那部分里。

结论:级联同时改善了成本和平均延迟,却恶化了尾部延迟——而尾部延迟恰恰是 SLA 通常约束的那个。这就是为什么级联适合异步与后台任务,在交互式场景中要格外谨慎。

可行的缓解:对判定为「大概率会升级」的请求跳过小模型直接走大模型(即用轻量路由器为级联做预筛),把两种模式组合起来。

概念题为什么说路由错误的代价是不对称的?这如何影响阈值设定?

两类错误后果完全不同。把简单请求送给大模型:多花钱,用户无感知,可测量、可容忍。把困难请求送给小模型:用户拿到劣质答案,是产品事故——而且它不会触发任何报警,系统一切正常,只有用户在沉默中流失。

对阈值的影响:不能按「路由准确率最高」来调阈值,因为准确率把两类错误同等看待。应当刻意偏向保守:先设定「困难请求被误路由到小模型」的可接受上限(由业务定,例如 < 2%),在这个硬约束下再最大化小模型的分流比例。

这个模式在别处也成立:凡是两类错误代价不对称的判定问题(拒答设计、内容安全过滤、降级开关),都应该先固定代价高的那一侧的上限,再优化另一侧。见 6.3 的拒答设计。

面试题改编「用一个 LLM 来判断该路由到哪个模型,这个设计有什么问题?」

问题一:成本自相矛盾。路由的目的是省钱,但你为每个请求都额外加了一次 LLM 调用。除非这个判断模型比最便宜的那一档还便宜一个数量级,否则收益会被路由开销吃掉相当一部分。

问题二:延迟串行叠加。路由判断必须在实际调用之前完成,它的延迟无法与主调用并行,直接加到每一个请求的 TTFT 上——包括那些本来就要走大模型的请求。

问题三:判断任务本身并不需要 LLM。「这个请求难不难」是一个二分类问题,用小型 embedding 模型 + 轻量分类器就能做,推理开销可以低到毫秒级且几乎零成本。用 LLM 属于杀鸡用牛刀。

什么时候它反而合理:如果这次判断的结果可以被复用(例如在会话开始时判断一次,整个会话沿用),摊薄后的开销就可以接受。这是判断的关键——路由开销必须能被摊薄到多次调用上,否则就不成立。