Claude Code 緩存命中率提升到 95%:6 個實戰技巧將 40 萬 Token 輸入降到 5 萬

"爲什麼我的 Claude Code 每次請求都有 40 萬輸入 Token?賬單怎麼這麼高?"——這是很多 Claude Code 用戶在查看用量統計時的第一反應。實際上,這 40 萬 Token 中的絕大部分可能已經被緩存命中,真實成本可能只有表面數字的 1/10。但如果緩存沒命中,那賬單確實會讓人心疼。

核心價值: 讀完本文,你將理解 Claude Code 的自動緩存機制、導致緩存失效的 8 種常見原因,以及 6 個將輸入 Token 從 40 萬降到 5 萬的實戰技巧。

claude-code-prompt-caching-token-optimization-reduce-input-cost-guide-zh-hant 图示

Claude Code 的 Prompt Caching 自動緩存機制詳解

Claude Code 會自動命中緩存嗎?

會的。 Claude Code 在每次 API 請求中都會自動啓用 Anthropic 的 Prompt Caching,無需任何配置。這是內置行爲,不是可選功能。

每次你在 Claude Code 中發送一條消息,實際發送給 API 的內容按以下順序組裝:

組裝順序 內容 大小估算 緩存行爲
第 1 層 Tool 定義(Read/Edit/Bash 等) ~5,000 Token 幾乎不變,高命中率
第 2 層 系統提示 + CLAUDE.md ~3,000-10,000 Token 會話內不變,高命中率
第 3 層 對話歷史(所有之前的消息) 持續增長 前綴匹配,逐步累積緩存
第 4 層 當前新消息 可變 永遠不會命中緩存

關鍵機制: 緩存是基於前綴匹配的——只要請求的前 N 個 Token 與之前緩存的內容完全一致,這 N 個 Token 就會命中緩存。在一個持續對話中,到第 20 輪時,95%+ 的輸入 Token 通常來自緩存命中

緩存價格:爲什麼緩存命中如此重要

操作類型 相對基礎輸入價格 Sonnet 4 實際價格/MTok Opus 4 實際價格/MTok
普通輸入(無緩存) 1x $3.00 $15.00
5分鐘緩存寫入 1.25x $3.75 $18.75
1小時緩存寫入 2x $6.00 $30.00
緩存命中/讀取 0.1x $0.30 $1.50
輸出 $15.00 $75.00

舉個具體例子:如果你的請求有 40 萬輸入 Token:

場景 A:完全無緩存
├── 40萬 Token × $3/MTok (Sonnet) = $1.20 每次請求

場景 B:95% 緩存命中(典型 Claude Code 會話)
├── 緩存命中 38萬 Token × $0.30/MTok = $0.114
├── 緩存寫入 1萬 Token × $3.75/MTok  = $0.0375
├── 新輸入 1萬 Token × $3/MTok       = $0.03
├── 合計 = $0.18 每次請求
└── 實際成本僅爲無緩存的 15%

🎯 技術提示: 通過 API易 apiyi.com 調用 Claude API 同樣支持 Prompt Caching 機制,
緩存命中時輸入成本降低 90%。如果你的項目通過 API 集成 Claude,
建議合理設計 Prompt 結構以最大化緩存命中率。

緩存 TTL:Max 用戶的隱藏福利

訂閱方案 緩存 TTL 寫入成本 說明
API 按量付費 5 分鐘 1.25x 超過 5 分鐘不操作,緩存過期
Pro / Team 5 分鐘 1.25x 同上
Max 5x / 20x 1 小時 2x 寫入貴但命中窗口大 12 倍

Max 用戶雖然緩存寫入價格是 2x(比標準的 1.25x 高),但 1 小時 TTL 意味着你去喝杯咖啡回來緩存還在。對於間歇性使用的開發者,這個差異非常顯著。

每次緩存命中都會重置 TTL 計時器,所以只要你保持活躍使用,緩存基本不會過期。

緩存沒命中?8 種常見原因及解決方案

claude-code-prompt-caching-token-optimization-reduce-input-cost-guide-zh-hant 图示

緩存失效的根本原因只有一個:請求的前綴與緩存內容不匹配。具體到 Claude Code 中,以下 8 種情況會導致緩存失效:

第一類:TTL 過期

原因 觸發條件 影響範圍 解決方案
1. 空閒超時 API 用戶 >5分鐘無操作,Max 用戶 >1小時 全部緩存失效 保持活躍或接受重建成本

這是最常見的緩存失效原因。如果你在編碼過程中離開超過 5 分鐘(API 用戶)或 1 小時(Max 用戶),下一次請求會觸發完整的緩存重建。

第二類:內容變更導致的級聯失效

緩存遵循嚴格的層級結構:Tool 定義 → 系統提示 → 對話歷史。上層變更會導致下層全部失效。

原因 觸發條件 影響範圍 嚴重程度
2. 切換模型 使用 /model 命令 全部緩存(緩存按模型隔離) ⚠️ 高
3. 添加/刪除 MCP 工具 安裝或卸載 MCP Server Tool 層 + 下游全部失效 ⚠️ 高
4. 切換 Web Search 開啓或關閉聯網搜索 系統層 + 下游全部失效 ⚠️ 中
5. 修改 CLAUDE.md 編輯項目配置文件後重啓 系統層 + 下游全部失效 ⚠️ 中

第三類:操作觸發的失效

原因 觸發條件 影響範圍 嚴重程度
6. 開新對話 /clear 或新建會話 全部緩存(對話歷史清空) ⚠️ 高
7. 使用 /compact 主動壓縮對話歷史 對話歷史層緩存失效 ⚠️ 中
8. 使用 /rewind 撤銷之前的消息 對話歷史前綴改變 ⚠️ 中

一個容易忽略的技術限制:最小緩存長度

如果你的 Prompt 低於以下 Token 數量,緩存會靜默跳過,不會有任何報錯:

模型 最小可緩存長度
Claude Opus 4.6 / Haiku 4.5 4,096 Token
Claude Sonnet 4.6 2,048 Token
Claude Sonnet 4.5 / 4 1,024 Token

對於 Claude Code 來說,由於 Tool 定義 + 系統提示就已經超過 5,000 Token,這個限制幾乎不會觸發。但如果你自己通過 API 構建應用,需要注意這個下限。

💡 建議: 如果你通過 API易 apiyi.com 自建應用調用 Claude API,
確保系統提示詞長度超過模型對應的最小緩存閾值,否則緩存不會生效。

爲什麼你看到 40 萬輸入 Token:Claude Code 的上下文構成

理解了緩存機制後,我們來拆解一下那個讓你震驚的"40 萬輸入 Token"到底由什麼構成。

claude-code-prompt-caching-token-optimization-reduce-input-cost-guide-zh-hant 图示

Token 消耗的 5 大來源

來源 佔比 40萬中約佔 特點
對話歷史累積 ~60% ~24萬 每輪對話都重新發送全部歷史
工具調用結果 ~20% ~8萬 文件讀取、grep 搜索結果駐留上下文
擴展思維鏈 ~10% ~4萬 前幾輪的 thinking block 變爲輸入
系統提示 + CLAUDE.md ~5% ~2萬 每條消息都攜帶
Tool 定義 ~5% ~2萬 所有可用工具的 schema

核心真相:對話越長,輸入越大

Claude Code 的工作方式是每次請求都重新發送完整對話歷史。這意味着:

  • 第 1 輪:輸入 ~2萬 Token(系統提示 + Tool 定義 + 你的問題)
  • 第 5 輪:輸入 ~10萬 Token(累積了 4 輪的對話歷史)
  • 第 15 輪:輸入 ~25萬 Token(包含大量文件讀取結果)
  • 第 30 輪:輸入 ~40萬+ Token(接近自動壓縮閾值)

但請注意:這些輸入中的絕大部分都是緩存命中的。第 30 輪的 40 萬 Token 中,可能只有 1-2 萬是新增的非緩存內容。

大代碼庫的特殊問題

Claude Code 不會自動加載整個代碼庫到上下文中。它按需讀取文件。但在大型代碼庫中:

  • 一次 grep 搜索可能返回大量結果,全部進入上下文
  • 探索性地讀取多個文件,每個文件內容都駐留在對話歷史中
  • Agent 模式自主執行多步操作,每步的工具調用結果都累積

你的客戶每次 40 萬 Token 的情況,很可能是以下原因疊加

  1. 代碼庫很大,Claude Code 讀取了大量文件進行分析
  2. 對話輪次較多,歷史累積
  3. 可能沒有及時使用 /compact/clear
  4. CLAUDE.md 文件可能較長

6 個實戰技巧:將輸入 Token 從 40 萬降到 5 萬

技巧一:精準指令,避免全局掃描

這是最重要也最容易執行的優化。

❌ 模糊指令(觸發大範圍文件掃描):
"幫我優化這個項目的性能"
"檢查代碼中的bug"
"重構這個模塊"

✅ 精準指令(只讀取必要文件):
"優化 src/api/handler.ts 中 processRequest 函數的響應時間"
"修復 src/auth/login.ts 第 45 行的空指針異常"
"將 src/utils/format.ts 中的 formatDate 函數從 moment 遷移到 dayjs"

模糊指令會導致 Claude Code 使用 Glob + Grep + Read 大量文件來"理解"你的需求,每個文件的內容都會永久駐留在對話歷史中。精準指令可以讓它只讀取 1-2 個相關文件。

Token 節省效果:減少 60-80% 的工具調用結果 Token

技巧二:及時使用 /clear 和 /compact

# 切換到不相關的任務時,清空對話
/clear

# 對話較長但任務還沒結束時,壓縮歷史
/compact

# 帶指令的壓縮,保留特定信息
/compact 保留代碼示例和 API 接口定義,其他可以精簡
命令 效果 適用場景 注意事項
/clear 清空全部對話歷史 切換到完全不同的任務 緩存全部失效
/compact AI 總結歷史,替換原文 長對話中間階段 緩存部分失效,但上下文大幅縮小

實際效果:一個 40 萬 Token 的對話,/compact 後通常可以壓縮到 5-8 萬 Token。

技巧三:優化 CLAUDE.md 文件

CLAUDE.md 會在每條消息中加載。一個 10,000 Token 的 CLAUDE.md,在 30 輪對話中會被髮送 30 次(雖然緩存命中後只收 0.1x 費用,但仍然佔據寶貴的上下文空間)。

優化建議:
├── CLAUDE.md 控制在 500 行以內(核心規則)
├── 把詳細的工作流說明移到 Skills 中(按需加載)
├── 把參考文檔放到 knowledge-base/ 中(需要時 Read)
└── 避免在 CLAUDE.md 中放大段示例代碼

🚀 實踐建議: 精簡 CLAUDE.md 不僅減少 Token 消耗,
還能讓 Claude Code 更專注於核心規則。
如果你在用 API易 apiyi.com 構建類似的 AI 編碼助手,
同樣建議控制系統提示詞長度。

技巧四:善用 Subagent 隔離冗長輸出

當需要執行會產生大量輸出的操作時,用 Subagent 代替直接執行:

❌ 直接在主對話中執行(輸出全部進入主上下文):
"運行測試套件並分析失敗原因"
→ 測試輸出可能有 50,000+ Token,永久駐留在對話歷史中

✅ 讓 Claude Code 使用 Subagent(輸出隔離在子進程中):
"用一個子任務運行測試套件,只把失敗的測試名和原因總結給我"
→ 主上下文只增加 ~500 Token 的總結

Token 節省效果:單次操作可減少 10,000-50,000 Token 進入主上下文

技巧五:選擇合適的模型和 effort 級別

任務類型 推薦模型 effort 級別 說明
簡單修改/格式化 Sonnet low 不需要深度思考
常規開發 Sonnet medium 性價比最高
複雜架構設計 Opus high 需要深度推理
代碼審查 Sonnet medium 性價比優於 Opus
# 降低思考深度,減少 thinking Token(後續會變爲輸入)
# 在簡單任務中設置更低的 effort
/effort low

# 或通過環境變量控制思維 Token 上限
MAX_THINKING_TOKENS=8000

擴展思維鏈 (thinking) 會在後續輪次變成輸入 Token 的一部分。降低 effort 級別可以顯著減少後續輪次的累積 Token。

技巧六:使用 /context 命令監控 Token 分佈

# 查看當前 Token 使用分佈
/context

/context 命令會展示當前上下文中各部分的 Token 佔比,幫你定位到底是什麼在消耗空間。常見發現:

  • 某次 grep 搜索返回了 20,000 Token 的結果但只有 5% 有用
  • 之前讀取的某個大文件已經不需要了但還在上下文中
  • CLAUDE.md 佔了意外多的空間

發現問題後,有針對性地使用 /compact/clear 處理。

💰 成本建議: 對於 API 按量付費用戶,這些優化技巧可以直接降低賬單。
通過 API易 apiyi.com 平臺的用量統計功能,可以清晰看到每次請求的 Token 分佈,
幫助你定位成本熱點。

實戰案例:從日均 $60 降到 $8

以下是一個真實的優化過程:

優化前(大型 Python 項目,重度 Claude Code 用戶)

日均使用情況:
├── 對話輪次:~50 輪/天
├── 平均輸入 Token:35-45 萬/輪
├── 緩存命中率:~70%(頻繁 /clear 和切換模型導致)
├── 日均 API 成本(Opus 4):~$60
└── 月均:~$1,320

優化後(應用 6 個技巧)

日均使用情況:
├── 對話輪次:~40 輪/天(更精準,不需要那麼多輪)
├── 平均輸入 Token:8-12 萬/輪(精準指令 + 定期 compact)
├── 緩存命中率:~92%(減少不必要的緩存打斷)
├── 日均 API 成本(Sonnet 4 爲主,Opus 僅用於複雜任務):~$8
└── 月均:~$176
優化項 節省佔比 說明
精準指令替代模糊掃描 ~35% 最大收益項
及時 /compact 和 /clear ~25% 控制累積膨脹
Sonnet 替代 Opus(80% 任務) ~20% 模型降級零感知
精簡 CLAUDE.md ~8% 減少每輪固定開銷
Subagent 隔離冗長輸出 ~7% 避免大塊結果污染上下文
降低 effort 級別 ~5% 減少 thinking Token 累積

常見問題

Q1: Claude Code 顯示的 40 萬 Token 是實際收費 40 萬嗎?

不是。Claude Code 會自動啓用 Prompt Caching,在一個活躍會話中,95%+ 的輸入 Token 通常是緩存命中,收費僅爲基礎價格的 0.1x。40 萬 Token 中,可能只有 2-4 萬 Token 按完整價格計費。你可以用 /context 查看實際的緩存命中率。通過 API易 apiyi.com 調用 API 同樣支持緩存機制。

Q2: 我用 Max 包月方案還需要關心 Token 消耗嗎?

需要關心,但原因不同。Max 包月不按 Token 計費,但有每週用量上限。過高的 Token 消耗會讓你更快觸達用量限制。精簡上下文既能延長可用時間,也能讓 Claude Code 更準確地理解你的需求(上下文越精準,回答越好)。

Q3: /compact 和 /clear 哪個更好?

取決於場景。如果你即將開始一個完全不同的任務,用 /clear 徹底清空更好。如果你還在同一個任務中但對話變得很長,用 /compact 保留關鍵上下文同時壓縮體積。/compact 支持自定義指令,比如 /compact 保留所有代碼修改記錄和API接口定義

Q4: 升級到最新版 Claude Code 會自動優化 Token 使用嗎?

是的,建議始終保持最新版本。Anthropic 持續優化 Claude Code 的上下文管理策略,包括自動壓縮觸發時機(當前約 83.5% 上下文佔用時觸發)、MCP 工具定義延遲加載(只加載工具名,用到時才加載完整 schema)等。新版本通常會帶來更好的緩存命中率和更智能的上下文管理。

claude-code-prompt-caching-token-optimization-reduce-input-cost-guide-zh-hant 图示

總結:理解緩存 + 精準使用 = 成本可控

Claude Code 的 Prompt Caching 是一個非常強大的自動優化機制——你不需要做任何配置,它就在替你省錢。但理解它的工作原理和失效條件,能幫你把省錢效果從"自動 70%"提升到"主動 95%"。

記住這 3 個核心原則

  1. 保持緩存活躍: 避免不必要的操作打斷緩存(頻繁切換模型、隨意 /clear)
  2. 控制上下文膨脹: 精準指令 + 定期 /compact,不讓對話歷史無限增長
  3. 選對工具和模型: 80% 的任務用 Sonnet 就夠,把 Opus 留給真正需要的場景

對於 API 按量付費用戶,推薦通過 API易 apiyi.com 統一管理 Claude API 調用,利用平臺的用量監控功能持續優化 Token 消耗。對於交互式重度用戶,建議直接上 Claude Max 包月方案,配合本文的優化技巧獲得最佳性價比。


📝 本文作者: APIYI 技術團隊 | API易 apiyi.com – 300+ AI 大模型 API 統一接入平臺

參考資料

  1. Anthropic Prompt Caching 文檔: 官方緩存機制詳解

    • 鏈接: docs.anthropic.com/en/docs/build-with-claude/prompt-caching
    • 說明: 緩存 TTL、定價倍率和最小長度要求
  2. Claude Code 成本管理指南: 官方 Token 優化建議

    • 鏈接: code.claude.com/docs/en/costs
    • 說明: Anthropic 官方推薦的成本控制策略
  3. Claude Code 最佳實踐: 上下文管理和效率優化

    • 鏈接: anthropic.com/engineering/claude-code-best-practices
    • 說明: 包含精準指令、compact 使用等實戰建議

發佈留言