多模型路由与负载均衡
单一模型是瓶颈:一旦提供商限速或宕机,整个系统即崩溃。多模型路由让你在多个模型和提供商之间动态分流,兼顾成本、性能与可用性。
路由架构总览
graph TB
CLIENT[客户端请求] --> ROUTER[智能路由层]
ROUTER --> STRATEGY{路由策略}
STRATEGY -->|按成本| CHEAP[GPT-4o-mini / Gemini Flash]
STRATEGY -->|按能力| CAPABLE[GPT-4o / Claude 3.5]
STRATEGY -->|按延迟| FAST[本地部署模型]
STRATEGY -->|故障转移| FALLBACK[备用提供商]
CHEAP --> LB1[负载均衡器 A]
CAPABLE --> LB2[负载均衡器 B]
FAST --> LB3[负载均衡器 C]
LB1 --> P1[OpenAI]
LB1 --> P2[Azure OpenAI]
LB2 --> P3[Anthropic]
LB2 --> P4[Google Gemini]
LB3 --> P5[vLLM 集群]
style ROUTER fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
style STRATEGY fill:#fff3e0,stroke:#f57c00,stroke-width:2px
路由策略对比
| 策略 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 轮询(Round-Robin) | 同质模型集群 | 实现简单、分布均匀 | 忽略模型差异 |
| 加权轮询 | 不同配额的提供商 | 按配额分配 | 权重需手动维护 |
| 最低延迟 | 实时交互场景 | 用户体验好 | 可能集中打热点 |
| 基于能力路由 | 混合任务类型 | 任务与模型匹配 | 需任务分类 |
| 故障转移 | 高可用要求 | 自动容灾 | 不同模型响应不一致 |
| 成本优先 | 批处理任务 | 显著降低费用 | 质量可能略低 |
LiteLLM 路由配置示例
# litellm_config.yaml
model_list:
- model_name: gpt-4o
litellm_params:
model: openai/gpt-4o
api_key: os.environ/OPENAI_API_KEY
tpm: 300000 # 每分钟 Token 上限
- model_name: gpt-4o
litellm_params:
model: azure/gpt-4o-prod
api_base: https://my-azure.openai.azure.com
api_key: os.environ/AZURE_API_KEY
tpm: 200000
- model_name: cheap-model
litellm_params:
model: openai/gpt-4o-mini
api_key: os.environ/OPENAI_API_KEY
tpm: 1000000
router_settings:
routing_strategy: least-busy # 最低繁忙度
fallbacks:
- gpt-4o: [azure/gpt-4o-prod] # 故障转移
num_retries: 3
retry_after: 5
timeout: 30
智能任务分类路由
import re
TASK_ROUTING = {
"simple": "gpt-4o-mini", # 问答、摘要、简单分类
"complex": "gpt-4o", # 推理、代码生成、长文档
"realtime": "local-llama", # 延迟敏感、隐私要求高
}
def classify_and_route(prompt: str, max_tokens: int) -> str:
# 简单任务判断:短 prompt + 少量输出
if len(prompt) < 500 and max_tokens < 200:
return TASK_ROUTING["simple"]
# 含代码或复杂推理关键词
if re.search(r"(代码|算法|推理|分析报告|数学)", prompt):
return TASK_ROUTING["complex"]
# 默认中等任务
return TASK_ROUTING["simple"]
健康检查与熔断
stateDiagram-v2
[*] --> 正常
正常 --> 半开 : 错误率 > 阈值 / 超时累积
半开 --> 正常 : 探测请求成功
半开 --> 熔断 : 探测请求失败
熔断 --> 半开 : 冷却时间(30s)到期
关键参数参考值:
- 错误率阈值:连续 5 次失败或 30 s 内错误率 > 30%
- 熔断冷却:30 秒后自动进入半开状态
- 健康检查间隔:每 10 秒对每个提供商发送轻量探针请求
行动清单
- [ ] 为关键业务至少配置 2 个提供商,实现故障转移
- [ ] 按任务类型(简单/复杂/实时)设计路由规则
- [ ] 为每个提供商配置 TPM/RPM 速率限制防止超限
- [ ] 实现熔断器,避免故障级联
- [ ] 监控各提供商的错误率、延迟和成本占比
- [ ] 定期回顾路由日志,优化任务分类准确率
- [ ] 为跨提供商不一致响应制定 fallback 处理策略