RouteLLM 深度解读:把模型选择变成成本-质量路由问题
如果一个系统里有很多 LLM 请求,最朴素的做法是全部交给最强模型。这样质量通常稳,但成本也最高。
RouteLLM 要解决的问题正是这个:
每个请求进来时,先判断“便宜模型够不够”。够,就走便宜模型;不够,再走强模型。
它不是一个大模型,也不是 OpenRouter、9Router 那种 provider 网关。它更像一层“模型选择算法”:用一个很小的 router,提前预测强模型相对弱模型是否有明显优势,然后用阈值控制质量和成本之间的取舍。
这篇文章从工程视角拆 RouteLLM:它到底在学什么,为什么要用 preference data,matrix factorization router 是什么意思,CPT/APGR 这些指标怎么看,以及它应该怎样接到真实 session eval 系统里。
1. 先把问题说清楚
假设线上有两个模型:
strong model: 效果好,价格高
weak model: 价格低,效果弱一些
如果所有请求都给 strong model,质量最高,但很多简单请求其实浪费。
如果所有请求都给 weak model,成本最低,但复杂请求会掉质量。
RouteLLM 试图找到中间状态:
简单请求 -> weak model
困难请求 -> strong model
这个问题看似简单,难点在于:router 做决策时还没有看到模型回答。它只能看用户 query,提前判断强模型是否值得被调用。
所以 RouteLLM 学的不是“哪个回答更好”,而是:
给定一个 query,
strong model 比 weak model 更可能赢吗?
这就是它和 LLM judge、reward model 的关键区别。
- LLM judge:回答已经生成之后,判断哪个回答好。
- RouteLLM:回答生成之前,判断该调用哪个模型。
前者可以看结果,后者只能看题目。RouteLLM 的难度就在这里。
2. 一点点概率和阈值基础
RouteLLM 里会出现“概率”和“阈值”。不用复杂数学,可以用一个很小的例子理解。
router 看见一个请求后,输出一个数:
P(strong wins) = 0.82
意思不是“强模型一定会赢”,而是:
根据训练数据里类似请求的经验,
强模型更可能比弱模型答得好,
估计概率是 82%。
接下来需要一个阈值,比如:
threshold = 0.6
决策规则就是:
如果 P(strong wins) >= threshold -> 用 strong model
否则 -> 用 weak model
换几个数看得更清楚:
| query | router 估计强模型胜率 | threshold | 路由结果 |
|---|---|---|---|
| 发票意图分类 | 0.20 | 0.60 | weak |
| 退款政策边界 | 0.73 | 0.60 | strong |
| 代码诊断 | 0.85 | 0.60 | strong |
阈值越低,越容易走 strong,质量更稳,成本更高。
阈值越高,越容易走 weak,成本更低,质量风险更大。
所以 RouteLLM 的本质不是“自动省钱”,而是:
用一个可校准的阈值,把模型选择变成一条可调的成本-质量曲线。
3. RouteLLM 的系统位置
RouteLLM 放在线上链路里,大概是这样:
flowchart LR
A[User query] --> B[RouteLLM router]
B --> C{strong wins probability}
C -->|above threshold| D[Strong model]
C -->|below threshold| E[Weak model]
D --> F[Response]
E --> F
注意它不是 cascade。
cascade 通常是:
先让 cheap model 答
答得不稳再升级 strong
RouteLLM 的目标更激进一点:
只调用一个最终模型。
这带来两个好处:
- 不需要先生成一个 cheap 回答,所以延迟更低。
- 不需要多次调用 LLM,所以额外 token 成本更少。
代价也很明确:
- router 判断错了,就可能把难题送给 weak。
- 它必须从 query 本身学出“任务难度”和“模型能力差距”。
这也是为什么 RouteLLM 需要高质量 preference data。
4. Preference Data:为什么不是直接标难度
一个直觉做法是让人标:
这个 query 是简单 / 中等 / 困难
RouteLLM 没有走这条路。它用的是 preference data:
query
model A 的回答
model B 的回答
人类投票:A 更好 / B 更好 / 平局
它的训练信号不是“题目难不难”,而是“在这个题目上,强弱模型谁赢了”。
这更贴近路由目标。因为“难”本身并不重要,重要的是:
弱模型是否已经能答到足够好?
举个例子:
请把这段英文翻译成中文。
这个任务对人来说不一定简单,但很多 weak model 已经能做得很好。它不该自动走 strong。
再看:
根据这三段上下文,判断退款是否违反地区政策,并给出合规答复。
这里强弱模型的差距可能很大,应该更倾向 strong。
所以 RouteLLM 学的是“强弱模型的相对收益”,不是抽象难度。
论文主要用 Chatbot Arena 的公开人类偏好数据作为基础数据。Chatbot Arena 里用户对匿名模型回答投票,天然形成了大量 pairwise preference。RouteLLM 再把模型按 Arena 分数聚成 tiers,把顶层模型视为 strong class,把较弱一层视为 weak class,从而缓解具体模型对之间标注稀疏的问题。
5. 数据增强为什么重要
RouteLLM 论文里一个很关键的观察是:只用 Arena 数据,router 在 MT-Bench 上表现不错,但到 MMLU、GSM8K 这类分布不同的 benchmark 时,效果会明显变弱。
这说明 router 不是学到一个抽象万能的“智力判断器”。它仍然受训练数据分布影响。
论文用了两类增强:
第一类是 golden-label data。
比如 MMLU 有标准答案。可以让 strong 和 weak 都答题,谁更接近标准答案,谁就赢。这样就能把“学科选择题”这种分布补进训练数据。
第二类是 LLM-judge-labeled data。
对于开放问答,没有标准答案,就让 strong 和 weak 分别回答,再用 GPT-4 这类 judge 产生偏好标签。
这和我们做 session eval 的思路是同一个方向:
真实任务分布越接近训练/校准数据,
router 越可能可靠。
所以工程上不要幻想拿开源 RouteLLM 直接扔到所有业务流量上就自动最优。它能给你一个很好的起点,但要想在真实业务里稳定省钱,必须把自己的 session 分布喂给评测和校准过程。
6. 四种 Router:它们分别在学什么
RouteLLM 开源仓库里支持几类 router,其中 README 当前推荐 mf,也就是 matrix factorization router。
6.1 Similarity-weighted ranking
这个方法很像“找相似题,然后看历史投票”。
流程可以想成:
新 query 进来
-> 用 embedding 找训练集中相似 query
-> 相似 query 的投票权重更高
-> 用加权 Elo / Bradley-Terry 估计 strong 是否更可能赢
它的优点是直观,不需要复杂训练。
缺点是推理时要依赖相似检索和计算,速度、工程复杂度、分布覆盖都会影响效果。
6.2 Matrix factorization router
这是 RouteLLM 里最值得关注的版本。
它借鉴推荐系统的思路:用户和商品之间有一个隐含偏好矩阵,但矩阵很稀疏,于是学习低维向量来预测缺失位置。
类比到 LLM routing:
query 像“用户”
model 像“商品”
score(query, model) 表示这个模型回答这个 query 的潜在质量
如果训练数据说:
model A 在 query x 上赢了 model B
模型就学习让:
score(query x, model A) > score(query x, model B)
这样训练完成后,给一个新 query,它就能估计 strong 和 weak 的相对分数,再转成“strong wins probability”。
这类方法的好处是:
- 比纯相似检索更可学习
- 比大 LLM router 更轻
- 推理开销低
- 能利用模型和 query 的隐向量结构
论文和仓库都把 mf 作为很实用的默认选择。
6.3 BERT classifier
BERT classifier 更直接:
输入 query
输出 strong 是否会赢
它是一个文本分类器。优点是表达能力比简单方法强,缺点是需要足够多、足够贴近分布的数据。论文里也观察到,高容量模型在低数据或分布不匹配时未必更好。
6.4 Causal LLM classifier
这个版本用一个小型 causal LLM 做分类器。它看起来最“智能”,但训练和部署成本也更高。
它适合什么场景?
query 很复杂
需要更强语义理解
有足够训练数据
router 本身的成本仍然远低于 strong model
但对第一版业务落地,我不会优先建议从 causal LLM router 起步。它容易把系统复杂度拉高。
7. CPT 和 APGR:论文指标到底在看什么
RouteLLM 论文没有只报“准确率”。这是对的,因为路由系统不是分类竞赛,它关心的是成本-质量曲线。
CPT:达到某个质量需要多少 strong 调用
CPT 可以理解成:
为了恢复强弱模型质量差距中的某个比例,
router 至少需要把多少请求发给 strong model?
比如:
CPT(80%) = 14%
可以粗略理解为:
为了拿回 80% 的强模型质量收益,
只需要 14% 的请求走 strong。
这个指标很贴近业务,因为你最终关心的就是:
为了达到目标质量,我要付多少 strong model 调用?
APGR:整条成本-质量曲线的面积
APGR 看的是不同阈值下,router 能恢复多少强弱模型之间的质量差距。
一个 router 如果只在某个阈值下好,APGR 不一定高。
一个 router 如果在很多成本预算下都稳定比 random routing 好,APGR 会更好。
业务上可以这样理解:
CPT 适合定一个目标点。
APGR 适合比较 router 整体能力。
8. 论文结果该怎么读
RouteLLM 论文和 LMSYS 博客里有几个重要结论。
第一,在 MT-Bench 上,RouteLLM 的 router 能显著减少强模型调用。LMSYS 博客里给出的结果是,使用 Arena 数据增强后,matrix factorization router 只需要约 14% GPT-4 调用就能达到 95% GPT-4 表现,相比 random baseline 便宜 75%。
第二,在 MMLU、GSM8K 上,只用 Arena 数据时效果会弱很多,因为分布不同。加入少量 in-domain 或 judge-labeled 数据后,router 表现明显改善。
第三,router 有一定跨模型泛化能力。论文测试了把原来 GPT-4 / Mixtral 的路由设置换成 Claude 3 Opus / Sonnet、Llama 3.1 70B / 8B 等模型对,不重新训练也能保持比 random 更好的表现。
第四,router 本身开销相对小。论文报告的几类 router 开销,相比 GPT-4 generation 成本很低。这个很重要,因为如果 router 自己太贵,省钱逻辑就不成立。
这些结果值得重视,但也要读出边界:
RouteLLM 的效果来自“训练/增强数据和目标流量足够相似”。
分布不匹配时,router 会退化。
所以它不是免配置的魔法,而是一个可以被数据校准的工程组件。
9. 开源框架怎么用
RouteLLM 仓库提供了 serving 和 evaluation 两部分。
安装大致是:
pip install "routellm[serve,eval]"
启动 OpenAI-compatible server:
python -m routellm.openai_server --routers mf --config config.example.yaml
请求时通过 model 字段指定 router 和 threshold:
router-mf-0.5
它的意思是:
使用 mf router,并用 0.5 作为路由阈值。
仓库也提供 threshold calibration:
python -m routellm.calibrate_threshold \
--task calibrate \
--routers mf \
--strong-model-pct 0.5 \
--config config.example.yaml
这一步很关键。因为同一个 threshold 在不同业务流量上的 strong call rate 不一样。你不能拿公开数据上校准出来的阈值,直接假设它在线上也会把 30% 请求发给 strong。
评测命令类似:
python -m routellm.evals.evaluate \
--routers random sw_ranking bert \
--benchmark gsm8k \
--config config.example.yaml
仓库当前支持的 benchmark 包括 mmlu、gsm8k 和 mt-bench。这对复现论文有用,但业务落地时更重要的是把自己的 session eval 接进去。
10. 和 9Router、OpenRouter、Promptfoo 的区别
这几个名字容易混。
| 工具 | 本质 | 解决的问题 |
|---|---|---|
| RouteLLM | 路由算法/框架 | 判断强模型是否值得调用 |
| 9Router | 本地 API 网关 | 把 CLI/IDE 请求接到多个 provider,做 fallback 和 token saving |
| OpenRouter | 托管模型聚合 API | 用一个 API 调多个模型/provider |
| Promptfoo | 评测框架 | 批量评估 prompt/model/provider 输出效果 |
它们可以组合,但职责不同。
一个比较合理的工程组合是:
flowchart TD
A[Production sessions] --> B[Promptfoo / custom eval]
B --> C[Task labels and preference data]
C --> D[RouteLLM calibration or training]
D --> E[Routing policy]
E --> F[9Router or custom gateway]
F --> G[Weak / Mid / Strong providers]
Promptfoo 负责“评出来”。
RouteLLM 负责“学会怎么选”。
9Router 或自研 gateway 负责“线上转发”。
OpenRouter 则可以作为 provider 聚合层。
11. 怎么接到真实 Session Eval
我们前面做的 session eval 系统,产物是:
task_type -> cheapest passing model
这已经能做规则路由:
intent_triage -> cheap
refund_policy -> mid
code_debug -> strong
RouteLLM 更适合下一阶段:当你发现同一个 task_type 里仍然有明显难易差异时。
比如 refund_policy 里可能有三类:
明确 45 天超期 -> mid 足够
跨地区政策 + 优惠券 + 部分退款 -> strong 更稳
用户要求绕过政策 -> strong 或人工
这时候只靠 task_type 不够细。你需要一个 query-level router,在同一类任务内部继续分流。
落地路径可以是:
第一阶段:规则路由
task_type -> model tier
第二阶段:收集 pairwise preference
同一 session 上 weak/mid/strong 的回答谁更好
第三阶段:训练或校准 router
输入 session/query,输出 strong wins probability
第四阶段:线上灰度
先 shadow routing,再小流量生效
不要一上来就训练 RouteLLM。先让 eval 系统稳定产出标签,再让 router 学。
12. 什么时候不该用 RouteLLM
RouteLLM 很适合:
- strong 和 weak 之间成本差距大
- 大量请求其实 weak 能处理
- 请求分布稳定
- 有 session eval 或 preference data
- 能接受少量路由错误,并有 fallback 机制
它不适合:
- 所有请求都高风险,不能容忍 weak 误答
- 任务分布变化很快,但没有持续校准
- 请求必须严格满足工具/权限/合规策略,路由只是次要问题
- 你只有很少流量,router 的工程复杂度超过节省成本
- 你还没有可靠评测集,只是想“自动省钱”
尤其在金融、支付、合规、医疗这类场景里,RouteLLM 不能替代安全策略。它只能帮助选择模型,不能保证业务行为安全。
13. 我会怎么落一版生产方案
如果要把 RouteLLM 思路接进真实系统,我会这样做:
flowchart TD
A[Sample production sessions] --> B[Human-reviewed eval set]
B --> C[Run weak / mid / strong outputs]
C --> D[Judge + deterministic checks]
D --> E[Preference labels]
E --> F[Router calibration]
F --> G[Shadow traffic]
G --> H[Online metrics]
H --> I[Threshold update]
I --> G
第一步不是训练,而是建数据。
每条 session 至少要有:
- task_type
- success criteria
- weak/mid/strong outputs
- judge 分数
- 人工抽样复核
- 失败原因分类
然后先做两个简单 baseline:
always weak
always strong
再加一个规则 router:
task_type -> model tier
最后才比较 RouteLLM router:
query/session -> probability strong wins
如果 RouteLLM 相比规则 router 没有明显收益,就不要复杂化。如果它能在同等质量下降低 strong call rate,再考虑上线。
14. 一句话总结
RouteLLM 的核心洞察是:
模型选择不是配置问题,而是一个可以从偏好数据里学习的成本-质量决策问题。
它把“要不要调用强模型”变成:
预测 strong model 在这个 query 上是否值得花钱
再通过 threshold 把质量和成本调成一条曲线。
但它的效果不是凭空来的。它依赖三件事:
- 有代表性的 preference data。
- 和真实流量接近的校准集。
- 上线后持续监控路由错误。
所以最稳的落地方式不是“直接上 RouteLLM”,而是:
先有 session eval,
再有 preference labels,
最后才有 learned router。
这也是它和前面那套 session 评测系统的关系:评测系统负责产生可信信号,RouteLLM 负责把这些信号压缩成实时路由决策。
参考
- RouteLLM paper: https://arxiv.org/abs/2406.18665
- RouteLLM arXiv HTML: https://arxiv.org/html/2406.18665v4
- RouteLLM GitHub: https://github.com/lm-sys/RouteLLM
- LMSYS RouteLLM blog: https://www.lmsys.org/blog/2024-07-01-routellm/
- Anyscale LLM router guide: https://www.anyscale.com/blog/building-an-llm-router-for-high-quality-and-cost-effective-responses