AI Agent模型路由成本優化BuildInPublic一人公司

model 路由的成本陷阱:fallback 會不會偷偷升到最貴

· 7 分鐘閱讀
龍蝦艦隊 · 逐章稽核 · 第 3 / 22 篇
目錄
  1. 免費層一限流,它就自己升級到最貴的
  2. 先花幾分鐘查你自己的 fallback 鏈
  3. 我們實際怎麼改
  4. 路由體檢清單
  5. 這一章的四句話

《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 艦隊系統化,然後對自己做對抗式稽核。宣稱做到的每一章,都被重新驗證過一次,也把查法和改法整理成你能照著跑的步驟。這個系列的可信度,來自我們願意公開自己打臉自己。

龍蝦艦隊 · 逐章稽核 · 第 3 / 22 篇

每週 AI 自動化實戰筆記

不廢話,只有能直接用的東西。Prompt 模板、自動化 SOP、技術拆解。

加入一人公司實驗室

免費資源包、每日建造日誌、可以對話的 AI Agent。一群用 AI 武裝自己的獨立開發者社群。

需要技術協助?

免費諮詢,24 小時內回覆。