CoreCode文档

用好 CoreCode

缓存与计费

最后更新:2026 年 11 月 1 日

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,通常是这几种情况:

在使用日志里按时间找到对应记录,就能看到每条用的是什么模型、花了多少钱。