用好 CoreCode
快取與計費
Claude Code 每一輪都會把系統提示、工具定義和整段對話重新送出一遍。命中提示快取時,這部分按快取讀取計費,價格只有正常輸入的 2.5%~10%,Opus 5.5 和 Sonnet 5.5 是 5%。所以快取命中率基本決定了你的花費。快取以外的省錢做法見 省錢指南。
CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS,每次呼叫工具前都會多送一次幾乎不命中快取的檢查請求,在使用日誌裡顯示為「非串流」。這部分可能占到總花費的一半以上。見 auto 模式的開銷。快取怎麼計費
Anthropic 的提示快取按前綴比對:這次請求的開頭和之前快取過的內容一字不差,才能讀到快取。一次請求的輸入分三部分計費:
| 部分 | 含義 | 相對正常輸入價 |
|---|---|---|
| 快取讀取 | 和之前快取的前綴相同的部分 | Opus 5.5、Sonnet 5.5 為 0.05 倍;Haiku 5.5 為 0.1 倍;Fable 5.1 為 0.025 倍 |
| 快取寫入 | 這次新寫進快取的部分。5 分鐘快取和 1 小時快取價格不同 | 5 分鐘約 1.25 倍,1 小時約 2 倍 |
| 輸入 | 不進快取的部分,Claude Code 裡通常只有幾個 token | 1 倍 |
具體單價以 模型價格 頁為準。正常的 Claude Code 工作階段裡,每一輪只有新增的幾百到幾千 token 需要寫入,其餘幾十萬 token 都是快取讀取。一旦前綴變了,整段上下文就要按寫入價重來一遍,一次可能就是幾十萬 token。
CoreCode 做了什麼
- 原生透傳:
/v1/messages不做協定轉換。cache_control標記和anthropic-beta請求標頭原樣送達 Anthropic,1 小時快取也能用。 - 工作階段黏著:同一個 Claude Code 工作階段(按工作階段 ID 和模型區分)固定在同一個上游帳號,不會因為換帳號導致快取失效;服務重啟後綁定也會恢復。
- 按官方口徑計價:輸入、輸出、快取讀取、5 分鐘和 1 小時快取寫入分開計費,每筆紀錄都能在 使用日誌 裡查到。
快取在什麼時候失效,取決於用戶端送出的內容。下面這些情況是 Claude Code 自己的行為,換任何中轉或直連官方都一樣。
auto 模式的開銷
Claude Code 的 auto 權限模式會自己決定能不能執行一個操作,不再逐個問你。每個要檢查的操作,都需要有人判斷能不能放行。Claude Code v2.1.278 起,請求經過閘道或代理時,它會先請伺服器端在正常的模型請求裡一併審查,不再另送請求。CoreCode 原樣透傳這部分請求和審查結果:2026 年 10 月 30 日實測,auto 模式下 Opus 5.5 和 Sonnet 5.5 都由伺服器端審查,只有主對話請求,沒有額外開銷。
伺服器端不審查時,Claude Code 會退回舊辦法:每次呼叫工具前,另起一個分類器請求,把部分對話紀錄和待執行的操作送給模型,由模型判斷要不要放行。官方文件說明,用 API key 或中轉的帳號,這些分類器請求都計入 token 用量。在 CoreCode 上會退回這種方式的,幾乎都是設定了 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS 的工作階段:這個變數會順帶關掉伺服器端審查。設定 CLAUDE_CODE_AUTO_MODE_SERVER=0 也一樣。
這些檢查請求還可能被拒:檢查請求把一段對話紀錄交給模型,要它先寫出推理再給結論。CoreCode 上多次看到 Anthropic 的安全分類器把這類請求當作套取推理過程(reasoning_extraction)拒絕。被拒的是 Claude Code 自己送的檢查,不是你寫的內容,CoreCode 不會因此處罰你的帳戶,但同一個檢查不會再轉給上游,重送會被攔下(見 403)。刪掉 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS,交給伺服器端審查,就不會再單獨送這類請求。
退回時分類器用哪個模型:官方預設是 Claude Sonnet 5。CoreCode 提供的是 Sonnet 5.5、Opus 5.5、Haiku 5.5 和 Fable 5.1,沒有 Sonnet 5;按官方規則,這時 Claude Code 改用你目前工作階段的模型。所以用 Opus 寫程式時,每次檢查也按 Opus 計費。
退回到單獨的分類器請求時,開銷是這樣的。
問題在於,這個檢查請求只有開頭一小段能命中快取。剩下的幾萬 token 每次都要重新寫入,而且下一次檢查也用不上這次寫的快取。在一個真實案例裡:
- 主對話命中率超過 95%,每輪讀取二三十萬 token 的快取,沒有問題。
- 每次工具呼叫前多出一筆檢查請求:快取只讀了一兩萬,新寫入約 6.5 萬,輸出只有幾十個 token。
- 這些檢查請求只占請求數的三分之一,卻花掉了 60% 的額度。
怎麼認出來
- 使用日誌的「串流」一欄顯示「非串流」。Claude Code 的主對話都是串流的,非串流請求基本是這類檢查。
- 它通常出現在一筆串流請求後幾秒內;快取讀取少,快取寫入幾萬,輸出很短。
- 控制台會把它標成「未命中」。滑鼠移上去,提示裡會寫明多半是 auto 模式的檢查。概覽頁的提醒也會在這類請求占多數時單獨說明。
怎麼確認開了 auto 模式
- Claude Code v2.1.283 起,終端機和 VS Code 裡的新工作階段預設就從 auto 開始,不需要你做任何設定。狀態列顯示
⏵⏵ auto mode on。 - 啟動指令帶了
--permission-mode auto。 - 在工作階段裡按 Shift+Tab 切換過權限模式,輸入框下方顯示目前是 auto。
怎麼處理
- 刪掉
CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS:檢查~/.claude/settings.json的env、專案的.claude/settings.json和 shell 設定,把它刪掉;有CLAUDE_CODE_AUTO_MODE_SERVER=0的也一起刪。CoreCode 不需要這兩個變數,刪掉後開一個新工作階段,auto 模式改由伺服器端審查,單獨的檢查請求就沒有了。/status裡Auto mode server顯示Enabled說明已經生效。 - 不需要無人值守時,關掉 auto:按 Shift+Tab 切到 Manual 或「自動接受編輯」模式,這類檢查請求就不會再送。想讓以後每個工作階段都從 Manual 開始,在
~/.claude/settings.json裡寫:
想預設自動接受編輯,把{ "permissions": { "defaultMode": "default" } }default換成acceptEdits。 - 換一個便宜的分類器模型:Claude Code v2.1.302 起可以用環境變數
CLAUDE_CODE_AUTO_MODE_MODEL指定分類器模型,填完整的模型 ID。用 Opus 寫程式時,設成claude-sonnet-5-5,檢查就按 Sonnet 計費:
分類器負責判斷操作是否安全,換小模型會降低判斷品質,請自己權衡。{ "env": { "CLAUDE_CODE_AUTO_MODE_MODEL": "claude-sonnet-5-5" } } - 接受這部分開銷:auto 模式換來的是不用逐個確認。如果你需要它,這部分花費是正常的,不是中轉出了問題。
其他未命中原因
以下情況會讓 Claude Code 送出的前綴發生變化,下一輪整段重寫快取:
| 情況 | 說明 |
|---|---|
| 工作階段中途切換模型 | 快取按模型區分,切到別的模型等於從零開始。切回來時,原模型的快取可能已經過期。 |
切換思考強度或 /fast | effort 和 fast 模式也會改變請求,同樣會讓快取失效。 |
| 停頓超過 5 分鐘 | 預設快取只保留 5 分鐘,喝杯咖啡回來,第一輪就會整段重寫。經常長時間停頓的話見 1 小時快取。 |
| MCP 服務連線或中斷 | 工具定義在請求最前面,工具列表一變,整個前綴都會變。保持 Claude Code 預設的 MCP 工具搜尋開啟可以避免這種情況,不要設定 ENABLE_TOOL_SEARCH=false。 |
| 啟用或停用外掛 | 外掛帶有 MCP 服務時,效果和上一條一樣。 |
/compact | 壓縮會改寫歷史,壓縮後的第一輪需要重新寫入,之後工作階段變短、開銷更低。 |
| 升級 Claude Code | 新版本的系統提示不同,升級後第一輪會重寫。 |
新開工作階段、/clear、隔很久後再 --resume | 新工作階段要從頭寫一遍快取。恢復舊工作階段時,原來的快取多半已經過期。 |
編輯 CLAUDE.md 不會馬上讓快取失效,但也不會馬上生效,要等到 /clear、/compact 或重啟之後。怎麼寫好它見 CLAUDE.md 怎麼寫。
想多命中快取:一個任務盡量在同一個工作階段裡一口氣做完,不要在中途切模型和思考強度;上下文太長時用 /compact 壓縮,不要新開工作階段重新鋪一遍上下文。
1 小時快取
如果你經常停下來想五到六十分鐘再繼續,可以讓 Claude Code 寫 1 小時快取。在 ~/.claude/settings.json 的 env 裡加一行(需要 Claude Code v2.1.242 或更高):
"CLAUDE_CODE_PROMPT_CACHE_TTL": "1h"
1 小時快取的寫入價約為正常輸入的 2 倍,5 分鐘快取約為 1.25 倍。停頓少的話,每次寫入反而更貴;停頓多的話,省下的整段重寫要多得多。CoreCode 原樣轉發 1 小時快取需要的請求標頭,不需要額外設定。
在日誌裡排查
開啟 使用日誌,按時間看一個工作階段裡的連續幾筆請求:
- 快取讀取持續增長,快取寫入只有幾百到幾千:正常,每輪只寫新增的部分。
- 某一筆快取讀取突然變成 0 或很小,快取寫入接近整段上下文:前綴變了,對照上面的表看那段時間做過什麼。如果這筆前面停頓了五分鐘以上,就是快取過期。
- 穿插著「非串流」請求,每筆寫入幾萬:auto 模式的檢查,見 auto 模式的開銷。
在 Claude Code 裡輸入 /usage(也可以用 /cost)可以看本工作階段的 token 用量和費用,/context 可以看上下文被什麼占滿了。
對著日誌還是看不出原因,把使用日誌裡那幾筆請求的時間發給我們,我們可以查上游帳號和路由。
帳單裡的其他模型
只用 Opus 寫程式,帳單裡也可能出現 Haiku 或 Sonnet,通常是這幾種情況:
- 背景任務:Claude Code 會用小模型做對話摘要、產生標題之類的背景工作,每次只花一點點。
- 子代理:子代理可以單獨指定 Sonnet 或 Haiku。
- auto 模式的分類器:預設用 Sonnet,見上文。
在使用日誌裡按時間找到對應紀錄,就能看到每筆用的是什麼模型、花了多少錢。