マルチベンダーの混在スタック:Opus が計画し、Qwen / DeepSeek が実行
エージェントの役割ごとに異なるベンダーのトップモデルを固定します。計画は Anthropic の Opus のまま、実行は Qwen3.8-Max / DeepSeek V4.1 Flash へ。クライアントの変更はゼロで、クロスプロトコル翻訳は自動です。
コミュニティが実際に不満を言っていること
Claude Code を Claude Opus でエンドツーエンドに動かすと高すぎます。一律に Sonnet へ落とすと計画やアーキテクチャ判断が目に見えて劣化し、手戻りのコストが増えます。開発者は他ベンダーのトップモデル(Qwen、DeepSeek)を混ぜたいのですが、クライアントは Anthropic プロトコルと claude-* のモデル名しか話せず、設定変更は全開発マシンに及ぶことになります。
さらに、計画ループ、メインの実行ループ、バッチのサブタスクでは、能力と価格に対する要件が本当に異なります。クライアント側の単一のモデル切り替えでは対応できません。
GateLLM の実現方法
GateLLM はイングレスゲートの後、ルーティングの前に、ID に基づいてモデル名を書き換えます。クライアントの変更はゼロです。計画とアーキテクチャ判断は claude-opus-5 のまま Anthropic へ直接向かい、メインの実行ループの claude-sonnet-* は DashScope の qwen3.8-max にマッピングされ、バッチのサブタスク(整形、コミットメッセージ、検索要約)は OpenAI 互換アップストリーム経由で deepseek-flash にマッピングされます。クロスプロトコル翻訳はゲートウェイが処理し、SSE ストリームと tool_call_id は往復で保持されます。
ルールはアクセスキーまたはキーグループに紐付き、チーム単位で有効になります。エグレスゲートは、対象がその ID の許可リストにあることを検証します。マッピングの設定は権限の付与ではありません。
実際に効果が出る 5 つのレバー
- ID スコープのモデルマッピング:アクセスキー / キーグループに from → to を設定し、イングレス後・ルーティング前に書き換え。中間セグメントを捕捉する単一の * に対応し、ホットリロードされます
- クロスプロトコル翻訳:Claude Code は Anthropic、Codex / OpenAI SDK は OpenAI で、ゲートウェイが DashScope / OpenAI / Gemini / Bedrock のアップストリームへ翻訳します。長時間の推論では :keep-alive、ストリーム断では _gateway_warning を付与
- リクエストヘッダーによる条件付きルーティング:同じ from を X-Tenant などで異なる対象へ(完全一致 / 前方一致 / 正規表現 / 存在 / 不在)。条件付きルールを先に、無条件をフォールバックにし、最初の一致を採用。カナリアにも使えます
- プランモード検出:Claude Code のプランモードは Plan mode is active / Exited Plan Mode のマーカーを挿入します。最後の位置を比較するスクリプトがルーティングを切り替え、計画は Opus、実行はコスト効率の良いモデルへ
- 権限と可観測性:エグレスゲートが対象の許可リストを検証し(マッピング ≠ 権限)、ログのモデル列に MM タグとホバー時の元 → マッピング後を表示。統計と課金はマッピング後の実際のモデル名で配賦するため、混在スタックのコストを一目で比較できます