跳转到内容

Claude Code 自动压缩阈值配置:autoCompactWindow 怎么设,以及怎么验证它真的触发了

约 12 分钟 难度:进阶 动手章

上下文自动压缩(auto-compact)的阈值可以调。设置环境变量 CLAUDE_CODE_AUTO_COMPACT_WINDOW,或在 settings.json 里写 autoCompactWindow 字段,把值设成目标 token 数。触发点不是这个数字本身,是这个数字的某个百分比:Sonnet 5 默认在原生窗口的约 96.7% 处触发压缩,设置这个值等于告诉 Claude Code「把窗口当作这么大来算百分比」。

环境变量:CLAUDE_CODE_AUTO_COMPACT_WINDOW

Section titled “环境变量:CLAUDE_CODE_AUTO_COMPACT_WINDOW”

官方文档(env-vars 页)直接给出这个变量:

Set the context capacity in tokens used for auto-compaction calculations… Use a lower value like 500000 on a 1M model to treat the window as 500K for compaction purposes.

model-config 页里 Sonnet 5 一节说得更具体:

Sessions auto-compact before the window fills, at about 967K tokens by default; set CLAUDE_CODE_AUTO_COMPACT_WINDOW to choose a different threshold.

这条是官方公开承诺的行为,写进 shell 配置或启动脚本都可以:

Terminal window
export CLAUDE_CODE_AUTO_COMPACT_WINDOW=400000

用户级配置文件(~/.claude/settings.json)里也能写同一个设置,字段名是 camelCase 的 autoCompactWindow

{
"autoCompactWindow": 400000
}

这个字段本身在公开文档的正文里没找到直接说明拼写的段落,官方文档明确写出来的开关是 autoCompactEnabled(控制自动压缩整体开不开),autoCompactWindow 的存在和行为是通过本机配置文件的内部 schema(字段描述为「Auto-compact window size」,类型 integer,取值范围 100000–1000000)和实际触发测试确认的,不是逐字抄自某一页官方文档。两种写法(环境变量 / 配置文件字段)设的是同一个底层参数,改一处就够。

触发点不是这个数字,是它的某个百分比

Section titled “触发点不是这个数字,是它的某个百分比”

读完文档不代表配置已经生效,配置是按会话(session)读取的,改完文件、当前会话不会立刻应用,需要开一个新会话才会重新读取 settings.json。验证方法是把阈值故意调得很低,直接观察压缩是否被触发,而不是等到真的用到接近原生窗口时才发现配置没生效:

{
"autoCompactWindow": 100000
}

把值改成 100000 后开一个新会话(同目录下 claude --resume 接上原会话也可以触发重新读取配置)。如果当前上下文已经接近或超过 100000 × 96.7% 这个区间,新会话启动或发下一条消息时应该能立刻看到压缩发生。实测中,重开会话后的系统提示里出现了 SessionStart:compact 相关的 hook 触发记录,这是压缩已经发生的直接证据,不需要靠肉眼判断上下文变短了没有。

确认触发之后,把值改回目标数值(例如 400000),验证到此结束:

{
"autoCompactWindow": 400000
}

相关但更激进的开关:CLAUDE_AUTOCOMPACT_PCT_OVERRIDE

Section titled “相关但更激进的开关:CLAUDE_AUTOCOMPACT_PCT_OVERRIDE”

如果不想改容量基准,只想改触发用的百分比本身,公开资料里出现过 CLAUDE_AUTOCOMPACT_PCT_OVERRIDE 这个变量。据反馈,它只能把默认百分比调低,不能调高,这一条行为细节来自社群交流而非独立核实,标注在这里作为线索,正式依赖它之前建议按前一节的方法自己测一遍。

  • autoCompactWindow 这个 camelCase 拼写只在本机配置文件的内部 schema 里见到,没有在官方文档正文里逐字确认过,字段语义可能随版本变化而不通知。
  • CLAUDE_AUTOCOMPACT_PCT_OVERRIDE 的「只能调低不能调高」尚未独立验证。
  • 96.7% 这个百分比是 Sonnet 5 文档给出的默认值,其他模型或未来版本是否相同没有逐一核对。
这一节有错或讲不清? 提个 Issue 直接改文档 请作者催更