前言
OpenClaw 的一大优势在于能够同时接入多个 AI 模型提供商——Claude、OpenAI、Ollama、Gemini、OpenRouter 等。通过灵活的路由规则,你可以实现按频道分配模型、按关键词匹配模型、故障自动降级等高级功能。本文将详细介绍多模型切换和路由配置的方法。
配置多个模型提供商
在 openclaw.json5 的 models.providers 中配置多个提供商:
{
models: {
// 默认使用的提供商
default: "claude",
providers: {
// Anthropic Claude
claude: {
apiKey: "$env:OPENCLAW_CLAUDE_API_KEY",
model: "claude-sonnet-4-20250514",
maxTokens: 4096,
temperature: 0.7,
},
// 高级 Claude 模型(用于复杂任务)
"claude-opus": {
apiKey: "$env:OPENCLAW_CLAUDE_API_KEY",
model: "claude-opus-4-20250514",
maxTokens: 4096,
temperature: 0.5,
},
// OpenAI
openai: {
apiKey: "$env:OPENCLAW_OPENAI_API_KEY",
model: "gpt-4o",
maxTokens: 4096,
temperature: 0.7,
},
// 本地 Ollama(免费,无需 API 密钥)
ollama: {
baseUrl: "http://localhost:11434",
model: "llama3.1:70b",
maxTokens: 2048,
temperature: 0.8,
},
// Google Gemini
gemini: {
apiKey: "$env:OPENCLAW_GEMINI_API_KEY",
model: "gemini-2.0-flash",
maxTokens: 4096,
},
// OpenRouter(聚合多家模型)
openrouter: {
apiKey: "$env:OPENCLAW_OPENROUTER_API_KEY",
model: "anthropic/claude-sonnet-4-20250514",
baseUrl: "https://openrouter.ai/api/v1",
},
},
},
}
你可以为同一提供商配置多个实例(如上方的 claude 和 claude-opus),使用不同的模型名称。
手动切换模型
配置完成后,用户可以在聊天中通过命令切换当前使用的模型:
/model claude → 切换到 Claude Sonnet
/model claude-opus → 切换到 Claude Opus
/model openai → 切换到 GPT-4o
/model ollama → 切换到本地 Ollama
/model list → 查看所有可用模型
/model reset → 恢复默认模型
模型路由规则
路由规则让 OpenClaw 根据条件自动选择最合适的模型。
基本路由配置
{
models: {
default: "claude",
providers: { /* ... */ },
routing: {
// 路由规则(按优先级从高到低排列)
rules: [
{
name: "代码任务用 Claude Opus",
match: {
keywords: ["写代码", "编程", "debug", "代码审查", "code"],
},
provider: "claude-opus",
},
{
name: "翻译任务用 Gemini",
match: {
keywords: ["翻译", "translate", "英译中", "中译英"],
},
provider: "gemini",
},
{
name: "日常闲聊用本地模型",
match: {
keywords: ["聊天", "闲聊", "你好", "哈哈"],
},
provider: "ollama",
},
],
// 没有匹配到任何规则时的默认提供商
fallback: "claude",
},
},
}
按频道路由
为不同的通讯频道指定不同的模型:
{
models: {
routing: {
rules: [
{
name: "Telegram 使用 Claude",
match: {
channel: "telegram",
},
provider: "claude",
},
{
name: "Discord 使用 GPT-4o",
match: {
channel: "discord",
},
provider: "openai",
},
{
name: "Slack 工作群使用 Claude Opus",
match: {
channel: "slack",
},
provider: "claude-opus",
},
{
name: "WhatsApp 使用 Gemini(省钱)",
match: {
channel: "whatsapp",
},
provider: "gemini",
},
],
fallback: "claude",
},
},
}
按用户路由
为特定用户指定模型:
{
models: {
routing: {
rules: [
{
name: "VIP 用户使用 Opus",
match: {
users: ["user_001", "user_002"],
},
provider: "claude-opus",
},
{
name: "普通用户使用 Sonnet",
match: {
users: ["*"], // 通配符匹配所有用户
},
provider: "claude",
},
],
},
},
}
按时间路由
在不同时间段使用不同模型(例如夜间使用更便宜的模型):
{
models: {
routing: {
rules: [
{
name: "工作时间用高级模型",
match: {
timeRange: {
start: "09:00",
end: "18:00",
timezone: "Asia/Shanghai",
weekdays: [1, 2, 3, 4, 5], // 周一到周五
},
},
provider: "claude-opus",
},
{
name: "非工作时间用经济模型",
match: {
timeRange: {
start: "18:00",
end: "09:00",
timezone: "Asia/Shanghai",
},
},
provider: "gemini",
},
],
},
},
}
组合条件
你可以组合多个条件,它们之间是 AND 关系:
{
name: "Slack 的代码任务用 Opus",
match: {
channel: "slack",
keywords: ["代码", "code", "debug"],
},
provider: "claude-opus",
},
故障降级链
当主模型不可用时,OpenClaw 可以自动切换到备用模型。
{
models: {
default: "claude",
providers: { /* ... */ },
// 故障降级链
fallbackChain: [
"claude", // 首选
"openai", // 第一备选
"gemini", // 第二备选
"ollama", // 最终兜底(本地模型,永远可用)
],
// 降级触发条件
fallbackPolicy: {
// 连续失败多少次后触发降级
maxFailures: 3,
// 降级后等待多久再尝试恢复
recoveryInterval: 300, // 秒
// 超时时间(超过则视为失败)
timeout: 30000, // 毫秒
// 触发降级时的通知方式
notification: {
enabled: true,
message: "模型 {provider} 不可用,已自动切换到 {fallback}",
},
},
},
}
降级流程说明
用户发送消息
├─ 尝试 Claude → 成功 → 返回回复
│ 失败 ↓
├─ 尝试 OpenAI → 成功 → 返回回复
│ 失败 ↓
├─ 尝试 Gemini → 成功 → 返回回复
│ 失败 ↓
└─ 尝试 Ollama → 成功 → 返回回复(本地模型)
失败 → 返回错误提示
负载均衡
当你有多个相同模型的 API 密钥时,可以配置负载均衡:
{
models: {
providers: {
"claude-pool": {
type: "pool",
strategy: "round-robin", // round-robin, random, least-used
instances: [
{
apiKey: "sk-ant-key-1",
model: "claude-sonnet-4-20250514",
weight: 1,
},
{
apiKey: "sk-ant-key-2",
model: "claude-sonnet-4-20250514",
weight: 1,
},
{
apiKey: "sk-ant-key-3",
model: "claude-sonnet-4-20250514",
weight: 2, // 权重更高,分配更多请求
},
],
},
},
},
}
负载均衡策略说明:
| 策略 | 说明 |
|---|---|
round-robin |
轮询,依次使用每个实例 |
random |
随机选择(按权重) |
least-used |
选择当前使用量最少的实例 |
成本控制
当使用多个付费模型时,可以配置成本预警和限制:
{
models: {
costControl: {
// 每日预算(美元)
dailyBudget: 10.0,
// 每月预算
monthlyBudget: 200.0,
// 达到预算时的操作
onBudgetReached: "switch-to-free", // switch-to-free, warn, block
// 免费/低成本模型
freeProvider: "ollama",
// 预警阈值(达到预算的百分比时发送通知)
warningThreshold: 0.8,
},
},
}
查看模型使用统计
在 Dashboard 中可以查看各模型的使用情况。也可以通过命令行查看:
# 打开 Dashboard
openclaw dashboard
# 查看当前配置的所有模型
openclaw skill list
Dashboard 地址:http://localhost:18789/dashboard,在统计页面可以看到:
- 各模型的调用次数
- 各模型的平均响应时间
- Token 使用量
- 费用估算
- 降级事件记录
完整配置示例
以下是一个包含多模型路由、降级和成本控制的完整配置:
{
gateway: {
port: 18789,
host: "0.0.0.0",
},
models: {
default: "claude",
providers: {
claude: {
apiKey: "$env:OPENCLAW_CLAUDE_API_KEY",
model: "claude-sonnet-4-20250514",
maxTokens: 4096,
},
openai: {
apiKey: "$env:OPENCLAW_OPENAI_API_KEY",
model: "gpt-4o",
maxTokens: 4096,
},
ollama: {
baseUrl: "http://localhost:11434",
model: "llama3.1",
},
},
routing: {
rules: [
{
name: "Slack 用 Claude",
match: { channel: "slack" },
provider: "claude",
},
{
name: "闲聊用本地模型",
match: { keywords: ["聊天", "闲聊"] },
provider: "ollama",
},
],
fallback: "claude",
},
fallbackChain: ["claude", "openai", "ollama"],
costControl: {
dailyBudget: 5.0,
monthlyBudget: 100.0,
onBudgetReached: "switch-to-free",
freeProvider: "ollama",
},
},
}
总结
OpenClaw 的多模型架构让你不必绑定在单一 AI 提供商上。通过灵活的路由规则,你可以根据任务类型、通讯频道、用户身份甚至时间段来智能分配模型。配合故障降级链,即使某个提供商宕机,你的 AI 助手也能持续服务。建议从简单配置开始,根据实际使用情况逐步添加路由规则和降级策略。