ホーム チュートリアル カテゴリ Skills サイトについて
ZH EN JA KO
基本設定

OpenClawマルチモデル切り替えとルーティング設定ガイド

· 17 分で読了

はじめに

OpenClaw の大きな強みの一つは、Claude、OpenAI、Ollama、Gemini、OpenRouter など複数のAIモデルプロバイダに同時に接続できることです。柔軟なルーティングルールにより、チャネル別のモデル割り当て、キーワードによるモデルマッチング、障害時の自動フォールバックなどの高度な機能を実現できます。本記事では、マルチモデル切り替えとルーティング設定の方法を詳しく解説します。

複数のモデルプロバイダの設定

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。統計ページでは以下が確認できます。

  • 各モデルの呼び出し回数
  • 各モデルの平均応答時間
  • トークン使用量
  • コスト見積もり
  • フォールバックイベントの記録

完全な設定例

以下は、マルチモデルルーティング、フォールバック、コスト管理を含む完全な設定例です。

{
  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プロバイダに縛られることがなくなります。柔軟なルーティングルールを使って、タスクの種類、通信チャネル、ユーザーのID、さらには時間帯に基づいてインテリジェントにモデルを割り当てることができます。障害時のフォールバックチェーンと組み合わせることで、特定のプロバイダがダウンしても、AIアシスタントはサービスを継続できます。シンプルな設定から始めて、実際の使用状況に応じてルーティングルールとフォールバック戦略を段階的に追加していくことをお勧めします。

OpenClawは無料のオープンソースAIアシスタント。WhatsApp、Telegram、Discordなど多数のプラットフォームに対応