本文根據 Claude Code 官方文檔《Explore the context window》《Manage costs effectively》整理,核對日期 2026-10-07。額度怎麼算、什麼時候重置不在本文範圍,詳見本站《Claude 使用限制與額度:用量怎麼看、什麼時候重置(Free / Pro / Max / Claude Code)》。
適用於誰
- 會話越聊越長,看到「Compacting conversation」或上下文快滿提示的人;
- 覺得 Claude Code「token 消耗太快」「額度一下就沒了」的人;
- 搜「claude code compact 是什麼」「上下文壓縮」「省 token」的人。
結論先說
- Claude Code 每次請求都會把整段對話發給模型,對話越長,每條消息消耗越多——哪怕你只問一句話。所以控制上下文就是控制用量。
- 上下文快滿時 Claude Code 會自動壓縮(把歷史對話總結成摘要),會話不會因此中斷;你也可以提前手動
/compact,並告訴它重點保留什麼。 - 換任務就
/clear:清空上下文開新對話,項目記憶(CLAUDE.md)保留,而且不消耗 token;/compact本身要讀一遍整段對話,是一次大請求。 - 用
/context看上下文被什麼佔滿,用/usage看哪些行為消耗多。 - 其他官方建議:大量讀文件、跑測試交給子代理;簡單任務用 Sonnet 或降低推理強度;停用不用的 MCP;把 CLAUDE.md 裏的專項流程挪成技能;提示詞寫具體。
一、先看清楚:上下文裏裝了什麼
會話裏輸入:
text
/context
它會用彩色格子顯示當前上下文的佔用情況,按類別細分,並給出優化建議(比如哪個工具佔得多、記憶文件是否過大)。
根據官方的說明,你還沒開口時,上下文裏就已經有:系統提示詞、CLAUDE.md、自動記憶(MEMORY.md 的前 200 行或 25KB)、MCP 工具名稱、技能描述等。幹活過程中,每讀一個文件、每次工具返回結果都會累加進去。
二、三個命令的區別
| 命令 | 做什麼 | 適合 |
|---|---|---|
/compact [要求] | 把目前的對話總結成結構化摘要,繼續同一個對話 | 還要接着做同一件事,但歷史太長了 |
/clear | 清空對話,開新會話(別名 /new、/reset),項目記憶保留 | 換到一件不相關的任務 |
/rewind → Summarize | 只把某一段對話壓縮成摘要 | 前面一段探索沒用了,後面的要保留 |
幾個實用寫法:
text
/compact 重點保留登入 bug 的修復過程和相關測試結果
text
/rename 登入bug排查
/clear
先 /rename 再 /clear,以後可以用 /resume 找回這個會話。
還可以在項目根目錄的 CLAUDE.md 裏寫一段壓縮說明,讓每次壓縮都按你的要求保留重點:
markdown
# Compact instructions
壓縮時重點保留測試輸出和代碼改動。
調整自動壓縮的時機:/autocompact 500k 可以設定上下文到多大時自動壓縮(具體可用的值和各模型預設閾值見官方 Model configuration 頁),/autocompact auto 恢復預設。
三、壓縮後會丟什麼、留什麼
官方給出的對照(節選):
| 內容 | 壓縮之後 |
|---|---|
| 系統提示詞、輸出風格 | 仍然生效 |
| 項目根目錄的 CLAUDE.md、無路徑限制的規則 | 從磁盤重新注入 |
| 自動記憶 | 從磁盤重新注入 |
| plan 模式寫好的方案 | 從磁盤重新注入 |
子目錄裏的 CLAUDE.md、帶 paths: 的規則 | 讀到相關文件時再按需加載 |
| 讀過或改過的文件 | 自動重新讀取最近修改的最多 5 個(超過 5000 token 的只保留路徑) |
| 調用過的技能內容 | 重新注入,每個技能最多 5000 token、合計 25000 token,最早的先丟 |
| 後台命令、後台子代理 | 繼續運行 |
| 你在對話裏口頭說的約定(如「先別推送」) | 和其他歷史一起被總結,可能丟失 |
所以:必須一直遵守的規矩寫進項目根目錄的 CLAUDE.md,不要只在對話裏說;技能裏最重要的內容放在 SKILL.md 開頭(截斷時保留開頭)。想在壓縮後自動補充提醒,可以用 SessionStart + compact 的 Hook,詳見本站《Claude Code Hooks 怎麼用:配置示例(完成通知、自動格式化、攔截危險命令)》。
四、為什麼 token 消耗這麼快
官方列出的長會話用量飆升原因:
- 上下文太長:每次請求都帶上全部歷史,每次工具調用還會再發一次請求;
- 緩存失效:離開超過緩存有效期後的第一條消息,要把全部上下文重新處理一遍。官方說明訂閱用戶的緩存有效期是 1 小時,開始消耗用量額度(usage credits)後降為 5 分鐘;用 API Key 預設 5 分鐘。Pro / Max 用戶在長時間離開後恢復大會話時,Claude Code 會提議「從摘要恢復」;
- 定時任務、跨會話消息、目標(/goal)檢查:會話空閒時也會發起新的一輪,每次都帶上完整上下文;
- 子代理、工作流、Agent Teams:每個都在額外發請求,官方說 Agent Teams 在 plan 模式下大約是普通會話的 7 倍 token;
- 壓縮本身:
/compact要讀一遍要總結的對話。
Pro、Max、Team、Enterprise 用戶運行 /usage,會看到佔最近用量 10% 以上的行為被單獨標出,並附帶建議。
五、官方推薦的省 token 做法
- 換任務就
/clear,舊對話每條消息都在浪費 token。 - 選對模型:官方說 Sonnet 能勝任大多數編程任務且比 Opus 便宜,Opus 留給複雜架構決策和多步推理;簡單的子代理任務可以指定
model: haiku。切換方法詳見本站《Claude Code 切換模型:/model 命令、模型別名、effort 與 fast 模式》。 - 調低推理強度:擴展思考的 token 按輸出計費,簡單任務用
/effort降一檔,或在/config裏關閉思考(官方註明 Opus 5.5、Sonnet 5.5 和 Fable 系列始終開啟思考,不能關)。 - 大量輸出交給子代理:跑測試、翻日誌、查文檔讓子代理做,主對話只收摘要。
- 減少 MCP 開銷:
/mcp裏停用暫時不用的伺服器;有命令行工具(gh、aws、gcloud等)時優先用命令行,更省上下文。 - 給強類型語言裝代碼智能插件:一次「跳轉到定義」代替 grep 加讀一堆候選文件。
- 用 Hook 預處理:比如讓 Hook 把測試輸出過濾成只剩失敗的部分,幾萬 token 變幾百。
- CLAUDE.md 瘦身:官方建議控制在 200 行以內,PR 審查、數據庫遷移這類專項流程挪成技能,用到時才加載。
- 提示詞寫具體:「優化一下這個代碼庫」會觸發大範圍掃描;「給 auth.ts 的登入函數加輸入校驗」只讀必要的文件。
- 複雜任務先用 plan 模式,方向錯了按 Esc 立即停,用
/rewind回退,避免返工浪費。
六、需要更大的窗口?
官方說明:Fable 系列、Sonnet 5 及以後、Opus 4.6 及以後、Sonnet 4.6 支持 100 萬 token 上下文窗口(選擇帶 [1m] 的模型變體;Sonnet 5.5 和 Sonnet 5 預設就是 1M,沒有單獨的變體)。各套餐是否可用見官方 Model configuration 頁「Extended context」一節。窗口更大不代表不用管理:長上下文同樣會讓每條消息更貴。
常見問題
Q:自動壓縮之後 Claude 好像「忘了」之前說好的事?
口頭約定會隨歷史一起被總結,可能丟細節。重要的規矩寫進 CLAUDE.md;或者壓縮前手動 /compact 重點保留……。
Q:/compact 和 /clear 哪個更省?
/clear 不消耗 token;/compact 需要讀一遍整段對話來生成摘要。不需要延續上下文時直接 /clear。
Q:/context 顯示 MCP 佔了很多?
MCP 工具預設是延遲加載的,只有名稱和說明在上下文裏,但伺服器多了也會累積。到 /mcp 停用不用的伺服器即可。
Q:怎麼一直看到上下文佔用?
配置底部狀態欄顯示上下文百分比,用 /statusline 描述你想要的內容即可自動配置。
參考資料
- Explore the context window(官方):https://code.claude.com/docs/en/context-window
- Manage costs effectively(官方):https://code.claude.com/docs/en/costs
- How Claude Code uses prompt caching(官方):https://code.claude.com/docs/en/prompt-caching
- How Claude remembers your project(官方):https://code.claude.com/docs/en/memory
- Model configuration(官方):https://code.claude.com/docs/en/model-config
0 條評論
還沒有評論,來搶沙發~