Claude Code 压缩失败:Error compacting conversation 原因与恢复
Error compacting conversation 只说明压缩出错,原因在同时出现的那行报错。先升级,再按原文选回退、局部压缩或 /clear 恢复。
文章目录

Claude Code 弹出红色的 Error compacting conversation,意思只是“这次压缩抛了错”,通知本身不写原因。不管是手动 /compact、自动压缩,还是回退菜单里的 Summarize,失败时都弹同一条通知。真正的原因在同时出现的那行报错里:Error during compaction: 后面的内容,或者以 Compaction failed ·、Compaction interrupted ·、Prompt is too long · automatic compaction failed: 开头的那一行。认出是哪一条,再选对应的恢复方法。
不管是哪一条,先做两件事:
- 在终端运行
claude update。截至 2026 年 10 月 16 日,Claude Code 最新版是 2.1.301,此前的版本陆续修掉了多种压缩失败,例如 2.1.85 修了“对话大到连压缩请求都装不下”时/compact失败,2.1.290 修了压缩报null is not an object。升级后重新运行一次/compact,很多会话就能继续。 - 准备回退或清空之前,用
/export把当前对话导出成纯文本留底。
还不行,就按损失从小到大依次试:回退几条消息再压缩,用 Summarize from here 或 Summarize up to here 只压一段,带重点说明重新 /compact,去掉大附件,最后把任务状态写进文件再 /clear。这些操作都不动磁盘上的代码:压缩和 Summarize 不改文件,回退菜单的 Restore conversation 只回退对话、保留当前代码。
Error compacting conversation 是什么意思:外壳通知,原因在旁边那行
在 2.1.301 里,这条红色通知会在三种压缩出错时弹出:手动 /compact、自动压缩,以及回退菜单里的 Summarize from here / Summarize up to here(局部压缩)。它只是把“压缩抛了错”告诉你,具体是什么错,看同时出现的报错行。
有三种情况不会弹这条通知,因为它们并不是压缩坏了:
- 压缩进行中你按了 Esc。2.1.133 起显示
Compaction canceled.,更早的版本会误弹红色通知,这个问题在 Claude Code 更新日志的 2.1.133 条目里修掉了。 /compact回答Not enough messages to compact.:没有更早的内容可以总结。- 配置里的 PreCompact hook 阻止了压缩。
所以如果你只看到这三条中的某一条,会话本身没出故障,按下面对照表里“不是故障”的部分处理即可。通知的触发条件依据 2.1.301 程序里的提示文字和更新日志,这条红色通知在交互界面中的实际触发没有复现过(复现范围见后文)。
压缩失败对照表:按同时出现的报错原文找原因
下面是会伴随 Error compacting conversation 出现的真正失败。报错原文以 Claude Code 2.1.301 为准,旧版本措辞可能不同。
| 同时出现的报错原文 | 含义 | 先这样恢复 |
|---|---|---|
Conversation too long. Press esc twice to go up a few messages and try again.,常见完整形式以 Error during compaction: Error: 开头 | 对话大到连压缩请求本身都装不下上下文窗口 | 清空输入框后按两次 Esc,选早几条的消息,用 Restore conversation 回退,再 /compact。2.1.85 和 2.1.284 都改进过这种情况,旧版本先升级 |
Compaction failed · conversation could not be reduced below the context limit | 压缩之后仍降不到上下文上限以下 | 用 Summarize from here 从较早的位置压缩,或带重点 /compact 只保留计划和改动;仍失败就把状态写进文件后 /clear |
Compaction failed · attached media exceeds size limits | 对话里的图片、PDF 等附件超出大小限制 | 按两次 Esc 回到加入大附件那一轮之前,或 /clear;大文件改成按路径引用 |
Compaction interrupted · This may be due to network issues — please try again. | 压缩过程中连接中断 | 网络恢复后重新 /compact |
Prompt is too long · automatic compaction failed: 后面跟具体原因 | 上下文已满,自动压缩又因另一个错误没跑成,例如模型不可用或认证失败 | 先解决冒号后面那个错误,否则 /compact 会因为同一个错误失败。2.1.229 起才显示这个原因,之前只显示 Prompt is too long |
Error during compaction: 后面跟其他内容 | 压缩请求遇到了别的错误 | 先 claude update,下文列了已经修过的几种 |

两条 Compaction failed · 的具体触发条件,官方文档没有写。表里给它们的恢复方法是推断:第一条按“对话太大”的通用处理;第二条参照 Claude Code 错误参考里的 Request too large 一节,那里对超过 32MB 请求上限的附件建议是按两次 Esc 退回加入大内容之前,或者 /clear。网络中断那条,合上 Mac 让它在压缩时休眠也会打断;2.1.290 修过休眠导致自动压缩直接放弃的问题。
Error during compaction: 后面跟的是其他内容时,先对照这些已在更新日志里修过的情况,版本低于对应号就升级:
Extra usage is required for long context requests:压缩恢复出来的长上下文会话时失败,2.1.113 修复。- Amazon Bedrock 的
Input is too long for requested model.:2.1.217 之前 Claude Code 不认这个说法,自动压缩不触发,/compact也跟着失败。Bedrock 上的其他 400 报错可以看 AWS Claude 报 400 怎么办:按报错原文逐条排查。 - 会话历史里有一条格式损坏的 MCP 工具通知,导致每一轮和
/compact都失败:2.1.280 修复。 - 总结请求被模型拒绝:2.1.282 起会自动换备用模型重试。
- 保存的会话记录里压缩标记字段缺失或损坏,压缩和恢复会话都失败:2.1.285 修复。
null is not an object:2.1.290 修复。- 通过自定义
ANTHROPIC_BASE_URL使用网关专用模型名,在 200K 附近以Prompt is too long · automatic compaction failed结束:2.1.299 修复。
看起来像压缩失败,其实不是:五条提示
| 提示原文 | 含义 | 怎么处理 |
|---|---|---|
Compaction canceled. | 压缩时按了 Esc | 需要时重新 /compact |
Not enough messages to compact. | 没有更早的内容可总结:只有一轮对话,或刚压缩过 | 上下文却已满,说明一条提示加上每次请求附带的内容就占满了窗口:/clear 后少贴内容、换小附件再发,或减少 MCP 工具和记忆文件 |
Compaction blocked by PreCompact hook: 后面是 hook 命令和它给出的原因 | 某个 PreCompact hook 以退出码 2 或 {"decision":"block"} 拦下了压缩 | 看原因决定;不再需要这个限制,就在 settings 里删掉或改写该 hook |
/compact isn't available in this environment. | 设置了 DISABLE_COMPACT=1,手动和自动压缩都关了 | 去掉这个环境变量 |
Context limit reached · /compact or /clear to continue | 上下文窗口满了,等你压缩或清空 | 运行 /compact;行尾还写着 auto-compact is off · /config to turn it on 时,去 /config 打开自动压缩 |
PreCompact hook 从 2.1.105 起可以阻止压缩。hook 写在哪、怎么配,见 Claude Code Hooks、Skills 与斜杠命令:区别、选型和最小配置。
让会话继续:从回退到 /clear 的六种恢复方法
下面按丢失的上下文从少到多排。前一种不奏效再换下一种。

回退几条消息,再重新压缩
Conversation too long 的原文已经给了办法:往回退几条消息再试。
- 确认输入框是空的。输入框里有文字时,按两次 Esc 会先清空文字(按 ↑ 能找回),而不是打开菜单。
- 按两次 Esc,或输入
/rewind,打开回退菜单。 - 选一条较早的消息,选 Restore conversation。这一步只回退对话,当前代码保持不变;那条消息的原始内容会回到输入框,方便你稍后重发。
- 运行
/compact。
有用户反馈,另一种做法也能让旧版本恢复:退出 Claude Code,用 claude --resume 回到同一会话,再 /compact。这属于社区经验,不保证在当前版本仍然必要。
只压一段:Summarize from here 与 Summarize up to here
整段对话压不动时,可以只压其中一段,让压缩请求变小:
- Summarize from here:把选中的消息及之后的内容压成摘要。适合后半段是一长串调试输出的情况,前面的任务说明保持原样。
- Summarize up to here:把选中消息之前的内容压成摘要,之后的消息原样保留。
在回退菜单里用方向键高亮其中一项,在 add context (optional) 处输入你希望摘要保留的重点,再按 Enter;直接按数字键会不带说明立即压缩。原始消息仍保存在会话记录里。局部压缩同样是压缩,失败时也会弹 Error compacting conversation,要看同时出现的报错行。
带重点说明重新 /compact
/compact 后面可以跟一段说明,让摘要只保留你指定的内容,例如官方示例 /compact keep only the plan and the diff,也可以写中文:/compact 只保留当前计划、已改文件和下一步。摘要里留下的东西少,压缩后剩余空间就多,也不容易压完马上又满。
去掉大附件
报错提到附件,或者你记得失败前刚贴过大图、PDF,就按两次 Esc 回到加入它那一轮之前,用 Restore conversation 回退。之后让 Claude 按路径读取大文件,它可以分段读,不必一次装进上下文。
先修好底层错误
Prompt is too long · automatic compaction failed: 冒号后面写的才是要处理的问题。官方错误文档举的例子是模型不可用和认证失败:模型不可用就先用 /model 换一个可用的模型,认证失败就先重新登录。这个错误不解决,/compact 会因为同一个原因失败。详见 Claude Code 错误参考里的 Prompt is too long 一节。
把状态写进文件,再 /clear
前面都不行,或者这段对话已经不值得保留,就换一个空会话继续。先让 Claude 把当前任务、已做的决定、改过的文件和下一步写进计划文件或项目根目录的 CLAUDE.md,再运行 /clear,在新会话里让它读这个文件接着做。
写进文件是因为文件不受压缩影响。按 Claude Code 上下文窗口文档里“压缩后保留什么”一节,项目根目录的 CLAUDE.md、不带路径限定的规则、自动记忆和计划模式写下的计划,压缩后都会从磁盘重新载入;只存在于对话里的信息则会被总结掉或丢失。长期规则该放哪一层,见 Claude Code Memory 指南(2026):CLAUDE.md、auto memory 与插件怎么分工。
/clear 可以撤销:用 /resume 回到原来的对话;如果还在同一个 Claude Code 进程里,回退菜单顶部会多出一项 previous session,选它也能回去。
Autocompact is thrashing:压缩成功了,但三轮内又满
完整提示是:
Autocompact is thrashing: the context refilled to the limit within 3 turns of the previous compact, 3 times in a row. A file being read or a tool output is likely too large for the context window. Try reading in smaller chunks, or use /clear to start fresh.这条不属于压缩失败:压缩本身成功了,只是每次压完,某个文件或工具输出又在 3 轮内把上下文填满,连续 3 次后 Claude Code 停下,免得白白消耗 API 调用(这个保护从 2.1.89 开始)。按 Claude Code 故障排查文档的 thrashing 一节,处理顺序是:
- 让 Claude 分段读那个大文件,比如只读某个行范围或某个函数。
- 带重点
/compact,丢掉那段大输出,例如/compact keep only the plan and the diff。 - 把读大文件的工作交给子代理(subagent),文件内容留在它自己的上下文窗口里。
- 之前的对话不再需要,就
/clear。
/clear 之后仍然出现,运行 /context,比较 Messages 一行和上面其他几行:Messages 最大,说明新对话里还是有文件或工具输出在撑满窗口,重复 1 到 3;其他几行加起来更大,说明会话一开始载入的系统提示、工具定义和记忆文件就占掉了大部分空间,要削减启动时载入的内容。MCP 工具定义和大返回怎么排查,见 Claude Code MCP 上下文爆掉:排查占用、工具搜索与输出压缩。
另外看一眼窗口大小是否被算小了。原生 100 万 token 窗口的模型(Fable、Sonnet 5 及以后、Haiku 5.5、Opus 4.7 及以后)默认在约 967K token 时自动压缩;Claude Code 认不出的模型 ID(比如 LLM 网关里的别名)一律按 200K 计算。用的模型明明支持更大窗口,却总在 200K 附近反复压缩或报错,就按 Claude Code 模型配置文档里修正网关模型窗口的说明处理:先 claude update,仍不认识再用 modelOverrides 把你的 ID 映射到对应模型。2.1.286 起,如果是降级备用模型把窗口从 1M 降到了 200K,thrashing 提示里会直接写出来。
自动压缩开关:DISABLE_COMPACT 等三种关法与 /autocompact
| 设置 | 自动压缩 | 手动 /compact | 说明 |
|---|---|---|---|
环境变量 DISABLE_COMPACT=1 | 关 | 不可用,回答 /compact isn't available in this environment. | 上下文满了只能 /clear |
环境变量 DISABLE_AUTO_COMPACT=1 | 关,空闲压缩也关 | 可用 | 窗口满之前要自己 /compact |
/config 里的 Auto-compact 开关,即设置项 autoCompactEnabled: false | 关 | 可用 | 窗口满时提示行会写 auto-compact is off · /config to turn it on |
/autocompact 加 token 数,如 /autocompact 500k | 提前到指定位置触发 | 可用 | 范围 100K 到 1M,2.1.288 起按模型分别保存 |
关掉自动压缩并不能避免报错,只是把“自动压缩失败”换成了 Context limit reached。长会话里更有用的是把自动压缩的触发点调早一些,或者在开始一段新任务前主动带重点 /compact。
2.1.299 起还有空闲压缩:超过 200K token 的对话闲置约 54 分钟后,会在 1 小时提示缓存过期前先压缩,下次发消息就不必把整段对话重新处理一遍;不想要可以在 settings.json 里设 "idleCompaction": false。压缩与缓存失效对费用的影响,见 Claude Code 缓存未命中 token 成本:一次对话为什么突然变贵。
在 Claude Code 2.1.301 上跑出的提示,和没能复现的几条
2026 年 10 月 16 日,在 macOS 上用 Claude Code 2.1.301 的非交互模式(claude -p,模型 Haiku 5.5,总花费约 $0.01)实际运行的结果:
- 全新空会话里
/compact:没有输出,也没有报错。 - 只有一轮问答的会话里
/compact:成功。 - 刚压缩完再
/compact:返回Not enough messages to compact.。 - 配置一个以退出码 2 结束的 PreCompact hook 后
/compact:返回Compaction blocked by PreCompact hook:,后面是 hook 命令和它输出的原因。 - 设置
DISABLE_COMPACT=1后/compact:返回/compact isn't available in this environment.。
没有复现的:Conversation too long、两条 Compaction failed ·、Compaction interrupted、thrashing,以及交互界面里的红色通知本身。前几条需要接近上下文上限的超长会话才会触发。上文对它们的解释来自 Claude Code 官方文档、更新日志和 2.1.301 程序里的提示文字。
升级到 2.1.301 后仍复现:用 /feedback 或 GitHub issue 报告
先用 claude --version 确认已经是最新版。升级后同一个会话仍然压不动,就报告给 Anthropic:
- 在 Claude Code 里运行
/feedback,可以选择附带多少会话历史,发送前有确认页。2.1.149 起报告会包含压缩之前的那部分对话。通过第三方提供商或没有登录 Anthropic 账号时,报告会存到本地的~/.claude/feedback-bundles/,需要你自己转交。 - 或者在 Claude Code 的 GitHub issue 列表提交,写明版本号、完整报错行、手动还是自动压缩,以及
/context的输出。
Claude Code 压缩失败的常见问题
Claude Code 压缩失败会丢掉已经改好的代码吗?
不会。压缩和 Summarize 只处理对话,不改磁盘上的文件;回退菜单里的 Restore conversation 也只回退对话、保留当前代码。只有选 Restore code 或 Restore code and conversation 才会把文件改回去,压缩失败时用不到这两项。
关掉自动压缩能避免 Error compacting conversation 吗?
不能。关掉后窗口满了会停在 Context limit reached,还是要你手动 /compact 或 /clear,手动压缩一样可能失败。更稳妥的是用 /autocompact 把触发点提前,并在切换任务时主动压缩或清空。
压缩时报 thinking blocks cannot be modified 怎么办?
这条报错的修复办法目前只有用户反馈:关掉终端,用 claude --resume 回到会话,必要时用 /model 换个模型再压缩。这些反馈出自 2025 年底前后的旧版本,先升级到最新版再试;仍出现就按上一节报告。
Claude Code 压缩一直转圈、很慢,是卡住了吗?
先看进度。2.1.283 起,压缩进度的计时从压缩开始算,并实时统计摘要已生成的 token 数;2.1.228 起,重试倒计时和停滞提示也会在压缩期间显示。数字还在涨就是在工作。想放弃就按 Esc,会显示 Compaction canceled.。全屏模式下 /compact 和自动压缩时界面短暂冻结的问题,2.1.301 修复了。
claude.ai 网页里的“正在压缩对话”也这样处理吗?
不适用。claude.ai 网页聊天的对话压缩,以及 Claude API 的服务端 Compaction,都是和 Claude Code 不同的产品,上面的命令和设置对它们无效。
参考来源6
本文引用的外部页面,按正文出现顺序排列。最后更新于 2026年10月16日。
参考来源6
本文引用的外部页面,按正文出现顺序排列。最后更新于 2026年10月16日。
- 1.Claude Code 更新日志raw.githubusercontent.com/anthropics/claude-code/main/CHANGELOG.md
- 2.Claude Code 错误参考里的 Request too large 一节code.claude.com/docs/en/errors
- 3.Claude Code 上下文窗口文档里“压缩后保留什么”一节code.claude.com/docs/en/context-window
- 4.Claude Code 故障排查文档的 thrashing 一节code.claude.com/docs/en/troubleshooting
- 5.Claude Code 模型配置文档里修正网关模型窗口的说明code.claude.com/docs/en/model-config
- 6.Claude Code 的 GitHub issue 列表github.com/anthropics/claude-code/issues





