"凌晨3点17分,Claude API突然返回503。
如果我的Agent只会傻等重试——那是我设计有问题。
真正的生产级Agent,应该像变色龙一样,环境变了,它自己就切换了。
多模型路由,就是Agent的变色能力。"
🎯 为什么需要多模型路由?
3 AM Rule 的反面教材:
❌ 凌晨3点Claude API挂了 → Agent无限重试 → 任务失败
✅ 凌晨3点Claude API挂了 → 自动切换GPT-5 → 任务继续
结论:单一模型 = 单点故障。多模型路由 = 韧性系统。
❌ 凌晨3点Claude API挂了 → Agent无限重试 → 任务失败
✅ 凌晨3点Claude API挂了 → 自动切换GPT-5 → 任务继续
结论:单一模型 = 单点故障。多模型路由 = 韧性系统。
🏗️ 路由架构
┌─────────────────────────────────────────────┐
│ OpenClaw Gateway │
│ 模型路由器 (Model Router) │
└──────────────┬────────────────────────────────┘
│ 请求进来
▼
┌──────────────────────┐
│ 路由决策引擎 │
│ - 成本最低优先 │
│ - 性能最优优先 │
│ - 特定任务指定 │
└──────┬───────────────┘
│
┌──────▼───────────────────────────┐
│ 模型池 (Model Pool) │
│ ┌─────────┐ ┌─────────┐ │
│ │ Claude │ │ GPT-5 │ │
│ │ (主模型) │ │ (备用1) │ │
│ └────┬────┘ └────┬────┘ │
│ │ │ │
│ ┌────▼────┐ ┌────▼────┐ │
│ │DeepSeek │ │Gemini │ │
│ │ (备用2) │ │ (备用3) │ │
│ └─────────┘ └─────────┘ │
└──────┬──────────────────────────┘
│ 如果主模型失败
▼
┌──────────────────────┐
│ 自动容灾 (Fallback) │
│ 按优先级自动切换 │
└──────────────────────┘
🛠️ 配置多模型路由
Step 1: 配置多个Provider
# config.yaml
llm_providers:
- name: anthropic-prod
type: anthropic
api_key: "${ANTHROPIC_KEY}"
models:
- claude-opus-4-7
- claude-sonnet-4
priority: 1
timeout: 30
- name: openai-prod
type: openai
api_key: "${OPENAI_KEY}"
models:
- gpt-5-turbo
- gpt-55
priority: 2
timeout: 30
- name: deepseek-prod
type: deepseek
api_key: "${DEEPSEEK_KEY}"
models:
- deepseek-v3
priority: 3
timeout: 30
- name: gemini-prod
type: google
api_key: "${GEMINI_KEY}"
models:
- gemini-2.5-pro
priority: 4
timeout: 30
Step 2: 配置路由规则
model_routing:
# 默认路由策略
default:
strategy: "priority" # priority | cost | performance
fallback_enabled: true
max_retries: 3
retry_delay: 5
# 特定任务路由
tasks:
- pattern: "code.*"
provider: "anthropic-prod"
model: "claude-opus-4-7"
fallback_providers:
- "deepseek-prod"
- pattern: "seo.*|content.*"
provider: "openai-prod"
model: "gpt-5-turbo"
fallback_providers:
- "gemini-prod"
- "deepseek-prod"
- pattern: ".*"
provider: "anthropic-prod"
fallback_providers:
- "openai-prod"
- "deepseek-prod"
- "gemini-prod"
Step 3: 成本优化策略
cost_optimization:
enabled: true
max_cost_per_day: 50.0 # 每天最多花50美元
strategy: "cheapest_until_fail" # cheapest | round_robin
# 成本阈值自动切换
cost_thresholds:
- limit: 10.0
action: "switch_to"
provider: "deepseek-prod" # 超过10刀切换到便宜的
# 含虾率保护(不为了省钱牺牲质量)
shrimp_rate_floor: 70 # 含虾率低于70%不切换
💡 实战:凌晨3点容灾测试
3 AM Rule 验证: 模拟主模型故障,验证自动切换
# 在凌晨3点执行容灾测试
openclaw cron add \
--name "3AM容灾测试" \
--schedule "0 3 * * *" \
--task "
1. 临时禁用Claude API(模拟故障)
export ANTHROPIC_API_KEY=invalid_key
2. 执行RSS聚合任务
openclaw task run rss-aggregation
3. 验证是否自动切换到GPT-5
grep 'Using fallback provider: openai-prod' /var/log/openclaw.log
4. 恢复Claude API
export ANTHROPIC_API_KEY=valid_key
5. 验证是否自动切回
grep 'Switching back to primary' /var/log/openclaw.log
" \
--notify-on-success feishu://group/oc_c942dfd09730eb94bf838c6519c115e9
📊 妙趣AI实际路由数据
| 模型 | 使用占比 | 平均响应时间 | 含虾率 | 成本/1k tokens |
|---|---|---|---|---|
| Claude Opus 4.7 | 60% | 2.3s | 82% | $0.015 |
| GPT-5 Turbo | 25% | 1.8s | 79% | $0.012 |
| DeepSeek V3 | 10% | 1.5s | 75% | $0.002 |
| Gemini 2.5 Pro | 5% | 2.1s | 76% | $0.008 |
成本节省:通过智能路由,相比全部使用Claude节省约35%成本。
⚠️ 常见坑
⚠️ 坑1:切换后输出格式不兼容
不同模型的输出格式可能有差异
✅ 解决:使用结构化输出(JSON Mode),并在Fallback时验证格式
⚠️ 坑2:成本失控
自动切换后可能一直用贵的模型
✅ 解决:设置每日成本上限,超过后强制切换到便宜模型
⚠️ 坑3:含虾率下降
备用模型质量不如主模型
✅ 解决:设置含虾率底线,低于阈值即使贵也要切回主模型
不同模型的输出格式可能有差异
✅ 解决:使用结构化输出(JSON Mode),并在Fallback时验证格式
⚠️ 坑2:成本失控
自动切换后可能一直用贵的模型
✅ 解决:设置每日成本上限,超过后强制切换到便宜模型
⚠️ 坑3:含虾率下降
备用模型质量不如主模型
✅ 解决:设置含虾率底线,低于阈值即使贵也要切回主模型
🔗 相关组件
- 含虾率框架 — 路由切换的质量保护
- 3 AM Rule — 容灾测试标准
- 成本优化指南 — 多模型成本控制
- Model Router详解 — 路由引擎配置