Claude Code 的 Prompt is too long 错误表示发送的输入超出了上下文窗口的上限。在交互界面中,基本形式是以 Context limit reached 开头的一行;带有原因的较长形式,则仍以 Prompt is too long · 显示。字符串的后半部分因情况而异,那里写着下一步该怎么做。请把你屏幕上的字符串与下面的列表对照。

# 交互界面(通常)
Context limit reached · /compact or /clear to continue

# 交互界面(关闭了自动压缩时)
Context limit reached · /compact or /clear to continue · auto-compact is off · /config to turn it on

# 交互界面(用 DISABLE_COMPACT 完全禁用压缩时)
Context limit reached · /clear to continue

# -p 的输出与对话日志
Prompt is too long

# 自动压缩因其他错误而失败时
Prompt is too long · automatic compaction failed: <导致失败的错误>

# 只有一轮往返的对话,没有可总结的历史时
Prompt is too long · this conversation is a single exchange and cannot be compacted — …
Prompt is too long · the request is ~<N> tokens (limit <上限>) … A single-exchange conversation cannot be compacted; …

# 通过 Amazon Bedrock 使用时
Input is too long for requested model.

# /compact 本身失败时(第 4 节)
Error during compaction: Conversation too long. Press esc twice to go up a few messages and try again.

# API 的响应正文(数字仅为示例)
prompt is too long: 209117 tokens > 200000 maximum

如何立即恢复 →

输入不只是刚刚键入的文字,还可能包括对话历史、已读取的文件、工具结果和指令。API 响应正文中的 209117 tokens > 200000 maximum,表示输入的 209,117 个 token 超过了 200,000 个 token 的上限。上下文窗口本身同时涵盖输入与本次生成的输出;这个错误表示仅输入一侧就已超过上限。它的恢复办法与耗尽计划在一段时间内可用额度的 usage limit 不同。

历史过长时用 /compact,首条输入过大时缩减输入,压缩报错时先处理提示的原因。这是几条基本恢复路径。自动压缩默认启用,通常能防止这个错误。即便如此仍然出现时,分岔点就是这三种情况。本文依据截至 2026 年 9 月 21 日的 Claude Code 官方错误文档与 API 规范,介绍原因、恢复步骤及 200K/1M 的使用条件。直接调用 API 的情况另行说明。

Claude Code

同样是“太长”,需要缩减的内容可能不同

长对话进行到一半

先总结较早的历史。如果压缩后立即再次占满,应将大批量读取拆开。

初始输入已经过大

没有更早的对话可供总结。应先减少粘贴内容、附件、指令及工具带来的开销。

压缩本身失败

先解决同时报告的原因,例如认证失败或模型不可用。仅反复压缩无法修复这些问题。

用 /context 查看窗口构成,用 /usage 查看一段时间的消耗或计划额度。两者都涉及 token,但衡量的是不同内容。

1. 这个错误是什么意思

上下文窗口限制模型在一次回复中能够参考和生成的信息总量。它按 token 而非字符计算,既包括输入,也包括本次回复的输出和思考 token。从 API 缓存读取的输入仍占用窗口。缓存会改变价格或处理过程,却不会让这部分输入不占空间。参见 Anthropic 上下文窗口规范。

在这个限制下,当 Prompt is too long 出现时,说明准备发送的输入本身就已经装不进窗口。即使问题很短,带上之前的历史或文件后,整个请求仍可能很大,因此只缩短最后一句不一定有效。基础知识见上下文窗口是什么?

接近上限时,Claude Code 会清除较早的工具输出,并在需要时总结对话。即便如此仍会停下,通常是因为大段粘贴、关闭了自动压缩,或压缩处理本身失败。总结后立即再次读取同一个巨大文件,也可能重新填满窗口。属于哪一种,可以从开头那个字符串的后半部分判断。如果是 automatic compaction failed:,后面会接着压缩失败的原因;如果是 single exchange,说明没有可总结的历史;如果是 auto-compact is off,说明自动压缩已关闭。

2. 什么会占满上下文窗口?

下面的构成依据 Claude Code 工作原理说明。保存的对话日志不等于当前发给模型的内容;清除较早的工具结果或总结历史,会改变当前窗口中的内容。

组成部分进入窗口的内容应检查什么
对话历史当前请求中发送的往返消息;压缩会将其中一部分替换为摘要/compact 用于同一任务;/clear 用于下一项无关任务
文件与工具结果读入的文件内容、搜索结果、命令输出等缩小搜索范围、只读取相关行,或让子智能体进行详细调查
MCP工具名称与服务器指令。默认由 Tool Search 在需要时加载详细定义通过 /context 检查实际开销;停用不用的服务器时,使用 /mcp
CLAUDE.md 与记忆适用的指令和已加载的记忆;并非所有自动记忆文件都会始终出现常驻规则保持简短,将只适用于特定任务的说明另行保存
技能通常启动时加载说明,使用时加载正文;某些设置也可延后说明的加载检查不必要的自动调用候选,以及过长的技能正文
系统指令Claude Code 或连接环境提供的运行指令先检查自己能够控制的指令、附件与工具

默认情况下,MCP 的工具定义由 Tool Search 在需要时才加载。会话开始时载入的只有工具名称和服务器说明,因此增加服务器对窗口的影响很小。定义会预先载入的情况包括:设置了 ENABLE_TOOL_SEARCH=false、为服务器指定了 alwaysLoad,或设置了 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS 等。通过 ANTHROPIC_BASE_URL 经由网关时,v2.1.304 及以上版本默认也会启用 Tool Search(全部条件见官方 Tool Search 配置表)。实际开销应通过 /context 查看,而不是看服务器数量。

子智能体在单独的窗口中调查,可将结果带回,而无需把全部中间工具输出放进主对话。不过,它返回的摘要或结论仍会占用主对话的窗口。要求它复述整个调查过程,会削弱收益。应明确所需结果,例如“只返回相关文件与行号、结论和未解决的问题”。另外,子智能体会继承主对话的全部 MCP 工具定义,因此官方错误文档建议在启动子智能体之前,停用不使用的 MCP 服务器。设计原则见上下文工程。

使用 /context 查看当前窗口占用,使用 /usage 查看 token 消耗与计划使用量。后者显示的费用是估算,并非最终账单。在支持的环境中,/skill-doctor 也能检查技能开销。找不到该命令时,先从 /context 入手。测量步骤见什么在占用你的上下文?,可用条件见官方命令列表。

3. 上下文容量:200K 与 1M

200K 表示 20 万 token,1M 表示 100 万。不过,模型容量、Claude Code 在当前连接中使用的容量、自动压缩阈值,以及计费条件是各自独立的数字。当前模型与账户用 /status 查看,可选项用 /model 查看。

区分容量与使用条件

使用 200K 的示例

例如 Sonnet 4.5。即使模型支持 1M,Claude Code 也可能因连接方式或禁用 1M 的设置而按 200K 处理。

使用 1M 的示例

Anthropic API 的例子包括 Fable 系列、Sonnet 5 及更新版本和 Opus 4.7 及更新版本。部分模型默认使用 1M,并非总要添加 [1m]。

来源:Anthropic 模型配置与扩展上下文。自动压缩的触发位置会随设置和模型而变化。

在订阅中,只有通过 [1m] 变体获得 1M 的 Opus 4.6 和 Sonnet 4.6 才涉及 usage credits。Opus 4.6 的 1M 包含在 Max、Team 和 Enterprise 中,但在 Pro 上需要 usage credits;Sonnet 4.6 的 1M 在所有订阅中都需要 usage credits。直接连接 Anthropic API 的 Fable 系列、Sonnet 5 及更新版本(包括当前的 Sonnet 5.5)和 Opus 4.7 及更新版本则不同:包括 Pro 在内的所有计划默认使用 1M,无须额外 usage credits,也无须选择 [1m]。网关与禁用 1M 的设置会带来例外,因此不能只看模型名称判断。

1M 的“标准定价”表示:超过 200K 后,不会再收取额外的长上下文单 token 溢价。这不意味着可以在总价不变的情况下无限增加输入。处理的 token 越多,使用量越大。计划是否包含 1M、是否通过 credits 计费,又是另一回事。

字符与 token 的比例同样取决于模型和内容。不要假设每个新模型都会固定增加某个百分比;使用 API 时,应针对目标模型计数。某些任务确实需要更大的窗口,但先删去无关日志和重复指令,更容易判断真正所需的容量。

4. 如何立即恢复

根据发生了什么来选择恢复方法:是历史增长,还是输入中加入了大文件。以下方案按优先顺序排列。

修复方法

释放窗口空间的步骤

1. /compact(存在历史时)
总结对话历史,腾出空间。可以指定保留重点,例如 /compact 重点保留认证错误的相关信息。这样可在保留上下文的同时减少负担。
2. /clear(切换到另一任务时)
让对话重新开始。先记录必要决策。此操作不会删除项目文件。
3. 将大规模读取移出主对话
按行范围读取巨大文件,或请子智能体在自己的窗口中调查,只返回结论。
4. 减少反复加载的内容
先通过 /context 查看构成,再停用不必要的 MCP 服务器并缩短 CLAUDE.md。详细流程单独保存,需要时才读取。
5. 任务确实需要时,再使用 1M 模型
对于横跨巨大代码库等确实需要大窗口的任务,可用 /model 选择具有 1M 上下文的模型。先完成步骤 1–4 的整理。不要关闭自动压缩,应保持默认启用。

历史过长用步骤 1,下一项无关任务用步骤 2。初始输入过大用步骤 3 和 4。若报告了压缩失败的根本原因,先处理该原因。

如果 /compact 报错 Error during compaction: Conversation too long,说明没有足够空间放置生成的摘要。在输入框为空时连按两次 Esc(或使用 /rewind),会打开回退菜单,选择大段输入之前的消息,回退对话。如果想保持代码不变、只回退对话,选择 Restore conversation。之后重新压缩;若仍无法腾出足够空间,使用 /clear,以较小的输入重新开始。之前的对话会被保存,可以用 /resume 重新打开。菜单选项见官方回退说明。

另一方面,如果 automatic compaction failed: 后面跟着认证失败或模型不可用,应先解决这个原因,再尝试释放窗口。在解决之前,/compact 也会因同样的错误而失败。/compact 返回 Not enough messages to compact.,表示对话只有一轮往返,没有可总结的历史。先执行 /clear,再减少粘贴内容或缩小附件后重新发送。若压缩后立即再次占满,应把最近的大型日志或文件缩减到所需部分。

直接调用 API 时

/compact 和 /clear 是 Claude Code 的操作,不是发给 Messages API 的控制命令。仅输入就超过窗口时,API 会返回 400 的 invalid_request_error(“prompt is too long”)。应重新检查发送的 messages、system、tools 和附件,并通过目标模型的 token 计数 API 估算输入。应缩减请求本身:总结旧历史、仅保留文档相关章节,或移除不必要的定义。不要因裁剪请求而破坏工具调用与结果的配对关系。长对话也可使用 API 端压缩,但支持的模型和设置与 Claude Code 命令不同。

恢复后,先确认小型请求能够得到回复,再逐步加回必需信息。反复发送同一份巨大输入并等待,不会增加容量。日常整理方法见 Claude Code token 节省指南。

5. 区分相似错误

输入过大、配置的输出上限、生成时触及窗口限制,以及一段时间的使用量,是不同问题。应通过错误文字或 API 的 stop_reason 来区分,而不是看回复是否像被截断。

现象含义主要处理方式
Prompt is too long / Context limit reached / N tokens > M maximum本文主题:输入超过上下文窗口/compact、/clear、让子智能体承担大规模读取,或使用 1M 模型
回复提前停止(stop_reason: max_tokens)输出达到请求设定的 max_tokens使用 API 时,重新检查输出设置与模型上限;也可要求继续回答
stop_reason: model_context_window_exceeded生成过程中,输入与输出总量达到窗口限制减少输入,为输出保留空间
usage limit reached计划的可用额度已耗尽,与 token 窗口无关等待重置;参见使用量限制的处理方法
Usage credits required for 1M context这是访问权限问题:所选 1M 上下文不包含在计划中,不是输入超限或额度耗尽启用 credits 后重新启动,或用 /model 返回标准窗口

根据 Anthropic API 规范,Claude 4.5 及更新版本只要输入本身能装入,就会接受请求,即使输入加上请求的 max_tokens 已超过窗口。生成期间达到窗口上限会返回 model_context_window_exceeded,所以仅凭回复较短,不能证明是因为 max_tokens 而停止。其他问题见 Claude Code 常见错误。

相关:在 Codex 应用中能看到历史记录、却只有发送失败的症状,属于会话状态问题而非输入容量问题,详见Codex“thread not found”:排查方法与恢复案例。

6. 预防清单

开始工作前:通过 /context 检查加载内容。用搜索或行范围缩减大型文档,而不是整份粘贴。拆分调查任务时,也应规定子智能体返回结论的范围。

工作中:保持自动压缩的默认启用状态。如果错误行中出现 auto-compact is off,用 /config 重新开启。如果是通过环境变量 DISABLE_AUTO_COMPACT 关闭的,不会显示这一提示,需要移除该设置。还应查看每次压缩后是否又读取了相同材料。手动压缩并非越频繁越好:何时执行 /compact,以及明确保留哪些决策,都很重要。

任务之间:开始无关任务前,将必需信息保存到文件,再用 /clear 开启新对话。旧对话会被保存,但为了恢复工作而重新打开同一份庞大历史,可能让原因再次出现。CLAUDE.md 的常驻指令只保留每次都需要的规则。

自定义连接:如果使用网关或自定义模型 ID,应检查 Claude Code 假定的窗口与连接的实际容量是否存在偏差。增大配置中的数字,不会扩大模型的真实窗口。调整方法见官方自定义模型设置。

总结

Prompt is too long 表示完整输入,包括历史和附件,无法放入窗口,而不只是最后键入的一句话。应按情况选择:/compact 用于长历史;初始输入过大就缩减输入;压缩报错则先处理根本原因。

处于哪种状态,错误字符串的后半部分(automatic compaction failed:、single exchange、auto-compact is off)会告诉你。MCP 详细定义默认按需加载,因此开销应通过 /context 查看,而不是看服务器数量。使用 1M 时,容量、定价与自动压缩阈值分别由模型、连接和计划决定。直接调用 API 时,应重新检查发送的请求与停止原因,而非依赖 Claude Code 命令。

常见问题

问:“Prompt is too long”与“usage limit reached”是一回事吗?
答:不是。前者表示输入超过一次请求的上下文限制,后者与计划的使用额度有关。输入过大时,应缩减发送内容。/clear 不会恢复计划额度。

问:为什么开启自动压缩后仍会报错?
答:原因包括巨大输入、没有可总结的旧对话、压缩处理失败,或总结后立即再次占满。可以通过错误字符串的后半部分区分。如果 automatic compaction failed: 后面写着认证等原因,先解决它;如果是 single exchange,执行 /clear 后以较小的输入重新开始。

问:/compact 也报“Conversation too long”。
答:这表示没有足够空间存放摘要。在输入框为空时连按两次 Esc 打开回退菜单,把对话回退到大段输入之前的消息,再重试。若要保留代码,选择 Restore conversation。若仍不足,应记录重要内容,执行 /clear 后以较小输入重新开始。

问:切换到 1M 模型就能解决吗?
答:如果所需输入能装进新窗口,可能有帮助,但可用条件因模型、连接与计划而异。1M 采用标准单 token 定价,不意味着处理更多内容时总价仍不变。先减少无关历史和巨大输出,更容易判断所需容量。

问:怎样查看什么占用了窗口?
答:在 Claude Code 中用 /context 查看构成。这不同于 /usage 中的累计消耗或计划额度。MCP 定义默认按需加载,因此仅看连接数量无法判断开销。使用 API 时,应通过目标模型的 token 计数 API 估算请求。