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