model 路由的成本陷阱:fallback 會不會偷偷升到最貴
《Agentic Design Patterns》第 2 章講路由(Routing)。核心一句話:依任務難度選 model,簡單的用便宜的、難的才動用貴的,不是每次都套最大那顆。
我們讀完,點頭。我們的 LLM helper 有三層 tier,每層都設了 fallback 鏈,主力全掛便宜 model,預設層打頭的是免費的 gemma。依難度選 model,實作完成。然後我們對自己做了對抗式稽核。這一章的真相不在正常路徑,在 fallback:路由挑對了便宜的主力,卻讓失敗時的降級往「最貴」的方向爬。
免費層一限流,它就自己升級到最貴的
舊的預設鏈長這樣:gemma:free → gemini-2.5-flash → claude-haiku。設計時的邏輯很順,先用免費的,不行才往下退。問題是「往下退」退到的是整條鏈裡最貴的 Claude。
免費 model 最愛做的事就是限流。免費層一被擋,路由照設計往下退一格,退著退著就退到 claude-haiku,比 Gemini flash 貴約 10 倍。而且愈忙愈慘,請求一多、限流一密,愈多請求被推到最貴那格。它不是在依難度選 model,是在依「前面塞車沒」把每個請求往貴的方向推。
最致命的是我們看不見。config 裡明明選的是免費的 gemma,我們理所當然以為在付 $0。實際跑在哪個 model 上,沒有一筆記帳說得出來。就這樣悄悄燒了 $8 的 Claude,最後是翻 dashboard 才意外發現。路由選的是「意圖」,帳單記的是「實際」,中間差了一整條沒人看的 fallback 鏈。
先花幾分鐘查你自己的 fallback 鏈
01 攤開你的 model 鏈,逐格標價 把 primary 加所有 fallback 撈出來,一格一格標上單價,從上往下讀。健康的鏈應該愈退愈便宜、或至少持平,不該愈退愈貴。
# 撈出設定裡的 model 鏈與 fallback
grep -niE 'model|fallback' config.* .env
# 對每個 model 標單價,看鏈是往便宜走還是往貴走
紅旗:鏈裡任何一格的下一個 model 比前一個貴。免費層一限流,你就開始為最貴那格付錢。
02 查你有沒有記「每次實際用了哪個 model」 config 選的是意圖,限流時真正接手的可能是鏈尾任何一個。沒有逐筆記 model,你就是瞎的。
# 成本 log 有沒有逐筆記 model,按 model 分組看實際用量
grep '"model"' llm-cost.log | jq -r .model | sort | uniq -c | sort -rn
# 如果根本沒這個 log,那就是問題本身
紅旗:你答不出「過去一天有幾 % 的請求實際跑在最貴的 model 上」。
03 故意讓 primary 失敗,看它降級往哪走 把 primary 設成一個會失敗的 model,逼 fallback 接手,看記帳裡真正上場的是誰。它掉下去的方向,就是你帳單在高負載下移動的方向。
# 故意打壞 primary,看誰接手、成本 log 記的是哪個 model
OPENROUTER_MODEL='does/not-exist' your-script "測試一句"
tail -1 llm-cost.log | jq '{model, cost}'
紅旗:primary 失敗後,接手的 model 比 primary 貴。你的降級方向是往貴走。
我們實際怎麼改
2026-07-04 兩刀。第一刀,整條鏈的 Claude 全部拔掉:預設層改成 gemini-2.5-flash → gemini-2.0-flash-001,premium 從 claude-sonnet 換成 gemini-2.5-pro,reasoning 的 fallback 也拿掉 claude-sonnet。三層 tier 沒有一格再會掉到 Claude,降級只會往便宜或持平走,不會往貴爬。第二刀,加一支 _llm_log_cost,每次呼叫都從回應的 usage 抽 token、估成本,逐筆寫進 llm-cost.log。從此哪個服務用哪個 model 燒了多少,永遠看得見,不用再等 dashboard 給驚喜。那 $8,就是沒這行記帳才燒得出來的。
路由體檢清單
對你自己的 model 路由跑一遍:
- fallback 鏈逐格標價,是愈退愈便宜還是愈退愈貴
- 限流時的降級方向,是往便宜還是往貴
- 每次呼叫實際用了哪個 model,有逐筆記 log 嗎
- 你答得出「過去一天有幾 % 請求跑在最貴 model 上」嗎
- config 選的便宜 model,跟帳單上實際付錢的 model,對得起來嗎
- 免費層(最愛限流的那層)失敗時,接手的是不是全鏈最貴的一個
這一章的四句話
- 路由不只選 primary,也要管 fallback 往哪掉。降級的方向就是帳單在高負載下移動的方向。
- 免費 model 最會限流。fallback 若往貴的爬,你會在最忙的時候付最多的錢。
- config 選的是意圖,帳單記的是實際。沒逐筆記 model,你不知道自己在燒哪一個。
- 路由的省,不在正常路徑省得多漂亮,在失敗路徑不會偷偷升級到最貴。
原始碼位置:~/.openclaw/scripts/ollama-helper.sh(三層 tier 的路由與 fallback 鏈;2026-07-04 拔掉全部 Claude、預設改 gemini-2.5-flash → gemini-2.0-flash-001)、_llm_log_cost(同檔,逐筆記帳寫入 ~/.openclaw/logs/llm-cost.log)。
這是《Agentic Design Patterns》× 龍蝦艦隊系列。我們照書把一人公司的 AI agent 艦隊系統化,然後對自己做對抗式稽核。宣稱做到的每一章,都被重新驗證過一次,也把查法和改法整理成你能照著跑的步驟。這個系列的可信度,來自我們願意公開自己打臉自己。