Loading......

文章背景图

Claude Code 上下文窗口与自动压缩配置指南

2026-08-23
15
-
- 分钟
|

前言:Claude Code 是我日常使用频率最高的 Agent 工具。今天用 Skill 制作 PPT 时突然遭遇上下文溢出,排查后发现是因为更换了模型,却没有为新模型手动启用 1M 上下文,导致默认窗口只剩 20K——长任务直接爆掉。其实之前就有个疑问:调好 1M 上下文后,手动压缩命令 /compact 就消失了,翻遍文档也找不到。想着反正 1M 够用,就没深究。直到这次踩坑,才彻底弄清来龙去脉。于是把相关配置、环境变量和避坑要点整理成这份指南。


一、为什么需要调整上下文窗口

Claude Code 默认按模型自身上报的窗口运行。对于 200K 级别的默认窗口:

  • 长会话风险:多轮对话 + 大量工具调用,容易撞上限导致请求失败。

  • 未启用的扩展能力:部分模型支持 1M 长上下文(如 [1m] 变体),但默认不会开启。

  • 频繁压缩:自动压缩默认在接近窗口上限时触发,会打断思考节奏。

通过合理配置,可以:

  1. 扩大窗口到模型支持的最大值(如 1M),容纳更长会话。

  2. 调整自动压缩阈值,避免在关键对话中被压缩打断。

  3. 关闭自动压缩,把控制权完全握在自己手里(适合高阶用户)。


二、核心环境变量速查表

变量名

取值范围

作用

注意事项

CLAUDE_CODE_MAX_CONTEXT_TOKENS

整数(字符串)

覆盖模型默认上下文窗口

需配合 DISABLE_COMPACT=1 才生效

DISABLE_COMPACT

0 / 1

是否禁用所有压缩

1 = 禁用自动 + 手动 /compact

DISABLE_AUTO_COMPACT

0 / 1

仅禁用自动压缩

推荐保留手动 /compact 能力

CLAUDE_CODE_AUTO_COMPACT_WINDOW

整数(字符串)

覆盖压缩计算所用窗口大小

用于自定义触发阈值

CLAUDE_AUTOCOMPACT_PCT_OVERRIDE

1–100

覆盖默认压缩百分比

只能调早,不能调晚

ANTHROPIC_MODEL

模型名

指定主模型

1M 上下文必须带 [1m] 后缀


三、配置位置

Claude Code 读取配置的优先级(从高到低):

  1. 项目级<项目目录>/.claude/settings.json

  2. 用户级~/.claude/settings.json(Windows 为 C:\Users\<用户名>\.claude\settings.json

  3. 环境变量 / shell 配置

建议优先调整用户级,对所有项目统一生效。


四、配置方案

方案 A:启用 1M 上下文 + 700K 触发自动压缩(推荐)

{

"env": {

"ANTHROPIC_MODEL": "your-model[1m]",

"CLAUDE_CODE_MAX_CONTEXT_TOKENS": "1000000",

"CLAUDE_CODE_AUTO_COMPACT_WINDOW": "700000"

  }

}

关键点:

  • 三个变量缺一不可:ANTHROPIC_MODEL 必须带 [1m] 后缀,才能让 API 端点走 1M 路径。

  • 不要同时设置 DISABLE_COMPACT=1,否则自动压缩会被压制,700K 阈值失效。

  • CLAUDE_CODE_AUTO_COMPACT_WINDOW=700000 表示在 700K 时触发压缩,留出 300K 余量给后续对话。

方案 B:纯 1M 上下文,关闭所有压缩

{

"env": {

"ANTHROPIC_MODEL": "your-model[1m]",

"CLAUDE_CODE_MAX_CONTEXT_TOKENS": "1000000",

"DISABLE_COMPACT": "1"

  }

}

适用场景: 短会话但需要最大上下文,或希望完全掌控压缩时机。

风险: 会话撞到硬上限时会崩溃,需自行用 /context 监控。

方案 C:仅调整自动压缩阈值(保持默认窗口)

{

"env": {

"CLAUDE_AUTOCOMPACT_PCT_OVERRIDE": "80"

  }

}

适用场景: 200K 默认窗口够用,但希望早点触发压缩(80% 而非默认的 95%)。


五、常见问题与避坑

Q1:设置了 CLAUDE_CODE_MAX_CONTEXT_TOKENS=1000000 但不生效

原因: 缺少 ANTHROPIC_MODEL[1m] 后缀,或同时设置了 DISABLE_COMPACT=1 但模型本身不支持 1M。

解决:

  1. 确认模型名称带 [1m] 后缀。

  2. 确认模型厂商确实提供 1M 变体。

  3. 重启 Claude Code。

Q2:Messages 显示超过 100%

原因: 单条工具返回结果(如 Read 文件内容)较大,累计超出窗口。

解决:

  • 立即执行 /compact 释放空间。

  • 使用 Read 工具时传入 offsetlimit 参数,只读需要的部分。

Q3:自动压缩频繁触发,体验差

原因: 压缩阈值设置过低(如 CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=50)。

解决:

  • 提高 CLAUDE_CODE_AUTO_COMPACT_WINDOW 数值(如 700K → 800K)。

  • 或直接删除该变量,恢复默认行为。

Q4:想完全关闭自动压缩但保留手动 /compact

解决: 使用 DISABLE_AUTO_COMPACT=1 而非 DISABLE_COMPACT=1

{

"env": {

"DISABLE_AUTO_COMPACT": "1"

  }

}

Q5:配置改了但没生效

排查清单:

  • 是否重启了 Claude Code?

  • 是否修改了正确的 settings.json(用户级 vs 项目级)?

  • JSON 格式是否合法(逗号、引号)?

  • 环境变量值是否为字符串(如 "1000000" 而非 1000000)?


评论交流