就在剛剛,Anthropic發了一篇部落格。
核心資訊就是:各位,別再燒冤枉token了,我們都看不下去了!
為此,官方詳細列舉了六條省錢心法,先貼為敬:
1. 任務做完就/clear。修完一個bug就清掉當前對話,別讓上一個任務讀過的檔案和命令輸出拖進下一個任務裡,白白佔著上下文。
2. 開局就定好模型和推理強度(effort level)。中途切換的話,之前積累的提示快取會全部失效,整段對話歷史要按全價重新計算一遍。
3. 用@引用檔案,別手打路徑。用@直接把檔案附到消息裡,Claude不用再花一次工具呼叫去讀。如果你只打檔案名稱,Claude可能先搜一圈再打開好幾個檔案試探,這些操作全部會進入對話歷史,之後每一輪都帶著。
4. 給輸出多的命令加靜默參數(quiet flag)。在CLAUDE.md裡寫一句類似--reporter=dot的配置,讓測試輸出只列印幾行摘要,不是幾百行詳情。輸出越短,佔的上下文越少。
5. /compact在休息前做。對話還在快取裡的時候壓縮,成本只有正常的十分之一。等你回來快取過期了再壓,就得按全價重新讀一遍再壓縮。
6. 大輸出任務扔給子Agent。子Agent在一個獨立的上下文窗口裡運行,做完只把結論傳回來,過程中讀的檔案和跑的命令輸出不會進入你的主對話。
01. 一個token的前世今生
用Claude Code幹活,API按量走,訂閱制月費從20美元到200美元分三檔。
根據官方推算,開發者日均消耗13美元token,月均花在150到250美元之間。
這還只是平均水平。同樣修一個bug,問法不同,花費能差出好幾倍。
而且每一輪對話都在拖著前面所有輪的全部內容重新傳送,會話越長,每一輪就越貴。
這些錢花在那,得從token的計價邏輯說起。
每次你在Claude Code裡輸入一條指令,背後發生兩件事。
第一件叫預填充(prefill),也就是模型一口氣讀進你的整個請求,包括系統提示詞、CLAUDE.md、你的消息,以及之前對話裡積累的一切。這些都是輸入token。
第二件叫解碼(decode),也就是模型一個字一個字往外寫的過程,包括它的思考、工具呼叫和你最終看到的文字。這些都是輸出token。
關鍵區別在這裡。
預填充是平行的,一次性把所有輸入token過一遍GPU。解碼是序列的,每吐一個token都要跑一次模型。200個token的回覆,就是200次獨立運算。
所以也就不難理解,為什麼輸出token要比輸入token貴5倍了。
在這個基礎上,最終帳單取決於兩件事。
第一是模型,決定每個token的單價。
- Opus 5,輸入5美元/百萬token,輸出25美元。
- Sonnet 5,輸入2美元,輸出10美元。
- Haiku 4.5,輸入1美元,輸出5美元。
第二是推理強度,決定token的數量。
一個會話裡大部分輸出token都是思考token,推理強度控制的就是這個量。推理強度越高,模型想得越久,輸出的思考token越多。max和low之間能差好幾倍。
簡單活用Sonnet,硬骨頭才上Opus。牛刀殺雞的錢,花得最冤。
02. 提示快取,是最大的省錢利器
token定價裡還有一個巨大的變數,就是快取。
Claude Code的每次請求都從相同的前綴開始,也就是系統提示詞、工具定義、CLAUDE.md和對話歷史。
如果這次請求的前綴和上次逐字節一樣,伺服器就不重新算,直接載入上次的計算結果。
快取讀取只要正常輸入價的0.1倍,直接省掉90%。
寫入快取貴一點,最高2倍。但寫入只發生一次,後面每一輪都享受0.1倍讀取。
舉個例子。
假設你的對話歷史有5萬個token。不走快取的話,每一輪光是重讀這5萬token就得付全價。但只要命中快取,同樣的5萬token只需要花十分之一的錢。
一個會話跑二三十輪,快取命中攢下來的折扣是天文數字。
這是你最大的薅羊毛槓桿。
但快取有個致命弱點。它必須從請求的第一個字節開始連續匹配,中間任何地方變了,從那裡往後全部作廢。
具體來說,一共有六種情況:
1. /model切模型:每個模型的快取獨立。從Sonnet切到Opus,整個對話歷史按Opus的價格重新預填充,沒有折扣。
2. /effort切推理強度:推理強度也是cache key的一部分,切換之後整個對話歷史都要重新計算。
3. 開關Fast mode:效果和前兩種一樣,快取直接失效。
4. /compact壓縮對話:對話被重寫成摘要,原來的內容全部對不上,舊快取直接作廢。
5. 時間過期:訂閱使用者的快取保活1小時,API使用者默認5分鐘。超時後下一輪全量重算。
6. 恢復舊會話:隔了太久快取早就沒了,幾乎100%要全價重新計算。
壞消息是,只要中一個就意味著整個對話歷史從0.1倍打回原價。
好消息是,當你知道什麼會讓快取失效時,就能知道怎麼保住它。
比如,會話開頭就鎖定模型和推理強度,全程不切。不在快取還熱的時候做/compact,等到準備休息的時候再跑。
這裡,還有個隱藏坑。
opusplan模式每次進出plan都切模型。進一次,快取失效一次。出來,又失效一次。來回跳的話,每跳一次都是一筆全價prefill。
03. 你的會話,正在偷偷變胖
快取幫你把重複傳送歷史的成本壓到十分之一。
但有一件事它幫不了。你的歷史本身在一輪一輪地膨脹。
每次Claude讀一個檔案,檔案內容追加到對話裡。每次Claude跑一個命令,輸出也追加進去。從追加那一輪起,後面每一輪都帶著。
第40輪對話在重新傳送第1到39輪的全部累積內容。
這種增長,是接近平方等級的O(n²)。
CClaude Code有個兜底機制。
命令輸出超過30000字元,就不往對話裡塞了,而是寫到一個臨時檔案裡,對話裡只放一句摘要。但30000以下的輸出沒人管。
比如一個測試框架跑完,列印400行通過記錄,每行幾十個字元,總量不到3萬,夠不上這個閾值。
於是這400行就原封不動地留在了對話歷史裡,後面每一輪都跟著重新傳送一遍。
對此,Anthropic部落格裡給了幾招很實用的瘦身方法。
1. @引用檔案。
不要手動輸入路徑讓Claude自己去找。@引用會把檔案直接附到消息裡,省掉一次讀取操作。
你只說檔案名稱的話,Claude可能先grep搜一圈,打開好幾個檔案看那個對。然後這些試探就會全部進入對話歷史,徒增成本。
2. 給noisy命令加quiet flag。
在CLAUDE.md裡寫一句「run tests with npx vitest run <file> --reporter=dot」,以後每次跑測試只輸出幾行點狀結果,不是幾百行詳情。一分鐘的配置,以後每個會話省幾百行上下文。
3. subagent隔離大輸出任務。
subagent在自己獨立的上下文窗口裡跑,做完只傳答案回來,過程中讀的檔案和命令輸出全部丟棄。適合「去翻翻日誌有什麼異常」「幫我過一遍這個大檔案」這種活。你只要結論,不要過程。
還有最重要的一條。
4. /clear切任務。
修完一個bug就/clear,開始下一件事。上一個bug的檔案、命令輸出、中間探索,全部和下一個任務無關,但如果不清,它們在後面每一輪都佔著位置、吃著token。
不想徹底清空的話,/compact可以把對話壓成摘要。一萬到兩萬個token能壓到一千到三千。
此外,部落格裡還提了一個冷門但免費的操作,/rewind。
如果最後幾輪跑偏了,/rewind直接砍掉那幾輪,前面的快取完全不動。
04. 管token,也是一種開發者素養
上面這些操作拆完,你會發現一個規律。寫程式碼的人正在長出一套新技能。
跟框架和語言沒關係,而是知道該選什麼模型、怎麼管上下文、怎麼保住快取、推理強度開多高合適。
這些能力一年前並不存在。但它現在卻決定了你在同一個任務上,是花3美元還是30美元。
Anthropic自己就是最好的例子。
他們80%的程式碼靠AI寫,程式碼合併量一年翻了8倍,基準測試加速52倍。AI用到這個強度,如果沒人管token,光推理成本就能把預算吃穿。
從這個角度看,與其說這篇部落格講的是省錢技巧,不如說是AI時代寫程式碼的人需要長出來的一種新本能——
知道你的每一個操作在消耗什麼,知道怎麼讓同樣的預算幹出更多的活。
讀懂它的人,薅到的不只是幾美元的token。 (新智元)
