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