2026 年 5 月 4 日,早上七點多。我半睜著眼滑手機,看到一封 API 服務商的費用通知。
過去 24 小時:約 $40 USD。
$40 是我平常好幾個月的量,在一夜之間燒完。而這一夜我在睡覺,沒有下任何指令、沒有部署任何新功能、沒有跑任何大任務。
第一反應是「被盜用了?」。查了 log 之後發現更難堪的事實:沒有入侵、沒有 bug、每一分錢都是我的系統「按照設定」花掉的。它做的每件事都符合設定——問題是那套設定本身就是一台碎鈔機,只是之前一直沒被觸發。
而那套設定是我拍板的。程式碼誰打的不重要,規則是我定的、我沒審過、我按下部署——這筆帳只能算在我頭上。
這篇是整個系列我最想寫的一篇。不是因為 $40 很多(它就是一頓聚餐的錢),而是因為這次事故完美示範了 LLM 系統一種獨有的故障型態:成本故障。服務沒掛、資料沒錯、功能全部正常——只是每一步都在燒錢。
拼湊 log 之後,那一夜大概是這樣:
| 時間(台北) | 事件 |
|---|---|
| 23:00 前 | 一切正常。當晚有數個排程任務等著跑 |
| 深夜某時 | 免費模型(Gemini)的 API 開始不穩定,請求連續失敗 |
| +數秒 | 按 fallback 設定,任務自動改用備援模型——Claude 旗艦 |
| 整夜 | 多個排程任務輪流觸發,每次失敗都升級到 Claude 重跑;部分任務又因 timeout 過長反覆重試 |
| 07:00 | 我醒來,$40 已成事實 |
注意:沒有任何一個環節「壞掉」。fallback 忠實地 fallback 了,重試忠實地重試了,排程忠實地排程了。三個各自合理的機制,串起來變成一台自動印鈔機——印給 API 服務商。

**根因①:預設值偏貴。**建 job 時如果沒明確指定模型,系統會用一個「品質優先」的預設——Claude 旗艦。我建了三十幾個 job,好幾個是隨手建的,根本沒寫 model 欄位。平常它們用 Gemini 跑得好好的?不,平常它們就在用 Claude,只是單次費用小到我沒注意。
而且要誠實說,這個「偏貴的預設」有一半是我自己的心態,不全是框架的鍋:那陣子我剛開始玩 OpenClaw,什麼都不熟,想法很直覺——Sonnet 比較聰明,用好一點的模型,遇到問題說不定它自己就解掉了。等於拿模型的智力,當新手期的保險。後來回頭看,這份保險買錯了地方:**聰明模型解決不了錯的設定——它只會用更貴的方式,把錯的設定忠實跑完。**新手期真正需要的是更保守的預設,不是更聰明的執行者。
根因②:fallback 是升級鏈,不是降級鏈。這裡要講清楚一件事:fallback 不是我寫的功能,是框架控制介面上的一個設定——每個排程任務都能挑一顆「備援模型」,主要模型失敗時自動改用。我當初在那個下拉選單裡的想法很天真:「Gemini 掛了,換 Claude 頂上,服務不中斷。」而那個畫面上只有模型名稱,沒有價格。聽起來像高可用設計,實際上是把『故障』和『花大錢』用自動化焊死在一起。深夜 Gemini 的 API 一抖,所有任務齊刷刷升級到 Claude——而深夜正是我的排程最密集的時段(記憶整合、快取更新、各種巡檢)。
**根因③:重試無上限。**部分任務失敗後重試,重試又遇到不穩定,再重試。每一次重試都是完整的 LLM 呼叫,都是錢。timeout 又設得寬鬆,單次呼叫可以掛著跑好幾分鐘、吞掉大量 token 才失敗。
三個根因有一個共同點:**沒有一個是經過計算的決策。**最接近「決策」的那個——用聰明模型當保險——也是憑感覺買的保險,從沒算過保費。這就是這次事故最大的教訓——在 LLM 系統裡,預設值不是無害的出廠設定,預設值就是你的風險邊界。傳統系統的錯誤設定頂多讓服務變慢變爛;LLM 系統的錯誤設定直接連著你的信用卡。
當天早上我做了四件事,順序很重要——先斷血,再究因:
**第一刀:fallbacks 全部清空。**所有排程任務的 fallback 一律改成空陣列。任務失敗就失敗,發告警等人看。這一刀砍掉的是「故障自動變貴」的通路。有人會問:那可用性呢?答案回到 Day 21 的可靠性曲線——晨報失敗一次的代價是我晚點看到,fallback 失控一次的代價是這一夜。這不是取捨,是碾壓。
第二刀:全面降到便宜模型。逐一盤點所有 job:純文字生成的一律改 Gemini(免費額度);需要執行工具的用 Claude Haiku(低價位);Claude 旗艦在排程系統裡全面禁用,只保留給我本人的互動側(Claude Code/Cowork)。這一步順便發現了好幾個「不知道自己在用 Claude 旗艦」的 job。
**第三刀:timeout 全面加蓋。**一般任務 ≤ 120 秒,重試次數明確設限。跑不完的任務不是調大 timeout,是回去檢討任務設計。
還有第四刀,砍在系統外面:API key 平台端本來就能控管費用。供應商後台可以直接對 key 設消費上限——打到就停,不商量。那天早上我把上限壓到很低,寧可誤傷也不再讓它無界。這一刀最容易被忘記,因為它不在你的程式碼裡、不在你的設定檔裡,是別人網站上的一個表單欄位;但它恰好是四刀裡唯一一道不依賴你自己系統還活著的閘——前三刀防的是我再犯錯,第四刀防的是「我防不到的那種」。
四刀下去,費用當天就回到地板。而且有趣的是:**降級之後,沒有任何一個排程任務的產出品質讓我覺得變差。**每日晨報和提醒類的文字,Gemini 寫得跟 Claude 旗艦沒有可感知的差別——我之前付的是十倍價差,買的是我根本用不到的智力餘裕。
再補一個結構性反省:為什麼一夜之後我才知道?因為我的監控全部在看「服務健康」,沒有任何一雙眼睛在看「成本」。事故後的常設防線有兩道。第一道是上面那第四刀的完整版:平台端消費上限+費用告警(門檻壓到很低,寧可被吵),後來又補上自動儲值湊成一對——上限擋住失控的上緣(打到就斷,$40 那種夜晚頂多燒到上限)、自動儲值保住正常運作的下緣(額度歸零自動回填,不會平白斷糧)。兩個都設,才既不會爆錶、也不會哪天醒來發現系統因為餘額見底而安靜地死了一夜。這裡容易誤會成互相抵銷,講清楚:兩個機制活在不同層——自動儲值管的是「餘額」(見底就回填,服務不斷炊),消費上限管的是「月累計」(不管餘額還剩多少,當月花到線就是停)。儲值回填得了餘額,回填不了上限。第二道,在月度品質報告裡把用量趨勢列為一級指標。**成本是 LLM 系統的核心健康指標,和 uptime 同級。**這句話我用 $40 買的,送給你。
那三刀處理的是異常。但事故過後我才去問一個更基本的問題:沒有異常的日子,錢是怎麼花掉的?
答案完全不是我以為的。
一次呼叫的花費可以拆成四塊:送進去的問題(Input)、它回你的答案(Output)、把身分設定寫進快取(Cache Write)、以及命中快取後的讀取(Cache Read)。
直覺會以為大頭是 Output——它「講了那麼多話」。實際上壓倒性的大頭是 Cache Write,而且不是多一點,是高出一個量級。用一句話講這件事的荒謬之處:
我為「讓它記得自己是誰」付的錢,遠多於為「它到底說了什麼」付的錢。
原因不難懂:一次回答頂多幾百個 token,而人格設定 + 記憶 + 工具定義動輒幾萬個——而且每一次冷啟動都要重寫一遍。快取有效期內再呼叫會便宜一個數量級,但排程任務彼此隔了幾十分鐘,幾乎每一次都是冷的。
所以省錢的最高 ROI 不是縮短輸出,而是降低冷啟動次數。這個結論跟金額無關,也跟你用哪家模型無關——只要你的 Agent 有一份很長的身分設定,它就成立。
知道「冷啟動最貴」之後,下一題是:那到底是誰在冷啟動?
我當時的診斷是:六個角色 Agent 各有一套設定、各付各的;再加上每晚的記憶整合要吃大量上下文。聽起來很合理——多個 Agent、多套設定、多次寫入。
後來真的去逐筆拆帳,這個診斷兩半都不對:
而第一點還有一個更難堪的細節:吃掉絕大部分的那一隻,不在「六個」裡面。
我整個系列都說「六個 Agent」,但這套系統實際上跑著七隻。第七隻是框架預設的那一個——所有沒有指定角色的排程都由它執行。它沒有自己的資料夾、沒有專屬的人格檔,所以我畫架構圖時從來沒把它畫進去。
而它正好是最貴的那一隻,原因也很合理:六個角色各自讀自己資料夾裡那份精簡的設定,**而預設那隻讀的是 workspace 根目錄——那裡放的是全系統共用的規則與長期記憶,是整包設定裡最大的一份。**它上下文最長,又整天被喚醒,兩個條件疊在一起。
這一段的教訓比省下來的錢有價值得多,而且有兩層:
這也是為什麼下一節那四個問題有順序:先確認錢花在哪一塊,再確認是誰花的。倒過來做,你會很有信心地優化錯的東西。
上面那句「沒有任何一雙眼睛在看成本」,後來變成我每隔一陣子就會做一次的事。這一節把方法寫出來,你可以直接照做——而且不用寫程式,把檔案丟給 AI 幫你拆就好。
你需要兩份匯出檔,缺一不可:
第一份:供應商後台的用量匯出。多數 API 供應商的 Console 都能匯出逐日用量。關鍵是欄位要夠細——至少要有輸入、輸出、快取寫入、快取讀取的分項,只有一個總數是沒得分析的。這是唯一的權威來源,帳單就是照它算的。
第二份:OpenClaw(我的 Agent 框架)自己的 usage 匯出。供應商只知道「有人用了多少」,不知道是哪個 Agent、哪個排程用的。歸屬只有框架這一側有。⚠️ 但它多半只給 token、不給金額——因為它沒有牌價表,金額欄位常常一路是零。
拿到之後,問 AI 這四個問題,順序有意義:
三個一定會踩到的坑,先講在前面:
說到底,這一節存在的理由就是本篇的事故:**我不是不會查,是從來沒想過要查。**等到帳單自己來提醒你,那筆錢已經花掉了。
$40 事故的三行總結:LLM 系統的預設值就是風險邊界;fallback 升級鏈是把故障和花錢焊在一起;成本監控和可用性監控同等重要。
止血只是應急。接下來兩天講制度化的解法:明天先講「三層模型路由」——不是每個任務都配得上最聰明的模型,用旗艦模型跑「每天提醒喝水」,就像開超跑去倒垃圾。
🔑 這篇的關鍵字
LLM 系統獨有的故障型態:成本故障(服務全綠、資料正確、只是一直在燒錢)
根因三件套:預設值偏貴(沒指定 model 就用 Claude 旗艦)· fallback 升級鏈(Gemini 故障自動升級成 Claude)· 重試沒有上限
止血:fallbacks: []· 排程模型鎖死(文字歸 Gemini、工具歸 Haiku、旗艦只留互動)· timeout 上限 · API key 平台端消費上限(第四刀,系統外,唯一不依賴自己系統的那道)
provider 後台設消費上限+自動儲值+費用告警——上限擋爆錶、儲值擋斷糧,且這是唯一一道不依賴你自己系統還活著的防線
平常的成本形狀:大頭是 Cache Write 不是 Output——為「讓它記得自己是誰」付的錢遠多於「它說了什麼」 · 所以省錢的最高 ROI 是減少冷啟動次數,不是縮短輸出
成本幾乎從不平均分佈:以為六個 Agent 分攤,實際是一隻不在架構圖上的預設 Agent 獨大(它讀 workspace 根目錄那份最大的設定)· 記憶整合零成本(早就搬去 Gemini 免費額度)· 你數得出來的東西,通常不是問題所在
自己查的方法:兩份匯出檔(供應商後台 = 權威金額;框架端 = 歸屬但常常只有 token 沒有金額)→ 問 AI 四題(成本四塊佔比 → 誰花最多 → 快取 TTL → 冷啟動組成)· 三個坑:時區導致逐日對不上(要比總量)、金額欄位為 0 不等於沒花錢、資料留存比你以為的短
我是一名金融業資訊工程師,這是我半年來在家自架 AI Agent 系統的實錄。