LLM 路由器
LLM 路由器是 PRX 的模型选择引擎——2,808 行 Rust 代码,决定哪个供应商和模型处理每个传入请求。它在实时环境中平衡质量、成本、延迟和能力,做出最优路由决策。
传入请求 │ ├─ 1. 意图分类 │ 对请求进行分类(代码、聊天、分析、翻译等) │ ├─ 2. 模型选择(评分器) │ 对所有候选模型评分并排序 │ ├─ 3. 可靠性降级 │ 如果选定模型不可用,沿降级链传递 │ ├─ 4. Automix │ 先用更便宜的模型;如果置信度低则升级 │ └─ 5. 记录结果 记录结果用于 Elo 更新和未来路由决策每个候选模型获得一个综合分数:
score = alpha * similarity + beta * capability + gamma * elo - delta * cost - epsilon * latency| 因子 | 权重 | 来源 |
|---|---|---|
similarity | alpha | 请求与模型过去最佳表现请求之间的 KNN 语义距离 |
capability | beta | 静态能力矩阵(编码、数学、推理、多语言、视觉等) |
elo | gamma | 每次完成请求后更新的动态 Elo 评分 |
cost | delta | 每令牌价格(输入 + 输出) |
latency | epsilon | 该模型的滚动平均响应时间 |
权重可配置,可以按通道或按用户调整,以优先考虑质量或成本。
分类器将每个请求映射到一个或多个意图类别:
| 意图 | 说明 | 偏好能力 |
|---|---|---|
code | 编写、调试或审查代码 | 强编码基准 |
chat | 日常对话 | 低延迟、便宜 |
analysis | 数据分析、复杂推理 | 高推理能力 |
translation | 语言翻译 | 多语言优势 |
vision | 图像理解 | 需要视觉模型 |
math | 数学问题求解 | 数学/推理基准 |
creative | 写作、头脑风暴 | 创意流畅度 |
tool_use | 带工具调用的代理工作流 | 原生工具调用、指令遵循 |
分类速度快——使用关键词启发式,在模糊时使用轻量模型调用。
每个模型有一个静态能力画像,在各维度上评分:
claude-sonnet-4: coding=0.95 reasoning=0.93 creative=0.90 speed=0.80 cost=0.70gpt-4o: coding=0.90 reasoning=0.88 creative=0.85 speed=0.85 cost=0.75gemini-2.5-pro: coding=0.88 reasoning=0.90 creative=0.82 speed=0.82 cost=0.80llama3.1-70b: coding=0.75 reasoning=0.70 creative=0.72 speed=0.90 cost=0.95路由器将与意图相关的能力分数乘以 beta,生成最终分数的能力部分。
Elo 评分
Section titled “Elo 评分”每个模型维护一个 Elo 评分,在每次请求后更新。当请求成功(用户接受响应,无需重试)时,模型 Elo 上升。当请求失败或在另一个模型上重试时,模型 Elo 下降。
这创造了一个自我修正的反馈循环:在实践中表现良好的模型在排名中上升,不受静态基准的限制。
KNN 语义路由
Section titled “KNN 语义路由”路由器维护过去请求及其结果的嵌入索引。对于每个新请求,它找到 K 个最近的过去请求(按嵌入相似度),并检查哪些模型在类似输入上表现最好。
这对专业领域特别有价值——如果某个模型在你的环境中持续良好地处理 SQL 问题,路由器会学会在 SQL 相关请求中优先选择它。
Automix
Section titled “Automix”Automix 是一种成本优化策略:
- 先将请求路由到更便宜的模型(如 Haiku、GPT-4o-mini)
- 评估响应置信度(基于模型自评、响应连贯性和输出质量信号)
- 如果置信度低于阈值,重新路由到高端模型(如 Opus、o3)
- 将高端响应返回给用户
这在简单请求上节省成本,同时在困难请求上保持质量。置信度阈值可调。
请求 ──→ 便宜模型 ──→ 置信度检查 │ ≥ 阈值 → 返回便宜响应 < 阈值 → 重新路由到高端模型 → 返回高端响应路由器记录每个路由决策及其结果:
- 选择了哪个模型及原因(分数分解)
- 请求是否成功或被重试
- 响应延迟和令牌数
- 用户反馈信号(如有)
这些历史记录为 Elo 系统、KNN 索引提供数据,并提供路由行为的可观测性。
当 PRX 在没有历史的情况下全新启动时,路由器回退到合理的默认值:
- 所有模型的 Elo 评分初始化为 1500
- KNN 索引为空,因此
similarity对分数贡献为零 - 能力匹配和成本/延迟成为主要因素
- 分数相同时使用可配置的
default_model
随着系统积累历史,动态组件(Elo、KNN)逐渐接替静态启发式。
[router]default_model = "anthropic/claude-sonnet-4-20250514"
# 评分权重alpha = 0.25 # 语义相似度beta = 0.30 # 能力匹配gamma = 0.20 # Elo 评分delta = 0.15 # 成本惩罚epsilon = 0.10 # 延迟惩罚
# Automixautomix_enabled = trueautomix_cheap_model = "anthropic/claude-haiku-4-20250414"automix_premium_model = "anthropic/claude-sonnet-4-20250514"automix_confidence_threshold = 0.7
# 降级链fallback_chain = [ "anthropic/claude-sonnet-4-20250514", "openai/gpt-4o", "google/gemini-2.5-pro",]