跳到正文
FunCoding

搜索

搜索文档、智能体、博客、Skill 和 MCP

上下文窗口与自动压缩

设置自动压缩窗口(/autocompact、--autocompact、环境变量)、默认压缩阈值、网关与自定义模型 ID 的窗口修正,以及确认当前模型的位置。

阈值与变量行为以官方为准。

自动压缩窗口是上下文窗口在 Claude Code 压缩对话之前能填到多满。各压缩机制保留和丢弃什么,见上下文窗口文档的「压缩后保留什么」。

设置自动压缩窗口

有三个地方可以设置:

  • 本会话及以后:运行带值的 /autocompact,如 /autocompact 500k。Claude Code 把它作为 autoCompactWindow 保存到你的用户设置并应用到当前会话;如果托管设置这类更高优先级的设置范围设了该键,命令保存你的值但会话保持那个范围的窗口,命令会说明这一点。/autocompact auto 回到为你的模型调好的窗口。
  • 单次启动:启动 Claude Code 时传 --autocompact。该标志只对本次启动覆盖保存的设置而不修改它,claude --autocompact auto 即使保存的设置有值也以调好的窗口运行;与 /autocompact 不同,该标志不会被托管设置这类更高优先级范围抢占。
  • 脚本和云环境:设 CLAUDE_CODE_AUTO_COMPACT_WINDOW。设置期间它优先于命令、标志和设置,/autocompact 报告该覆盖而不是改变窗口。

命令和标志接受 100K 到 1M token 的窗口大小,形式可以是:纯 token 数(如 200000);带 k 或 M 后缀(如 500k、1M);100 到 1000 之间的裸数字,表示千(200 即 200,000)。环境变量只接受纯 token 数。Claude Code 把窗口限制在模型的上下文窗口之内。

默认压缩阈值

没设自动压缩窗口时,Claude Code 在对话到达模型的上下文限制时压缩,这些会话除外:

  • 云会话在对话接近模型限制时压缩。
  • 没有扩展上下文的 Sonnet 4.6 和 Opus 4.6 在 200K 边界压缩;Opus 4.8 及更新版本在以 200K 上下文窗口运行时(如在 Bedrock、Google Cloud 的 Agent Platform、Foundry 上)也是。
  • 设了 CLAUDE_CODE_DISABLE_1M_CONTEXT=1 时,有原生 1M 窗口的模型(如 Sonnet 5 和 Fable 模型)在 200K 边界压缩。
  • 以原生 1M 窗口运行的模型在窗口填满之前压缩,默认约在 967K token:在 Anthropic API 上包括 Sonnet 5、Fable 模型以及 Opus 4.7 及更新版本;在 Bedrock、Google Cloud 的 Agent Platform、Foundry 上,哪些模型以该窗口运行见「固定模型与覆盖」;在自定义 ANTHROPIC_BASE_URL 之后见上一页关于网关上下文窗口的说明。
  • 在 Claude Code 不认识的模型 ID(如 LLM 网关别名)上的会话,按 Claude Code 为该 ID 假定的上下文窗口压缩,见下一节。

修正网关或自定义模型 ID 的窗口

在 LLM 网关或其他自定义部署上,Claude Code 可能为模型 ID 假定一个与模型真实窗口不同的上下文窗口,无论它是否把该 ID 解析为某个 Claude 模型。设 CLAUDE_CODE_MAX_CONTEXT_TOKENS 为 Claude Code 应当假定的窗口。变量如何适用取决于 ID:Claude Code 把不以 claude- 开头的 ID(任意大小写),或带有 Claude Code 读取 ID 时会剥掉的后缀(如 Google Cloud 的 Agent Platform 用的 @YYYYMMDD 日期)的 ID,视作提供商或自定义写法(v2.1.259 之前不把剥掉的后缀算在内,所以带日期后缀的未识别 claude- ID 被当作不带后缀的裸 claude- 名)。三种情形要分开看:

  • 无法把提供商或自定义写法解析为 Claude Code 认识的模型,且 ID 不含 [1m]:变量直接适用,主动压缩按声明的窗口继续。
  • 无法解析且 ID 含 [1m](任意大小写):Claude Code 为它假定 1M 窗口,变量本身不适用;想在保留主动压缩的同时修正窗口,还要设 CLAUDE_CODE_DISABLE_1M_CONTEXT=1,此时 Claude Code 把该 ID 当作不带 [1m] 的同一写法来定大小,于是 CLAUDE_CODE_MAX_CONTEXT_TOKENS 在对那个不带标记的写法适用时适用。声明的窗口大于 200K 时 Claude Code 会显示「200K 限制未强制」的启动警告,这在该配置下是预期的。
  • ID 解析为 Claude Code 认识的模型,或是没有可剥后缀的裸 claude- 名(任意大小写):只有同时设了 DISABLE_COMPACT(禁用所有压缩)时变量才生效。例如包含 Claude Code 认识的 Claude 模型名的 ID(anthropic/claude-opus-4-8、us.anthropic.claude-…-v1:0、带日期的 claude-sonnet-4-5@20250929)会解析为该模型,包括同时含 [1m] 的 ID:即使设了 CLAUDE_CODE_DISABLE_1M_CONTEXT,Claude Code 也把 claude-opus-4-8[1m] 解析为 Opus 4.8。

对 Claude Code 不认识的模型 ID,设 CLAUDE_CODE_DISABLE_UNKNOWN_MODEL_WINDOW_ENFORCEMENT=1,让 Claude Code 只在 API 以它能识别的「过长」错误拒绝对话之后才压缩;网关把错误改写成 Claude Code 不认识的措辞时,不运行该恢复。

查看当前模型

有两个地方能看到你正在用哪个模型:你配置了的状态栏;以及 /status,它还显示你的账号信息。