
1. 先搞清楚 tokens 到底被誰吃掉了很多人用 Claude Code 寫著寫著發(fā)現(xiàn)額度掉得飛快第一反應(yīng)是「模型太貴」其實(shí)大部分消耗跟你的提問質(zhì)量沒關(guān)系而是上下文在反復(fù)重發(fā)。Claude Code 每一輪對話都會(huì)把歷史消息、系統(tǒng)提示、工具定義、項(xiàng)目文件一起打包發(fā)給模型你問的越久這個(gè)包越大。我實(shí)測過一個(gè)很典型的場景清空上下文后什么都不干先跑一次/context能看到基礎(chǔ)開銷大概在 19k tokens 左右其中system tools這一項(xiàng)就占了 15.5k。也就是說你還沒開始干活光是把工具定義塞進(jìn)去就已經(jīng)花掉一大截。接著隨便發(fā)一句hello再跑/context數(shù)字漲到 24k 上下真正屬于「打招呼」的增量大約是 2.9k。這個(gè)數(shù)字說明兩件事一是固定開銷躲不掉工具定義和系統(tǒng)提示是 Claude Code 的底座二是可變開銷才是你能控制的也就是歷史對話、項(xiàng)目文件讀取、重復(fù)的上下文。省錢的核心思路不是砍固定開銷而是讓可變開銷別失控。這篇就圍繞三個(gè)入口來講settings.json的環(huán)境變量配置、CLAUDE.md的項(xiàng)目記憶、以及/compact的壓縮時(shí)機(jī)。目標(biāo)很明確——讓每一輪請求帶上去的 tokens 都是「有用的」而不是把整個(gè)項(xiàng)目歷史反復(fù)搬運(yùn)。適合誰看已經(jīng)在用 Claude Code 做日常開發(fā)、發(fā)現(xiàn)額度消耗比預(yù)期快、想在不降低體驗(yàn)的前提下把 tokens 花在刀刃上的同學(xué)。如果你還沒配好接入環(huán)境后面第二節(jié)會(huì)給一個(gè)可復(fù)制的骨架。2. 接入前置把 settings.json 和 API 環(huán)境搭好Claude Code 的配置分兩層一層是接入層決定請求發(fā)到哪里、用哪個(gè)模型另一層是行為層決定它怎么讀項(xiàng)目、怎么壓縮上下文。兩層都寫在settings.json里。配置文件位置按系統(tǒng)區(qū)分Linux / macOS~/.claude/settings.jsonWindowsC:/Users/你的用戶名/.claude/settings.json如果目錄不存在手動(dòng)建一個(gè).claude文件夾再放settings.json即可。接入層需要一個(gè)可用的 API 端點(diǎn)和 Key我用的是 TaoToken 的接口它的地址和 Key 管理入口在控制臺里能直接拿到配置時(shí)把ANTHROPIC_BASE_URL指向https://taotoken.net/apiANTHROPIC_AUTH_TOKEN填你自己的 Key。這里有個(gè)容易踩的坑ANTHROPIC_BASE_URL不要帶多余的路徑后綴直接寫域名加/api就行帶錯(cuò)了會(huì)出現(xiàn) 404 或者握手失敗。Key 的獲取和模型列表可以在控制臺里核對確認(rèn)你要用的模型名拼寫正確模型名寫錯(cuò)不會(huì)報(bào)「模型不存在」而是靜默回退到默認(rèn)模型你會(huì)以為配置生效了其實(shí)沒有。行為層的關(guān)鍵變量有兩個(gè)CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC設(shè)為1作用是關(guān)掉非必要的后臺通信。類比一下就是瀏覽器的 cookies很多請求你根本沒主動(dòng)發(fā)起但它在后臺悄悄跑關(guān)掉之后能省掉一部分隱性開銷。MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES設(shè)為3意思是自動(dòng)壓縮連續(xù)失敗 3 次就停止重試。這個(gè)變量是防止壓縮邏輯卡死時(shí)無限重試反而把 tokens 燒光。設(shè)成 3 是個(gè)比較穩(wěn)的值太小容易誤停太大等于沒限制。把這兩層配好之后Claude Code 每次啟動(dòng)讀的就是你這份配置而不是默認(rèn)值。下一步再談怎么讓它在項(xiàng)目里少讀無用文件。3. 可復(fù)制配置settings.json 骨架與 CLAUDE.md 寫法先給一份可以直接改的settings.json骨架。注意 JSON 不支持注釋下面用引用塊單獨(dú)說明每個(gè)字段實(shí)際文件里把注釋刪掉。{ autoUpdatesChannel: latest, env: { ANTHROPIC_AUTH_TOKEN: 你的API_KEY, ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_DEFAULT_HAIKU_MODEL: 你的輕量模型名, ANTHROPIC_DEFAULT_SONNET_MODEL: 你的主力模型名, ANTHROPIC_DEFAULT_OPUS_MODEL: 你的高配模型名, ANTHROPIC_MODEL: 你的默認(rèn)模型名, CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: 1 }, MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES: 3, model: 你的默認(rèn)模型名 }注意ANTHROPIC_DEFAULT_HAIKU_MODEL這類變量是給不同檔位任務(wù)用的輕量任務(wù)走 Haiku 檔、復(fù)雜推理走 Opus 檔分檔配置能避免所有請求都走高配模型。模型名以你控制臺里實(shí)際可用的為準(zhǔn)別照抄示例里的占位符。配好接入層之后真正決定「每輪讀多少項(xiàng)目內(nèi)容」的是CLAUDE.md。它的作用是給 Claude Code 一份項(xiàng)目說明書讓它進(jìn)項(xiàng)目時(shí)直接讀這份摘要而不是每次重新掃描整個(gè)代碼庫。CLAUDE.md放在項(xiàng)目根目錄寫法上要克制別把整個(gè) README 復(fù)制進(jìn)去。它應(yīng)該只包含三類信息項(xiàng)目結(jié)構(gòu)的關(guān)鍵路徑、常用命令、以及你希望它遵守的約定。給一個(gè)骨架# 項(xiàng)目說明 ## 技術(shù)棧 - 前端React Vite - 后端Node.js Express - 數(shù)據(jù)庫PostgreSQL ## 關(guān)鍵目錄 - src/componentsUI 組件 - src/api接口封裝 - server/routes后端路由 ## 常用命令 - 啟動(dòng)開發(fā)npm run dev - 跑測試npm test - 構(gòu)建npm run build ## 約定 - 組件用函數(shù)式寫法不用 class - 接口請求統(tǒng)一走 src/api/request.js - 提交前必須跑 lint這份文件控制在 50 行以內(nèi)比較理想。寫太長等于每輪都多帶一份文檔反而增加固定開銷。它的價(jià)值在于替代重復(fù)掃描而不是替代文檔。還有一個(gè)容易被忽略的點(diǎn)不同項(xiàng)目維護(hù)各自的CLAUDE.md和.claude文件夾。項(xiàng)目 A 需要的 skills 和 MCP 配置沒必要讓項(xiàng)目 B 也加載。如果兩個(gè)項(xiàng)目共用同一套配置那就把它提到全局的~/.claude里維護(hù)而不是在每個(gè)項(xiàng)目里重復(fù)一份。這就是「專項(xiàng)專立」的意思——按項(xiàng)目隔離公共部分上提。4. 驗(yàn)證請求用 /context 和 /compact 看效果配置寫完不算完得驗(yàn)證它真的生效了。Claude Code 里有兩個(gè)命令特別有用/context和/compact。先驗(yàn)證基礎(chǔ)開銷。打開 Claude Code先執(zhí)行/clear清空上下文然后跑/context。你會(huì)看到一份分項(xiàng)列表類似這樣System prompt: 2.4k System tools: 15.5k Messages: 1.2k Free space: 286 Total: 19.3k這個(gè)數(shù)字就是你的「地板價(jià)」什么都不干也要花這么多。接著發(fā)一句hello再跑/context看 Messages 那一項(xiàng)漲了多少。如果漲得很少幾百 tokens說明你的配置沒在后臺亂拉東西如果一次漲好幾千就要回頭檢查是不是有插件或者 MCP 在偷偷加載。再驗(yàn)證CLAUDE.md的效果。進(jìn)項(xiàng)目后問一個(gè)跟項(xiàng)目結(jié)構(gòu)相關(guān)的問題比如「這個(gè)項(xiàng)目的接口封裝在哪個(gè)目錄」觀察它是不是直接答出來而不是先掃描一遍。如果它開始列目錄、讀一堆文件才回答說明CLAUDE.md沒被讀到檢查文件名拼寫和位置。/compact的驗(yàn)證更直接。做一段連續(xù)相關(guān)的開發(fā)比如先讓它實(shí)現(xiàn)功能 A再基于 A 實(shí)現(xiàn)功能 B兩輪之后跑/context看 Messages 有多大。然后執(zhí)行/compact再跑一次/contextMessages 會(huì)明顯縮小因?yàn)闅v史被提煉成了摘要。壓縮前 Messages: 48.2k 執(zhí)行 /compact 壓縮后 Messages: 12.6k這個(gè)對比就是/compact的價(jià)值。它適合上下文強(qiáng)相關(guān)的連續(xù)任務(wù)比如同一個(gè)功能的多個(gè)子步驟。如果兩輪任務(wù)根本不相干用/clear更干脆直接歸零。判斷用哪個(gè)的簡單規(guī)則新任務(wù)和舊任務(wù)有沒有依賴關(guān)系有依賴用/compact沒依賴用/clear。別在無關(guān)任務(wù)之間硬扛著不清理那是最燒 tokens 的用法。5. 本篇常見錯(cuò)排查配置和命令都給了實(shí)際用起來還是會(huì)遇到一些具體報(bào)錯(cuò)。下面幾個(gè)是我和身邊人踩過的。報(bào)錯(cuò)一settings.json 改了沒生效。最常見的原因是 JSON 格式錯(cuò)誤比如多了一個(gè)逗號、少了引號。Claude Code 讀配置失敗時(shí)不一定報(bào)錯(cuò)可能直接回退默認(rèn)值。排查方法用cat ~/.claude/settings.json | python -m json.tool校驗(yàn)格式能解析通過才說明語法沒問題。另外確認(rèn)你改的是當(dāng)前用戶目錄下的配置不是項(xiàng)目里的。報(bào)錯(cuò)二請求返回 401 或握手失敗。檢查ANTHROPIC_AUTH_TOKEN有沒有多余空格Key 是否過期。ANTHROPIC_BASE_URL確認(rèn)是https://taotoken.net/api不要帶尾部斜杠或者多余路徑。如果還是失敗去控制臺確認(rèn) Key 的權(quán)限和額度狀態(tài)。報(bào)錯(cuò)三模型名寫錯(cuò)但沒報(bào)錯(cuò)。前面提過模型名拼錯(cuò)會(huì)靜默回退。驗(yàn)證方法是跑一次請求后看返回的模型標(biāo)識或者直接在配置里用一個(gè)明顯不存在的名字看它是不是還正常返回——如果正常返回說明它根本沒在用你寫的名字。報(bào)錯(cuò)四/compact 之后上下文還是很大。壓縮不是萬能的如果單輪消息本身就特別長比如你貼了一整個(gè)大文件進(jìn)去壓縮后的摘要也會(huì)偏大。這種情況應(yīng)該先/clear然后重新提問時(shí)只貼必要的代碼片段而不是整個(gè)文件。報(bào)錯(cuò)五CLAUDE.md 被忽略。確認(rèn)文件名大小寫完全一致必須是CLAUDE.md全大寫。放在項(xiàng)目根目錄不要放在子目錄。如果項(xiàng)目有多個(gè)根比如 monorepo每個(gè)子項(xiàng)目根目錄各放一份。報(bào)錯(cuò)六tokens 消耗突然暴漲。先跑/context看是哪一項(xiàng)漲了。如果是 System tools 漲了可能是裝了新的插件或 MCP如果是 Messages 漲了說明歷史太長該壓縮或清理了。定位到具體項(xiàng)再處理別盲目清空。6. 把 tokens 花在刀刃上的長期做法省 tokens 不是靠某一個(gè)開關(guān)而是靠一套習(xí)慣。配置層用settings.json關(guān)掉非必要通信、分檔配模型項(xiàng)目層用CLAUDE.md替代重復(fù)掃描、按項(xiàng)目隔離配置會(huì)話層用/clear和/compact控制上下文體積。三層配合才能讓每一輪請求帶上去的都是有效信息。如果你還在搭接入環(huán)境建議先把 API Key 和接入文檔過一遍把settings.json的骨架跑通再談優(yōu)化。Key 管理和模型列表在控制臺里能直接看到接入文檔里有完整的變量說明。日常編碼和 Agent 類任務(wù)如果跑得比較多可以看看 Coding Plan 這類長期方案比按次調(diào)用更劃算。想先驗(yàn)證模型效果、確認(rèn)配置對不對用模型對話快速試一輪最省事。真正穩(wěn)定的體驗(yàn)來自「知道錢花在哪」。每次覺得消耗異常先跑/context定位再?zèng)Q定是清空、壓縮還是改配置。這個(gè)習(xí)慣養(yǎng)成之后你會(huì)發(fā)現(xiàn)同樣的額度能撐更久而且回答質(zhì)量不會(huì)下降——因?yàn)槭〉舻亩际菬o效上下文留下的都是真正有用的信息。