为什么 Claude Code 显示 Prompt is too long
Claude Code 发送的每个请求不仅包含你的消息。Anthropic 的 /context 细分列出了组成部分:“系统提示词、工具、记忆文件和消息”。加上附加文件和粘贴的文本,总额可能会超过模型接受的范围。
消息的形式
错误参考文档列出了几个版本,每个版本都指向不同的情况。
交互形式。 在会话中,你会看到 Context limit reached · /compact or /clear to continue。Anthropic 指出,“当设置了 DISABLE_COMPACT 时,该行仅显示 /clear。”在 -p 输出和转录本中,文本保持为 Prompt is too long。
关闭自动压缩时。 如果你在用户设置中关闭了自动压缩,该行会说明这一点,并以 auto-compact is off · /config to turn it on 结尾。
压缩失败后。 “当自动压缩在本轮运行并因底层错误(如模型不可用或身份验证失败)而失败时,消息会在分隔符后指明该错误”。文本随后显示为 Prompt is too long · automatic compaction failed: 后跟原因。Anthropic 的建议是:“先解决指出的错误;在此之前,/compact 也会因同样的错误而失败。”
单次交换。 当对话只有一个提示词和一个回复时,没有更早的内容可以总结。Anthropic 表示“单次交换的对话没有更早的轮次可以总结”,消息会解释是什么填满了请求:对话自身的内容,或者是系统提示词、工具定义和附件。
关于 Bedrock 和网关
同样的情况可能会以其他措辞出现。Anthropic 指出,“Amazon Bedrock 将此情况报告为 Input is too long for requested model.,Claude Code 会以相同方式处理。”Claude 应用网关可能会将其报告为 capability_rejected: prompt_too_long,Claude Code 将该 token 视为相同的错误。
旧版本无法识别这些形式。文档称,在 v2.1.217 之前,“Claude Code 无法识别 Bedrock 的措辞,因此自动压缩从未被触发,且 /compact 也会因同样的错误失败。”如果你在 Bedrock 或网关后看到此错误,更新 Claude Code 是首要检查项。
为什么自动压缩没有阻止它
Anthropic 表示“自动压缩默认开启,通常可以防止此错误。”当你仍然看到该错误时,文档指出了几个原因:
- 自动压缩已关闭。 “如果你在
/config中或使用DISABLE_AUTO_COMPACT关闭了它,请重新开启。如果你坚持关闭,请在窗口填满前手动运行/compact。” - 压缩本身失败。 消息会指明原因。
- 单个提示词过大。 在简短对话中粘贴大量内容或附件,导致没有内容可压缩。
- 窗口大小错误。 “如果错误出现在支持更多 token 的模型的 200K token 附近,原因之一是 Claude Code 无法识别的模型 ID。”此时 Claude Code 会假设 200K 窗口,文档链接了如何提供真实窗口大小的方法。
- 你在压缩中途停止了它。 “如果错误出现在你停止 Claude 压缩对话之后,你的对话保持不变,且仍然大到需要压缩。请运行
/compact并重新发送消息。”
/compact 或 /clear:它们对会话的作用
/compact 保留摘要
/compact 总结了较早的轮次,以便对话符合上下文。Anthropic 的上下文窗口指南指出:“当长会话压缩时,Claude Code 会总结对话历史以适应上下文窗口。”
当自动压缩因该错误运行时,文档称“它通常总结你最旧的交换并保留最新的。”还有一种保底模式:“当无法总结任何完整的交换时,Claude Code 会逐字保留你最新的提示词,并总结之前的所有内容。”
/clear 重新开始
/clear 给你一个全新的对话。Anthropic 的交互模式指南称它“开始一个新会话”,并且“前一个会话的对话会被保留并可以恢复。”新会话开始时上下文中没有之前的历史记录。Anthropic 建议在无法压缩时使用它:“运行 /clear 重新开始。”我们的 Claude Code /clear 命令指南 涵盖了哪些内容可以在此操作后幸存。
如果 /compact 返回 Not enough messages to compact.,文档表示该对话为单次交换。在这种情况下,请运行 /clear 并减少粘贴的文本或使用更小的附件重新发送。
压缩保留了什么
这部分决定了你是否会丢失工作。Anthropic 的上下文窗口指南中有一个表格,说明了压缩后每种内容的处理方式。其中几行最为关键:
- 项目根目录的
CLAUDE.md和未指定范围的规则: “从磁盘重新注入”。 - 自动记忆(Auto memory): “从磁盘重新注入”。
- Claude 在计划模式下编写的计划: “从磁盘重新注入”。我们的 Claude Code 计划文件指南 解释了它的保存位置。
- Claude 读取或编辑过的文件: “Claude Code 会重新读取最多五个文件,按最近修改时间排序”。
- 带有
paths:前置内容的规则和嵌套的CLAUDE.md文件: 按需重新加载。 - 钩子(hooks)之前添加的上下文: “与对话的其余部分一起被总结”。
表格背后的模式很有用。以文件形式存储的指令和记忆会从磁盘恢复,最近编辑的文件会被重新读取。任何仅存在于对话中的内容(例如你在聊天中解释的决策),仅在摘要涵盖的范围内幸存。Anthropic 对特定范围的规则发出了警告:“如果规则必须在压缩后持续存在,请移除 paths: 前置内容或将其移至项目根目录的 CLAUDE.md。”
我们的子目录 CLAUDE.md 限制指南 涵盖了按需加载的文件。
腾出空间以防错误再次出现
错误参考文档列出了需要削减的内容:
- 查看是什么填满了窗口。 “运行
/context查看消耗窗口的细分:系统提示词、工具、记忆文件和消息”。 - 关闭不使用的 MCP 服务器。 禁用它们可以从上下文中移除“它们的工具定义”。
- 修剪记忆文件。 “修剪大型
CLAUDE.md记忆文件,或将指令移至仅在相关时加载的路径范围规则中”。 - 保持自动压缩开启。 或者在窗口填满前自己运行
/compact。
两个习惯也有帮助。大量粘贴和文件是填满窗口最快的方式,因此尽可能让 Claude 指向文件而不是粘贴内容。此外,委派工作可以保持主对话更小;我们的 Claude Code 子代理指南 解释了子代理开始时拥有什么以及它发回什么。如果会话不断重新读取大型代码库的相同部分,我们的停止 Claude Code 重新读取代码库指南 介绍了如何一次性提供该上下文的方法。
人们首先尝试的操作
再次发送消息。 请求仍然太大。请先压缩、清除或缩小内容。
直接运行 /clear。 这有效,但新对话不会携带旧对话的历史记录。如果对话超过一次交换,请先尝试 /compact。
在压缩失败后运行 /compact。 如果消息指出了底层错误,Anthropic 表示在解决该错误之前,/compact 也会因同样的错误失败。
为了避免摘要而关闭自动压缩。 除非你手动压缩,否则每当窗口填满时,错误都会再次出现。
在规则上信任摘要。 仅存在于对话中的规则会随其他内容一起被总结。请将它们放入文件中。
修复方法:阅读消息,尽可能压缩,并将规则保留在磁盘上
第 1 步:阅读你遇到的是哪种形式的错误
如果它指出了底层错误,请先修复它。如果它显示对话是单次交换,则 /compact 没有可处理的内容。如果它显示自动压缩已关闭,请在 /config 中重新开启或计划手动压缩。运行 /context 查看占用空间的内容。
第 2 步:压缩,或清除并以更小的内容重新发送
对于包含较早轮次的对话,运行 /compact 并再次发送消息。对于单次交换,运行 /clear 并减少粘贴文本、使用更小的附件或启用更少的 MCP 服务器重新发送。如果你需要回到更早的时间点,我们的 /rewind 指南 展示了如何回溯会话。
第 3 步:将必须保留的内容移至文件
在下一次长时间工作之前,将会话依赖的规则和决策放入项目根目录的 CLAUDE.md 或自动记忆中,压缩会从磁盘重新注入这些内容。对于仅在某些文件附近起作用的指导,请保留路径范围规则。
在 MemoryLake 中设置
压缩会恢复磁盘上的内容并总结其余部分。你在对话中解释的决策及其背后的原因,是会话达到极限时最容易丢失的部分。
MemoryLake 是一个记忆层,用于将这些决策保存在一个由你维护的地方,并提供给你连接的助手,如 ChatGPT、Claude Code 和 Codex。
你用自己的语言编写条目。你的 Claude Code 会话、转录本、CLAUDE.md 文件、自动记忆或任何供应商的存储都不会被读取、写入或删除。/compact、/clear 和自动压缩仍按 Anthropic 描述的方式工作。
第 1 步:创建 API 密钥
登录并从控制面板生成密钥。该密钥属于你的 MemoryLake 工作区,与你的 Claude 账户分开。

第 2 步:上传你的第一条记忆
从修复方法的第 3 步中那些对于 CLAUDE.md 来说太长或太私人的决策开始:为什么选择某种方法、排除了什么、下一步是什么。每个条目一个要点,并注明日期。

第 3 步:连接你的 AI 和 agent
连接 Claude Code 和你使用的任何其他助手。在 /compact、/clear 之后或在不同的工具中,相同的条目依然可用。

这在实践中改变了什么
第一个区别是在达到极限时能做出更冷静的选择。当决策被记录下来时,/clear 的损失较小,而 /compact 需要携带的内容也更少。
第二个区别是更小的窗口。你在需要时查阅的事实不必存在于每个请求中。
第三个区别是跨工具的连续性。相同的决策在 Claude Code、Codex 或 ChatGPT 中都可用。
Claude Code 上下文限制的最佳实践
保持自动压缩开启。 Anthropic 表示它通常能防止错误。
阅读完整消息。 它会告诉你压缩是失败了、关闭了,还是没有内容可压缩。
削减前使用 /context。 先查看是什么填满了窗口。
禁用未使用的 MCP 服务器。 它们的工具定义占用空间。
将规则保留在文件中。 项目根目录的 CLAUDE.md 和自动记忆在压缩后会恢复。
少粘贴,多引用。 大量粘贴填满窗口的速度最快。
更新 Claude Code。 此错误的几种形式在最近的版本中已得到修复。
结论
当对话加上附加文件超过模型的上下文窗口时,Claude Code 会显示 Prompt is too long,或者在会话中显示 Context limit reached。自动压缩通常能防止这种情况。如果没能防止,消息会告诉你原因:压缩因另一个错误失败、自动压缩已关闭,或者对话是单次交换,没有内容可总结。
/compact 保留摘要并从磁盘重新注入项目根目录的 CLAUDE.md、自动记忆和计划。/clear 则重新开始。修复指出的原因,尽可能压缩,并将你不能承受丢失的规则和决策保留在文件中,而不是对话中。