Skip to content

Claude Code 会话恢复时 token 消耗异常飙升

问题

恢复(resume)Claude Code 历史会话时,即使只发一条简单消息,token 消耗也会在瞬间暴增——有用户报告恢复一个会话就消耗了 20~37% 的每周配额。

根因:Claude Code 恢复会话时会将完整的 JSONL 历史重新发送(重新加入上下文),如果会话积累了大量内容:

  • 多个 CLAUDE.md 文件
  • MCP 服务器的缓存输出
  • 大量工具调用的返回结果(文件读取、Bash 输出等)

……则恢复时的输入 token 会爆炸式增长。失败重试会让情况雪上加霜,每次重试都会再发一遍完整历史。

来源:GitHub Issue #38029

解决方案

目前官方尚未修复,以下为社区有效的缓解方案:

方案 1:在恢复前运行 /compact

/compact

/compact 会压缩当前会话历史,移除冗余的工具输出和 progress noise,保留语义上重要的对话轮次。在退出前执行一次,下次恢复时历史体积大幅缩小。

方案 2:定期使用 /clear 开启新会话

对于长期持续的任务,每完成一个阶段就 /clear 重置上下文,不依赖历史恢复。

方案 3:使用 SessionStart hook 监控大会话(提前预警)

~/.claude/settings.json 中添加:

json
{
  "hooks": {
    "SessionStart": [
      {
        "type": "command",
        "command": "bash -c 'STATE=\"/tmp/cc-tool-count-$(echo \"$PWD\" | md5sum | cut -c1-8)\"; if [ -f \"$STATE\" ]; then COUNT=$(cat \"$STATE\" 2>/dev/null || echo 0); if [ \"$COUNT\" -gt 100 ]; then echo \"⚠ 大会话:$COUNT 次工具调用,建议先运行 /compact\" >&2; fi; fi'"
      }
    ]
  }
}

工具调用次数超过 100 次时在恢复时发出警告,提示在继续前先压缩。

说明: Anthropic 工程团队已知晓此问题,Dispatch 功能的持久上下文设计是根本原因之一。如受影响较严重,建议在 GitHub Issue #38029 中留言以提高修复优先级。