首页 教程 分类 Skills下载 关于
ZH EN JA KO
基础配置

OpenClaw多模型切换和路由配置教程

· 15 分钟

前言

OpenClaw 的一大优势在于能够同时接入多个 AI 模型提供商——Claude、OpenAI、Ollama、Gemini、OpenRouter 等。通过灵活的路由规则,你可以实现按频道分配模型、按关键词匹配模型、故障自动降级等高级功能。本文将详细介绍多模型切换和路由配置的方法。

配置多个模型提供商

openclaw.json5models.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",
      },
    },
  },
}

你可以为同一提供商配置多个实例(如上方的 claudeclaude-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 助手也能持续服务。建议从简单配置开始,根据实际使用情况逐步添加路由规则和降级策略。

OpenClaw 是开源免费的个人AI助手,支持 WhatsApp、Telegram、Discord 等多平台接入