
我開了一個空資料夾,裡面什麼都沒有,然後叫 Claude Code 回我兩個字。
$ mkdir empty && cd empty
$ claude -p "回覆 OK" --output-format json
它回了 OK。這次呼叫的帳單是 0.335 美元。
四個字的輸出,三毛三美金。今天就是要把這三毛三拆開,看錢花到哪裡去了。
--output-format json 會把 usage 一起吐出來,這是你唯一的儀表板。
claude -p "回覆 OK" --output-format json | jq '.usage, .total_cost_usd'
我那次的實際輸出:
{
"input_tokens": 2,
"cache_creation_input_tokens": 32575,
"cache_read_input_tokens": 19096,
"output_tokens": 4
}
0.335408
四個欄位要分清楚,記錯了會算錯成本:
| 欄位 | 意思 | 計價 |
|---|---|---|
input_tokens |
沒有被快取的新輸入 | 基準價 |
cache_creation_input_tokens |
這次寫進快取的部分 | 1.25 倍基準價 |
cache_read_input_tokens |
命中快取讀回來的部分 | 0.1 倍基準價 |
output_tokens |
模型產出 | 通常 5 倍基準價 |
我那次的總輸入是 2 + 32,575 + 19,096 = 51,673 個 token。
在一個空資料夾裡,說一句「回覆 OK」,模型要先讀 51,673 個 token 才開始工作。你的 prompt 佔其中 2 個。
拆開來大致是三塊。
第一塊,系統提示。 Claude Code 的行為規則、輸出格式約定、安全守則、工作流程說明。這塊是固定的,你動不了。
第二塊,工具 schema。 這是最大的一塊,也是最有壓縮空間的一塊。每一個內建工具都要把名稱、說明、參數的 JSON Schema 完整送進去,模型才知道怎麼呼叫。Read、Write、Edit、Bash、Grep、Glob、WebFetch、WebSearch、Task、TodoWrite……十幾個工具,每個幾百到一兩千 token。
如果你還掛了 MCP server,這塊會爆炸。我自己的平台有 200 個以上的 MCP 工具,全部送進去的話光工具宣告就是好幾萬 token。
第三塊,環境資訊。 工作目錄、git 狀態、平台、日期、以及專案裡的 CLAUDE.md。你的 CLAUDE.md 寫得越詳細,這塊越貴。我自己那份寫到後來有一萬多字,等於每次 spawn 都先付一次那份文件的錢。

右邊那條細到幾乎看不見的,是你真正想問的那句話。
現在把這個數字放進「自動化」的情境裡算。
假設你的 agent 每 15 分鐘醒來一次巡檢,一天 96 次。取整數算 100 次:
| 項目 | 計算 | 結果 |
|---|---|---|
| 每次固定開銷 | 51,673 token | |
| 一天 | × 100 | 5.17 M token |
| 一個月 | × 30 | 155 M token |
一億五千五百萬個 token,全部花在「還沒開始工作」這件事上。
這就是為什麼很多人做 agent 做到一半放棄。他們以為問題出在模型不夠聰明,實際上是他們每小時付四次入場費,卻只讓模型在裡面待三秒。
有人會說:有 prompt cache 啊,第二次以後就便宜了。
對,但要看清楚兩件事。
第一,快取要先付建立費。 cache_creation 的單價是基準價的 1.25 倍。你第一次呼叫其實比沒有快取還貴一點,要跑到第二次、第三次才開始回本。
第二,快取有存活時間。 預設 5 分鐘,有些方案可以設到 1 小時。如果你的 agent 每 15 分鐘醒一次,預設設定下每次都是全新建立,你永遠在付那個 1.25 倍,一次快取都沒命中。
這是很多人沒注意到的陷阱:你的排程間隔如果大於快取存活時間,prompt cache 對你完全沒有幫助,還會讓你多付 25%。
我自己的排程有一段時間是 30 分鐘一次,就是這個狀態。後來改成兩層:高頻的輕量檢查用 3 分鐘間隔,讓快取一直是熱的;重量級的分析改成事件觸發,需要才跑。
順帶講一個會讓你算錯預算的細節。
很多人估中文 token 用「字數 ÷ 1.5」。我原本也這樣估,後來實測發現低估了大約 22%。
比較接近的估法是按碼位分類:
def estimate_tokens(text: str) -> int:
"""粗估 token 數,CJK 與 ASCII 分開算。"""
cjk = ascii_ = other = 0
for ch in text:
o = ord(ch)
if 0x4E00 <= o <= 0x9FFF or 0x3040 <= o <= 0x30FF: # 漢字、假名
cjk += 1
elif o < 128:
ascii_ += 1
else:
other += 1
# 中文約每字 1 個 token,英文約每 4 字元 1 個
return cjk + ascii_ // 4 + other // 2
這仍然是估算,真實值要看 tokenizer。但用這個公式做預算,我不會再算出「應該還有 30% 額度」然後隔天收到超額通知。
不要相信我的數字,量你自己的。三步:
# 1. 空目錄 baseline:這是你環境的地板
mkdir /tmp/probe && cd /tmp/probe
claude -p "OK" --output-format json | jq '[.usage.input_tokens,
.usage.cache_creation_input_tokens, .usage.cache_read_input_tokens] | add'
# 2. 你的專案目錄:差額就是 CLAUDE.md + MCP + git 狀態的成本
cd /path/to/your/project
claude -p "OK" --output-format json | jq '[.usage.input_tokens,
.usage.cache_creation_input_tokens, .usage.cache_read_input_tokens] | add'
# 3. 關掉 MCP 再量一次:跟第 2 步的差額就是 MCP 工具 schema 的成本
claude -p "OK" --output-format json --strict-mcp-config | jq '...'
三個數字拿到手,你就知道自己該砍哪裡。多數人的結論會是:MCP 工具是最大宗,CLAUDE.md 第二。
先講一個反面意見,免得明天的優化被誤用。
固定開銷高,本身不是罪。那五萬個 token 買到的是一個什麼都會的通用 agent,它能讀檔、能搜尋、能執行、能上網。如果你的任務真的需要這些能力,這筆錢花得值。
會出問題的是任務跟能力不匹配:一個只需要讀日誌然後回三行摘要的 agent,你給它一整套開發工具鏈。這就像請水電工來換燈泡,他把整車工具搬進你家,換完再搬出去,你付的是搬運費。
明天講怎麼只帶那顆燈泡進門。我實測把這 51,673 砍到 6,171,token 省下 88%,成本從 0.335 美元降到 0.035 美元。
砍法只有兩行參數,但其中有一個坑,踩下去會順手關掉你的安全防護。