Appearance
上下文与压缩机制(Claude Code)
本文解释 Claude Code 的上下文窗口机制,以及自动压缩是怎么触发的,帮助你理解为什么对话有时会"被压缩",以及如何调整触发阈值。
什么是上下文窗口?
你和 Claude 的每一轮对话,Claude 都需要把所有历史记录一起"装进脑子"才能理解你在说什么。这个"脑子"的容量是有上限的,这个上限就叫上下文窗口,单位是 token(可以理解为字数的计量单位,1000 个英文单词大约等于 1300 个 token)。
不同模型的上下文窗口大小不同,例如:
| 模型 | 上下文窗口 |
|---|---|
| Claude 4.5 / 4.6 Sonnet | 200,000 token |
| Claude 3 Opus | 200,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 会直接报错无法继续,提前压缩反而是更安全的做法。