Skip to content

上下文与压缩机制(Claude Code)

本文解释 Claude Code 的上下文窗口机制,以及自动压缩是怎么触发的,帮助你理解为什么对话有时会"被压缩",以及如何调整触发阈值。


什么是上下文窗口?

你和 Claude 的每一轮对话,Claude 都需要把所有历史记录一起"装进脑子"才能理解你在说什么。这个"脑子"的容量是有上限的,这个上限就叫上下文窗口,单位是 token(可以理解为字数的计量单位,1000 个英文单词大约等于 1300 个 token)。

不同模型的上下文窗口大小不同,例如:

模型上下文窗口
Claude 4.5 / 4.6 Sonnet200,000 token
Claude 3 Opus200,000 token
部分扩展版本1,000,000 token(1M)

Claude Code 怎么计算上下文?

Claude Code 以当前使用模型的最大上下文窗口作为基准。比如你用的是 1M 上下文的模型,基准就是 1,000,000 token。

关键点:Claude Code 计算的是"累计消耗",而不是"当前输入大小"。

举个例子:

你在一个长对话里,单次输入可能只有几百字,折算成 token 大概 2~3 万。但这个对话已经进行了很久,历史消息、代码、文件内容全部叠加,累计消耗的 token 已经达到了 80 万。

这时候即使你这次只发了一句话,Claude Code 也会判断"累计上下文已经达到阈值",触发压缩。


自动压缩机制

当累计上下文达到设定的百分比阈值时,Claude Code 会自动对历史内容进行压缩(summarize),把早期的对话内容浓缩成摘要,释放空间,让对话可以继续。

压缩后你可能会注意到:

  • 之前的一些细节 Claude 不再记得
  • 对话上下文看起来变短了
  • 缓存失效,下一次请求费用可能稍高

这是正常行为,不是 bug。


调整压缩触发阈值

控制压缩触发时机的参数是:

txt
CLAUDE_AUTOCOMPACT_PCT_OVERRIDE

默认值一般为 100(即撑满才压缩)。推荐设为 80,即累计消耗达到上下文窗口的 80% 时提前压缩,避免在极限状态下出现异常。

配置方法: 打开 settings.json(路径见 手动配置-Claude Code),在 env 里加入这个参数:

json
{
  "env": {
    "ANTHROPIC_AUTH_TOKEN": "sk-xxxxxxxxxxxxxxxxxx",
    "ANTHROPIC_BASE_URL": "https://xxx.example.com",
    "CLAUDE_AUTOCOMPACT_PCT_OVERRIDE": "80"
  }
}
参数值含义
100撑满上下文才压缩(默认,风险较高)
80达到 80% 时压缩(推荐,提前释放空间)
60达到 60% 时压缩(更激进,保留更多余量)

💡 值越小,压缩越频繁,每次对话保留的历史越少,但也越不容易因上下文溢出而出错。根据自己的使用习惯选择,一般用 80 就够了。


常见问题

Q:压缩之后 Claude 会"忘事"吗?

A:会的,压缩本质是把早期对话浓缩成摘要,细节会丢失。如果你有需要 Claude 始终记住的内容(比如项目背景、代码规范),建议写在项目根目录的 CLAUDE.md 文件里,Claude Code 每次都会优先读取这个文件。

Q:我能关掉自动压缩吗?

A:不建议关闭。上下文超出窗口上限时,Claude Code 会直接报错无法继续,提前压缩反而是更安全的做法。

给 Claude Code / Codex 用户准备的中转站文档