2026年 OpenClaw 多モデルルーティングと劣化チェーン実践:チャンネル/タスク分流、429 とタイムアウト fail-over、および ZoneMac リモート物理 Mac ゲートウェイでの再現可能な設定(openclaw.json 断片+FAQ)
ZoneMac の リモート物理 Mac ゲートウェイで OpenClaw を運用するチームは、単一の「ヒーローモデル」に対する 429 と 長文ストリーミングのタイムアウトの二重圧に直面しがちです。本稿は チャンネル/タスクタグによる分流、順序付きフォールバックチェーン、429 のバックオフとタイムアウト fail-over の切り分けを整理し、コピペ可能な openclaw.json 構造、意思決定表、七ステップ Runbook、引用用数値、FAQ をまとめます。
1. はじめにと対象
多モデルルーティングは「ベンダーを増やすため」ではなく、単一ゲートウェイを異なる入口負荷の下で安定させるための設計です。外向きには OpenAI 互換など一つの契約を出し、チャンネル(Telegram、Slack、内部 API)とタスク種別(チャット、バッチ要約、CI コメントボット)でコスト/レイテンシのプロファイルを選び、上流が揺れたときは順序付きフォールバックチェーンで吸収します。
ゲートウェイのプロセスと最小チャットリクエストが既に動いている前提です。リージョン配置や低遅延ノードの選び方は 2026年グローバル展開ガイド|地域別・最適なmacOSノードの選び方 を、マルチリージョンで Runner と成果物ルーティングを詰める場合は XCTest 分片とマルチリージョン物理 Mac の Runner ルーティング と併読すると前提が揃います。
2. つまずきポイント
- 「全員同一モデル」の裏にある上限。高価なモデルを全チャンネルで共有するとピーク時の 429 が全体停止に見えます。インタラクティブとバッチ、外向きと内部でプロファイルと同時実行枠を分けます。
- 429 とタイムアウトの混同コスト。429 は
Retry-Afterとクォータ尊重が中心です。読み取りタイムアウトや TLS 失敗はフォールバックのホップやストリームアイドル上限の調整向きです。「3 回リトライ」だけの汎用ポリシーはキューを遅らせ、原因も曖昧にします。 - 設定の監査可能性。リモート物理 Mac では未レビューの
openclaw.json編集が既定プロファイルを壊したり、フォールバック順と財務のコストモデルとずれたりします。プロファイルに名前を付け、主/従の順を文書化し、オーナーを Runbook に記します。
3. 意思決定マトリクス(次元 × 戦略)
ロールアウト前に合意する表です。左は誘惑のショートカット、右は無難なベースラインです。
| 次元 | 危険なショートカット | 推奨ベースライン |
|---|---|---|
| チャンネル分流 | 全チャンネル同一モデル | 高頻度・低感度チャンネルは速い/安いプロファイル、顧客向けサポートは品質優先 |
| タスクタグ | メッセージ長だけのヒューリスティック | ci、support など明示タグでルータがプロファイルを選択 |
| フォールバックチェーン | 失敗時にランダムなモデル | コストが単調非増となる固定の順序付きリスト。ホップごとに構造化理由をログ |
| 429 | 即座に同一モデルへ再試行 | バックオフ+Retry-After。必要ならグローバル同時実行を下げる |
| タイムアウト/ストリームアイドル | 接続タイムアウトだけ調整 | 接続/読み取り/ストリームアイドルを分割。失敗時は無限リトライではなくチェーンを進める |
| デプロイ形 | アプリと同居のみ、第二インスタンス無し | 裸機または Compose+ヘルスプローブ。Docker と裸機のトレードオフと第二系計画を Runbook に記載 |
4. 再現可能な openclaw.json 断片
以下は構造の例示です。キー名は利用中の OpenClaw バージョンのドキュメントに合わせ、既存ファイルにマージし、本番専用のパス(チャンネル、資格情報参照)を上書きしないでください。必ずバックアップを取ります。
4.1 ルータのプロファイル、チャンネル、タスクタグ
{
"gateway": {
"router": {
"defaultProfile": "balanced",
"profiles": {
"fast": {
"primaryModel": "gpt-4o-mini",
"fallbackChain": ["claude-3-5-haiku", "local-qwen-14b"]
},
"balanced": {
"primaryModel": "gpt-4.1",
"fallbackChain": ["gpt-4o", "gpt-4o-mini"]
},
"quality": {
"primaryModel": "gpt-4.1",
"fallbackChain": ["claude-3-5-sonnet", "gpt-4o"]
}
},
"routeByChannel": {
"telegram": { "profile": "fast" },
"slack_public": { "profile": "balanced" },
"api_internal": { "profile": "quality" }
},
"routeByTaskTag": {
"ci": { "profile": "fast" },
"support": { "profile": "quality" },
"ops_summary": { "profile": "balanced" }
}
}
}
}
4.2 上流リトライ、429、タイムアウト
{
"gateway": {
"upstream": {
"http": {
"maxRetries": 4,
"retryOnStatus": [408, 409, 425, 429, 500, 502, 503, 504],
"respectRetryAfter": true,
"backoff": { "baseMs": 400, "maxMs": 8000, "jitter": 0.2 }
},
"circuitBreaker": {
"errorRateThreshold": 0.35,
"minSampleSize": 40,
"openDurationMs": 60000
},
"timeouts": {
"connectMs": 8000,
"requestMs": 180000,
"streamIdleMs": 240000
},
"failover": {
"onTimeout": "nextInFallbackChain",
"on429": "retryWithBackoffThenFallback",
"maxFallbackHops": 3
}
}
}
}
streamIdleMs はストリーミングでトークン間が空く長いギャップ向けです。on429 と onTimeout を分けておくと、ログとダッシュボードで SLO を別々に追えます。Prometheus/Grafana にフォールバック深度と 429 率をエクスポートし、別アラートにしてください。
5. 七ステップ Runbook(リモート物理 Mac)
- トラフィック次元の固定。プロダクト/運用とチャンネル ID・タスクタグ列挙を揃え、無名のデフォルトに静かに落ちないようにします。
- JSON のバックアップ。
cp openclaw.json openclaw.json.bak.$(date +%Y%m%d%H%M)。差分をチケットに添付します。 - router ブロックのマージ。先に
profilesとfallbackChain、続けてrouteByChannel/routeByTaskTag。 - ローカルゴールデンリクエスト。各プロファイルで固定の curl(または最小 SDK)を
127.0.0.1に打ち、モデル ID とレイテンシを記録します。 - 二種類の故障注入。モックやスロットルで 429 と、別途 time-to-first-byte の遅延を再現。429 はバックオフでチェーン全体を3試行で燃やさず、タイムアウトはチェーンを進めることを確認します。
- 可観測性の配線。プロファイル別リクエスト数、429 率、フォールバック深度分布、読み取りタイムアウト率を最低限エクスポートし、既存の Prometheus/Grafana Runbook の閾値と揃えます。
- アーカイブとレビュー。JSON 断片、ゴールデンコマンド、ロールバック(bak 復元+リロード)を社内ドキュメントの隣にチェックインします。
6. 429 とタイムアウトの切り分け
| 症状 | 想定原因 | アクション |
|---|---|---|
| HTTP 429(Retry-After あり) | 上流クォータまたはテナント制限 | スリープして同一モデルを再試行、グローバル同時実行を下げ、その後フォールバックチェーンへ |
| HTTP 429(Retry-After なし) | エッジ/WAF または非準拠の上流 | 指数バックオフし request_id をログ。直上流とゲートウェイ経由を比較 |
| 接続タイムアウト | 経路、DNS、トンネル断 | Tailscale/リバプロの健全性を確認。接続失敗は長いバックオフよりフォールバックホップ向き |
| 初トークンは遅いが以降は正常 | コールドスタートまたはキュー詰まり | 接続/リクエスト上限を引き上げ。バッチは短いプリアンブルでウォーム |
| 生成途中でストリームが止まる | 読み取りタイムアウトまたはストリームアイドルが短い | streamIdleMs とプロキシの SSE タイムアウトを引き上げ。429 とは別扱い |
7. 引用しやすい数値(Runbook 用)
- バックオフ初動:
baseMs: 400、maxMs: 8000を 429 の第一近似に。商用 QPS 上限と突き合わせる。 - ストリームアイドル:
streamIdleMs: 240000(4 分)は長文回答向け。短くすると対話チャットがキビキビする。 - フォールバック上限:
maxFallbackHops: 3でレイテンシ爆発を防ぎ、超えたら明示エラーとページ。
8. FAQ
フォールバック先モデルは出力形が揃っている必要がありますか?
同じ「ツール呼び出し/JSON モード」帯を優先。家族をまたぐならアプリ側で形式失敗を処理し、トークン単位の一致は期待しない。
越境の ZoneMac ノードはタイムアウトを増幅しますか?
はい。クライアント→ゲートウェイとゲートウェイ→上流の RTT を別々に測り、上流出口に近い場所にゲートウェイを置くか、そのプロファイルで requestMs を上げます。越境 RTT はストリームアイドルとリクエスト上限の一次入力です。
ユーザー単位のレート制限は?
OpenClaw の手前に API ゲートウェイや小さなミドルウェアでトークンバケツを。OpenClaw 内のプロファイル同時実行と二重にポリシーを持たないよう役割を分けます。
9. まとめとノード選び
多モデルルーティングは、コスト・レイテンシ・可用性を監査可能な契約に落とし込みます。チャンネルとタスクがプロファイルを選び、429 と タイムアウトは別の fail-over 意味を持ち、順序付きチェーンが上流の揺らぎに対する最後の予測可能性を与えます。
ZoneMac の リモート物理 Mac 上でゲートウェイを動かすと、その経路は長寿命・低ジッタな Unix ホストに固定されます。ネイティブのターミナルと SSH、launchd による常駐、macOS ツールチェーンとの整合が、環境ドリフト由来の謎タイムアウトを減らします。Apple Silicon のユニファイドメモリは、オンボックスのバックアップ用小モデルも現実的にします。Mac mini M4 は待機電力おおよそ 4W 級、静音、安定した macOS で 7×24 のゲートウェイ足回りに向きます。Gatekeeper と SIP は露出したサービス面の運用でも安心材料になります。
このルーティングスタックを予測可能なハード上で、運用負荷を抑えて載せたいなら Mac mini M4 はコストパフォーマンスの良い出発点です。ZoneMac でリモート物理 Mac を確保し、再現可能なゲートウェイ設定の上に多モデルトラフィックを載せてください。
OpenClaw 多モデルルーティング向けリモート物理 Mac が必要ですか?
ZoneMac の Mac mini クラウドレンタルなら、ゲートウェイとツールチェーンを実機上に置き、openclaw.json と可観測性のループを閉じられます。