中級平台 / AI 工程
混合多供應商模型棧:plan 走 Opus、執行走 Qwen / DeepSeek
按 agent 角色把不同供應商的旗艦模型拼成一套 —— 規劃保留 Anthropic Opus,執行落 Qwen3.8-Max / DeepSeek V4.1 Flash,客戶端零改動、跨協議自動翻譯。
社群真正在抱怨什麼
Claude Code 全程走 Claude Opus 成本壓不住;一刀切降到 Sonnet 後,規劃與架構判斷明顯掉檔,返工反而更貴。開發者想混用其他供應商的旗艦(如 Qwen、DeepSeek),但客戶端只認 Anthropic 協議和 claude-* 模型名,改一次設定要動所有開發機。
而 plan、主執行迴圈、批次子任務這幾個角色對能力和價格的需求本來就不同 —— 客戶端只給一個模型開關,根本對不上。
GateLLM 怎麼做
GateLLM 在入口閘之後、路由之前按身份重寫模型名,客戶端零改動。plan 與架構判斷保留 claude-opus-5 直髮 Anthropic;主執行迴圈的 claude-sonnet-* 映射到 DashScope 的 qwen3.8-max;批次子任務(格式化、提交資訊、檢索摘要)映射到經 OpenAI 相容上游接入的 deepseek-flash。跨協議由閘道器翻譯,SSE 流與 tool_call_id 往返保真。
規則配在存取金鑰或金鑰組上,按團隊分別生效,出口閘驗證目標在白名單內 —— 配映射不等於發權限。
落地的 5 個手段
- 身份作用域模型映射:from → to 配在存取金鑰 / 金鑰組,入口閘後、路由前重寫;支援單個 * 中間片段捕獲回填,熱重載生效
- 跨協議互譯:Claude Code 走 Anthropic、Codex / OpenAI SDK 走 OpenAI,閘道器翻譯成 DashScope / OpenAI / Gemini / Bedrock 上游;上游推理久插 :keep-alive,流中斷插 _gateway_warning
- 請求標頭條件分流:同一個 from 按 X-Tenant 等頭走不同目標(exact / prefix / regex / exists / absent),帶條件規則前置、無條件保底,first-match-wins,可用於漸進式
- plan 模式識別:Claude Code 的 plan 模式注入 Plan mode is active / Exited Plan Mode 標記,指令碼比較末次位置即可切路由 —— 規劃走 Opus、執行落價效比模型
- 權限與可觀測:出口閘驗證目標必須在身份白名單(配映射 ≠ 發權限);日誌模型列掛 MM 標籤、懸停顯示原名 → 映射名;統計與計費按映射後真實模型名歸集,混合棧成本一眼可比