跳转到内容

LLM 路由器

LLM 路由器是 PRX 的模型选择引擎——2,808 行 Rust 代码,决定哪个供应商和模型处理每个传入请求。它在实时环境中平衡质量、成本、延迟和能力,做出最优路由决策。

传入请求
├─ 1. 意图分类
│ 对请求进行分类(代码、聊天、分析、翻译等)
├─ 2. 模型选择(评分器)
│ 对所有候选模型评分并排序
├─ 3. 可靠性降级
│ 如果选定模型不可用,沿降级链传递
├─ 4. Automix
│ 先用更便宜的模型;如果置信度低则升级
└─ 5. 记录结果
记录结果用于 Elo 更新和未来路由决策

每个候选模型获得一个综合分数:

score = alpha * similarity
+ beta * capability
+ gamma * elo
- delta * cost
- epsilon * latency
因子权重来源
similarityalpha请求与模型过去最佳表现请求之间的 KNN 语义距离
capabilitybeta静态能力矩阵(编码、数学、推理、多语言、视觉等)
elogamma每次完成请求后更新的动态 Elo 评分
costdelta每令牌价格(输入 + 输出)
latencyepsilon该模型的滚动平均响应时间

权重可配置,可以按通道或按用户调整,以优先考虑质量或成本。

分类器将每个请求映射到一个或多个意图类别:

意图说明偏好能力
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.70
gpt-4o: coding=0.90 reasoning=0.88 creative=0.85 speed=0.85 cost=0.75
gemini-2.5-pro: coding=0.88 reasoning=0.90 creative=0.82 speed=0.82 cost=0.80
llama3.1-70b: coding=0.75 reasoning=0.70 creative=0.72 speed=0.90 cost=0.95

路由器将与意图相关的能力分数乘以 beta,生成最终分数的能力部分。

每个模型维护一个 Elo 评分,在每次请求后更新。当请求成功(用户接受响应,无需重试)时,模型 Elo 上升。当请求失败或在另一个模型上重试时,模型 Elo 下降。

这创造了一个自我修正的反馈循环:在实践中表现良好的模型在排名中上升,不受静态基准的限制。

路由器维护过去请求及其结果的嵌入索引。对于每个新请求,它找到 K 个最近的过去请求(按嵌入相似度),并检查哪些模型在类似输入上表现最好。

这对专业领域特别有价值——如果某个模型在你的环境中持续良好地处理 SQL 问题,路由器会学会在 SQL 相关请求中优先选择它。

Automix 是一种成本优化策略:

  1. 先将请求路由到更便宜的模型(如 Haiku、GPT-4o-mini)
  2. 评估响应置信度(基于模型自评、响应连贯性和输出质量信号)
  3. 如果置信度低于阈值,重新路由到高端模型(如 Opus、o3)
  4. 将高端响应返回给用户

这在简单请求上节省成本,同时在困难请求上保持质量。置信度阈值可调。

请求 ──→ 便宜模型 ──→ 置信度检查
≥ 阈值 → 返回便宜响应
< 阈值 → 重新路由到高端模型
→ 返回高端响应

路由器记录每个路由决策及其结果:

  • 选择了哪个模型及原因(分数分解)
  • 请求是否成功或被重试
  • 响应延迟和令牌数
  • 用户反馈信号(如有)

这些历史记录为 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 # 延迟惩罚
# Automix
automix_enabled = true
automix_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",
]