多模型路由的目標不是「堆更多供應商」,而是讓同一閘道在不同入口壓力下仍能給出穩定回應:對外以統一契約(例如 OpenAI 相容路徑)暴露,對內依頻道(Telegram/Slack/站內 API)與任務類型(互動對話、批次摘要、CI 評論機器人)選擇成本與延遲 profile,並在上游抖動時以降級鏈兜底。
本文預設你已能在 Mac 上跑通閘道程序與最小 chat 請求;若尚未完成安裝,請先跟隨 了解更多:2026年 OpenClaw v2026.4 最新安裝教程:在 ZoneMac 物理節點構建 24/7 高可用 AI 智能體。 路由與熱重載行為可與 了解更多:2026年 OpenClaw 多通道閘道排錯可複現教程(openclaw.json 熱重載、doctor 與遠端實體 Mac Runbook) 對照閱讀,避免「改了 JSON 卻沒載入」的假陽性。
- 限制被「單一模型思維」掩蓋。所有頻道共用一個貴價模型時,尖峰 429 會放大成「全站不可用」;實際上互動與批次、對內與對外應使用不同 profile 與並發預算。
- 隱性成本在混淆 429 與逾時。429 需要尊重
Retry-After 與帳戶配額;讀逾時或 TLS 握手失敗較適合切換降級鏈或調高串流 idle 閾值——若用同一套「重試三次」處理,會既拖慢佇列又無法降噪。
- 穩定性與設定可稽核性。遠端實體 Mac 上多人改
openclaw.json 若未經評審,容易出現「預設 profile 被改壞」或「降級鏈順序與成本報表不一致」。需把 profile 命名、主備順序與 Owner 寫進 Runbook。
發佈前用下表做一次簽核;左欄為將就方案,右欄為建議基線。
任務標籤 僅依訊息長度啟發式選模型 以顯式 tag(
ci/
support)在路由層選 profile 429 立即重試同一模型 退避並尊重
Retry-After;必要時全域並發收斂
以下為結構示意:欄位名稱以你目前 OpenClaw 版本文件為準;合併進既有檔案時請保留團隊已在用的鍵(例如 channels、credentials 引用路徑),避免覆寫未備份的正式區設定。
{
“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" } } }
} }
{
“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": , "streamIdleMs": }, "failover": { "onTimeout": "nextInFallbackChain", "on429": "retryWithBackoffThenFallback", "maxFallbackHops": 3 } }
} }
streamIdleMs 用於處理「串流輸出中途長時間無 token」被切斷;on429 與 onTimeout 在設定層拆開,便於你在日誌與指標裡分別做 SLO。
- 凍結流量維度。與產品/維運對齊頻道清單與任務 tag 列舉;刪除「未命名預設」路徑,避免所有流量落回
balanced。
- 備份目前 JSON。
cp openclaw.json openclaw.json.bak.$(date +%Y%m%d%H%M);在工單附 diff。
- 合併路由區塊。先加
profiles 與 fallbackChain,再加 routeByChannel/routeByTaskTag。
- 本機黃金請求。對每一 profile 以固定 curl(或最小 SDK 指令稿)從
127.0.0.1 命中成功回應,記錄模型 ID 與延遲。
- 注入兩類故障。以上游 mock 或限流工具分別回傳 429、與故意拖長首包時間;確認 429 走退避且不會在三次內耗盡降級鏈,而逾時會沿鏈前進。
- 對接觀測。至少匯出:每 profile 請求量、429 率、fallback 深度分佈、讀逾時率;與 Prometheus/Grafana 文章閾值對齊。
- 歸檔與評審。將 JSON 片段、黃金命令與回滾步驟(還原 bak + reload)寫入內部 Runbook。
HTTP 429,無 Retry-After 邊緣或 WAF 誤判;或上游實作不完整 指數退避並記錄
request_id;對照直連上游與經閘道路徑 串流輸出中途斷開 讀逾時或 stream idle 過短 調高
streamIdleMs 與反代 SSE 相關逾時;與「429」分流處理
- 退避起點:
baseMs: 400 與上限 maxMs: 8000 可作 429 首輪量級;與上游商務約定的 QPS 一併評審。
- 串流 idle:
streamIdleMs: (4 分鐘)適合長回答;更短則偏互動即時回饋場景。
- 降級深度上限:
maxFallbackHops: 3,防止無限鏈導致延遲爆炸;超出則回傳顯式錯誤本文並告警。
問:降級鏈上的模型需要輸出格式完全一致嗎?
盡量選同一「工具呼叫/JSON 模式」能力域;若必須跨族替換,應在應用層對失敗重試並降級為純文字,而不是假設 token 級相容。
問:ZoneMac 節點跨境會不會放大逾時?
會。路由決策應把「用戶端—閘道」與「閘道—上游」兩段 RTT 分開度量;對海外上游優先把閘道放在延遲較低的出口區域,或為該 profile 單獨加長 requestMs。租前/擴容前亦應以 RTT、抖動與封包遺失 SLO 做節點驗收,避免把閘道 latency 誤判成模型品質問題。
問:能否對單一使用者限流?
可在閘道前加一層使用者級令牌桶(API 閘道或自研中介層);OpenClaw 側保留 profile 級並發即可,避免重複實作兩套邏輯。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/265905.html