登录
开发者文档
编码工具(VibeCLI)

长会话省额度

Claude Code 每一步都带着整段会话发出去。了解缓存怎么计费、什么时候会失效,以及怎样换新会话接着做,不丢进度也不多花钱。

Claude Code 每发一次请求,都会把整段会话一起发给模型:你说的话、它的回复、每一次工具调用和输出。

会话越长,每一步的输入就越多。

提示缓存让重复的那部分按低价计费,但缓存会过期。过期后的第一条消息,整段会话要按写入价重新算一遍。

缓存怎么计费

以 claude-opus-5 为例,按模型价格里的输入单价,一次请求的输入分三种状态计费:

状态什么时候出现按输入单价的倍数
缓存命中和上一步前缀相同,缓存还没过期0.1
缓存写入(5 分钟档)第一次发送,或缓存已经过期1.25
缓存写入(1 小时档)同上,开了 1 小时缓存时2

用令牌接入时,Claude Code 的缓存默认只保留 5 分钟。 通过 VibeAPI 使用就是这种情况;订阅账号是 1 小时。

也就是说,离开 5 分钟以上再回来,下一条消息会把整段会话重新写入一遍。

以一个 30 万 token 的会话为例:

回来时下一步的输入相当于
5 分钟内3 万 token 的输入价
超过 5 分钟37.5 万 token 的输入价,是前者的 12.5 倍

auto 分组的令牌没有提示缓存

Claude 系模型只有在「Claude 官方满血版」分组上才有提示缓存。auto 分组的 usage 里不返回缓存字段,见 Messages · 分组差异。

在 auto 上,长会话的每一步都按全价计算整段上下文,下面的做法对你更重要。

第 1 步:看清现在的会话

在 Claude Code 里运行两个命令:

  • /context:当前上下文占了多少 token,哪些部分占得多。
  • /usage:本次会话的用量。Session 一栏里有一行 Prompt cache (main),需要 Claude Code v2.1.251 及以上。

Prompt cache (main) 这一行会告诉你:

  • 命中率:多少输入是从缓存读的
  • 缓存失效(miss)了几次,最近一次重写了多少 token
  • 缓存现在是否还有效(warm / cold)

示例:

Prompt cache (main):   14 requests · 91% of input tokens from cache · 2 misses (last 6m 10s ago, 310.2k tokens re-cached) · warm (5m TTL, last activity 40s ago)

在控制台 · 使用日志里,每条请求也能看到缓存读、缓存写的 token 数。

缓存写得多、读得少,说明缓存经常失效。

第 2 步:按顺序调整

换一件事,就开新会话

一件事做完,下一件和它关系不大时,运行 /clear 开始新会话。

旧会话不会删除,想回去用 /resume。

为什么要清?旧会话里留着上一件事的工具输出。这些内容对新任务没有用,却会在之后的每一步里跟着发出去。

会话很长又放了一阵,开新会话接着做

满足这两条时,不要回原会话接着发:

  • 会话已经很长,比如 /context 显示超过 20 万 token
  • 离开的时间超过了缓存有效期

开一个新会话,在同一个项目目录里,把下面这段话发给它:

接着做这个项目上一个会话没做完的事:
1. 在 ~/.claude/projects 下找到这个目录对应的文件夹,按修改时间找到上一个会话的记录(不是你自己这个)。
2. 只读其中用户和助手的文字,不读工具调用和工具输出。
3. 用 git status、git log 和项目里的文件核对现在的状态。
4. 然后接着做。

手上有旧会话 ID 的,把「上一个会话」换成这个 ID。

这样做为什么省?

  • 会话记录里大部分是工具调用和输出,人和助手说的话只占一小部分。
  • 只读文字,新会话花几万 token 就能补上背景,比把几十万 token 的旧会话整段重写便宜得多。
  • 旧的工具输出是当时的快照。现在的状态以 git status 和文件为准,反而更可靠。

经常离开半小时左右再回来,改成 1 小时缓存

在 ~/.claude/settings.json 里加一行,需要 Claude Code v2.1.242 及以上:

{
  "promptCacheTtl": "1h"
}

怎么选:

  • 改成 1 小时:写入单价是 5 分钟档的 1.6 倍(2 对 1.25),适合经常停下来想一想、看一眼再回来的用法。
  • 保持默认:一次做完、不中途离开的,5 分钟档更省。

开启 1 小时缓存后还要注意一点:终端里的会话超过 20 万 token、闲置约 54 分钟时,Claude Code 会趁缓存没过期自动压缩一次。回来时会看到:

Compacted while idle, before the prompt cache expired

打算按上一节的做法换新会话、不需要摘要的,在同一个文件里关掉它:

{
  "promptCacheTtl": "1h",
  "idleCompaction": false
}

不要用 /compact 给长会话续命

/compact 会先把整段会话读一遍再写摘要:

  • 压缩一个大会话,本身就是一次大请求。
  • 缓存已经过期时,这一遍还要按写入价算。
  • 摘要保留哪些内容,由不得你决定。

想保留进度,用上面「开新会话接着做」的做法;不需要保留,直接 /clear。

新会话靠什么接得上

新会话能顺利接手,靠的是旧会话留在项目里的内容:

  • 提交说明写清改了什么、为什么。 新会话第一件事就是看 git log。
  • 定下来的约定写进 CLAUDE.md。 Codex 是 AGENTS.md。新会话启动时会自动读这个文件,不要只留在聊天里。
  • 做到一半的状态写进文件,比如一份待办清单。

这几样都在,换会话几乎没有损失。

确认省下来了

调整一两天后再看一次:

  1. /usage 里 Prompt cache (main) 的命中率更高,misses 更少。
  2. 控制台使用日志里,缓存写的 token 数占比下降。
  3. 同样的工作量,控制台的消耗曲线更平,不再有回到旧会话时的尖峰。

最后更新于