CoreCode文件

用好 CoreCode

快取與計費

最後更新:

Claude Code 每一輪都會把系統提示、工具定義和整段對話重新送出一遍。命中提示快取時,這部分按快取讀取計費,價格只有正常輸入的 2.5%~10%,Opus 5.5 和 Sonnet 5.5 是 5%。所以快取命中率基本決定了你的花費。快取以外的省錢做法見 省錢指南。

快取命中率低?先看 auto 模式如果開著 Claude Code 的 auto 權限模式,又設定了 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 裡通常只有幾個 token1 倍

具體單價以 模型價格 頁為準。正常的 Claude Code 工作階段裡,每一輪只有新增的幾百到幾千 token 需要寫入,其餘幾十萬 token 都是快取讀取。一旦前綴變了,整段上下文就要按寫入價重來一遍,一次可能就是幾十萬 token。

CoreCode 做了什麼

快取在什麼時候失效,取決於用戶端送出的內容。下面這些情況是 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 每次都要重新寫入,而且下一次檢查也用不上這次寫的快取。在一個真實案例裡:

怎麼認出來

怎麼確認開了 auto 模式

怎麼處理

  1. 刪掉 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 說明已經生效。
  2. 不需要無人值守時,關掉 auto:按 Shift+Tab 切到 Manual 或「自動接受編輯」模式,這類檢查請求就不會再送。想讓以後每個工作階段都從 Manual 開始,在 ~/.claude/settings.json 裡寫:
    {
      "permissions": {
        "defaultMode": "default"
      }
    }
    想預設自動接受編輯,把 default 換成 acceptEdits。
  3. 換一個便宜的分類器模型: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"
      }
    }
    分類器負責判斷操作是否安全,換小模型會降低判斷品質,請自己權衡。
  4. 接受這部分開銷:auto 模式換來的是不用逐個確認。如果你需要它,這部分花費是正常的,不是中轉出了問題。

其他未命中原因

以下情況會讓 Claude Code 送出的前綴發生變化,下一輪整段重寫快取:

情況說明
工作階段中途切換模型快取按模型區分,切到別的模型等於從零開始。切回來時,原模型的快取可能已經過期。
切換思考強度或 /fasteffort 和 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 小時快取需要的請求標頭,不需要額外設定。

在日誌裡排查

開啟 使用日誌,按時間看一個工作階段裡的連續幾筆請求:

在 Claude Code 裡輸入 /usage(也可以用 /cost)可以看本工作階段的 token 用量和費用,/context 可以看上下文被什麼占滿了。

對著日誌還是看不出原因,把使用日誌裡那幾筆請求的時間發給我們,我們可以查上游帳號和路由。

帳單裡的其他模型

只用 Opus 寫程式,帳單裡也可能出現 Haiku 或 Sonnet,通常是這幾種情況:

在使用日誌裡按時間找到對應紀錄,就能看到每筆用的是什麼模型、花了多少錢。