深色模式
多模型路由与降级
摘要:多模型是 LLM 生产环境的常态:旗舰模型兜底质量、轻量模型摊薄成本、国产/自托管模型满足合规。本文讲网关层路由与降级的工程实现:按什么维度路由、如何配置 fallback 与 cooldown、灰度切换如何做、以及与语义缓存的联动。前置阅读:LLM 网关架构与价值。示例以 LiteLLM 配置为主,思路适用于 Higress/Kong。
路由维度
| 维度 | 依据 | 典型用途 |
|---|---|---|
| 模型能力 | 任务类型标签(调用方声明) | 复杂推理走旗舰,简单摘要走轻量 |
| 成本 | 模型单价 × 预计 token | 同能力档位内选便宜者 |
| 延迟 | 实时 TTFT 观测 | 延迟敏感场景避开慢 provider |
| 可用性 | 健康检查 + 错误率 | 摘除异常上游 |
| 合规/数据边界 | 租户属性 | 特定租户流量只进境内模型 |
路由决策发生在请求进入网关时,依据优先级建议:合规约束 > 调用方指定 > 能力匹配 > 成本/延迟。路由规则必须可配置化(配置中心热更新),避免每次调优都要发版。
LiteLLM 路由配置要点
python
from litellm import Router
router = Router(
model_list=[
{"model_name": "gpt-4o", "litellm_params": {"model": "openai/gpt-4o", "api_key": "..."}},
{"model_name": "gpt-4o", "litellm_params": {"model": "azure/gpt-4o", "api_key": "..."}}, # 同名多部署 → 自动负载均衡
{"model_name": "claude-sonnet", "litellm_params": {"model": "anthropic/claude-sonnet"}},
],
routing_strategy="latency-based-routing", # 或 simple-shuffle / cost-based-routing
fallbacks=[
{"gpt-4o": ["claude-sonnet"]}, # gpt-4o 全部部署失败 → 降级到 claude
],
context_window_fallbacks=[{"gpt-4o": ["claude-sonnet"]}], # 上下文超限降级
cooldown_time=60, # 部署连续失败后冷却秒数
allowed_fails=3, # 连续失败 N 次触发 cooldown
num_retries=2,
)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
三个关键机制:
- 同组负载均衡:
model_name相同的多个部署(多区域/多账号)自动分流,是绕开单账号限流的第一手段; - cooldown:某部署连续失败后摘除一段时间,避免把流量持续打向故障上游;
- fallback 链:整组失败才降级到其他模型。注意 fallback 目标的能力差异要提前评测,避免降级后质量塌方无人知晓(质量监控见 质量与幻觉监控)。
降级设计的完整链路
工程要求:
- 降级必须可观测:
degraded标签进指标与 trace,降级流量占比 > 5% 触发告警——降级常态化 = 质量在裸奔; - 重试要节制:LLM 重试是双倍成本,只对幂等且可识别为暂时性错误的场景重试(429、5xx),且限制次数与预算;
- 上下文长度边界:超长输入换模型前先检查 fallback 模型的上下文窗口,否则只是换一种失败。
灰度与切换
换模型(如新版本上线、厂商迁移)按流量灰度进行:
- 网关按百分比把流量导到新模型(weight 配置),配合 质量与幻觉监控 的抽样评估观察新旧版本质量差异;
- 回滚 = 调回权重,秒级生效——这是"路由配置化"最直接的收益。
常见事故
灰度期间新旧模型响应 schema 不一致(如 JSON mode 的字段差异)导致下游解析批量失败。切换前必须用评测集验证输出格式兼容性,并在解析层做兼容兜底。
与语义缓存的联动
路由解决"请求发给谁",语义缓存解决"请求要不要发出去":相似问题命中缓存直接返回,成本降为 0。两者组合时注意缓存 Key 应包含路由结果中的模型档位,避免"旗舰模型的答案被轻量模型的请求命中"造成质量错配。缓存策略与限流细节见 限流与配额。