Claude Code通用

长会话 Token 消耗失控?上下文管理的 5 个技巧

一场 Claude Code 会话开了三小时还在跑,回头看消耗已经几百万 Token。问题不是"用太多",是上下文管理失控。这篇给出 5 个具体技巧把它压回来。

我有一次让 Claude Code 修一个棘手的 bug,会话开了三小时多。最后修好了,但当晚账单 +18 美元——同一个 bug 我同事手动找估计两三小时也找出来了,他时薪没我一晚上的 AI 账单贵。

那次之后我重视了一件事:长会话不是 Token 消耗的 enemy,失控的上下文管理才是

长会话的 Token 怎么烧掉的

会话越长,每次新消息发出时实际的 input Token 越多。原因是 input 包含完整对话历史。

举例:

  • 会话开始第 1 条消息:input 大约 5K Token(系统提示 + CLAUDE.md + 当前文件树)
  • 第 10 条消息:input 大约 50K Token(前 9 条的对话内容都被纳入)
  • 第 50 条消息:input 大约 300K Token(已经接近模型上下文上限)
  • 第 100 条消息:input 已被自动 truncate,但 truncate 之前一定经历过 500K+ 的高位

每条消息都按当前完整 input 计费。50 条消息可能累计 input Token 达到 1000 万。即使按缓存价(10% 原价),也要好几美元。

技巧 1:定期 /compact

Claude Code 自带 /compact 命令——把当前会话历史压缩成几百字摘要,保留任务关键信息。

我的规则:

  • 每 30-60 分钟一次——按时间,不按消息数
  • 跨阶段时主动——比如"找完 bug,开始改代码了",先 compact
  • Output Token 突然变长——说明模型在长输出,下一轮把它压一下

/compact 本身要消耗 Token(让模型读完整历史 + 生成摘要)。一次 compact 大约 5-15K Token——但回本快,下条消息开始 input 直接降回 5-10K。

技巧 2:阶段性切 session

并不是所有事都要在一个 session 里完成。

  • 调研阶段一个 session(让模型理解问题)
  • 设计阶段一个 session(确定方案)
  • 实施阶段一个 session(写代码)

每次切 session 损失的"前情提要"靠的是 CLAUDE.md / AGENTS.md 这种持续性文件——而不是临时的会话历史。

切 session 让缓存重新建,但比起带着一团 30 万 Token 的旧历史走完全程,新建反而便宜。

技巧 3:减少"模型读全仓"的频率

长会话最烧 Token 的瞬间不是聊天,是 Agent 调用工具读文件——尤其是大文件、多文件。

  • 明确告诉模型只读哪些文件:"只看 src/auth/ 下面的文件"
  • 不让它再 grep——你已经知道相关文件,直接 @ 文件给它
  • 大文件提前精简——把 5000 行的某个文件相关的 200 行单独抓出来给它

我有一段时间养成了"让 Claude Code 自己探索"的习惯——结果它每次会议都把 30 个文件读一遍。现在我改成提前定位,单次会话 Token 直接砍半。

技巧 4:警惕 Agent 循环陷阱

Agent 模式(让模型自己规划、读、写、验证)的循环最容易长期失控。

  • 设置时间上限——大任务 30 分钟没出结果,停下来检查
  • 看循环步数——如果 Agent 已经做了 50 次工具调用还在循环,说明走偏了
  • Output Token 在涨但没新输出——模型在重复推理同一件事

我现在的习惯是 Agent 任务超过 20 分钟就主动 Ctrl+C,看一下进展。多数时候不是模型快做完了——是它困在某个细节里出不来。

技巧 5:把"会话历史"当成可丢弃资源

长会话最反直觉的优化:历史不重要

很多人舍不得退出当前会话,因为"前面的讨论好不容易建起的上下文不能丢"。但其实那些讨论里 90% 是冗余——模型来回试错的过程不该被反复重读。

真正重要的是结论——任务怎么实施、关键决策是什么、文件改动方案。这些应该被你记下来(写到 PR 描述、commit message、设计文档),而不是依赖会话历史。

把结论保存好,会话历史就是消耗品。该 compact 就 compact,该重开就重开。

怎么知道自己的会话有多长

抽象讲容易。具体看自己的会话长度分布——

打开 Vibe Usage 看自己 Claude Code 的会话统计。它能告诉你:

  • 你每次会话的中位数和 p90 累计 Token 数
  • 哪些会话异常长(超过 p90 那种)
  • 长会话主要发生在哪些项目上
  • 你的会话长度趋势——是不是在变长?

我自己的数据:装 Vibe Usage 之前,我的 Claude Code 会话 p90 约 280 万 Token。系统性应用上面 5 个技巧之后,p90 降到 120 万。同样产出,消耗砍半。

不是为了省,是为了集中

控制上下文其实不光是省 Token——它是让模型给出更好结果的前提。50 万 Token 的会话里模型必然会忽略某些细节,注意力被稀释。

短而专注的会话,模型给的代码质量也更高。

Vibe Usage 装上看一下自己的会话长度分布,你会发现优化它有双重收益。

相关阅读

相关阅读

长会话 Token 消耗失控?上下文管理的 5 个技巧