你是否曾在 Claude Code 或 API 中被这条错误卡住、动弹不得?
Prompt is too long
# On the API, more specifically:
prompt is too long: 233153 tokens > 200000 maximum
「提示词太长了」——也就是说,你试图发送的输入(会话历史+附加文件+工具定义等)超出了模型的上下文窗口(输入上限)。在 API 上它甚至会告诉你 「用了多少 token,对应的上限是多少」,例如 233153 tokens > 200000 maximum。这与 使用量限制(usage limit)是两回事——你并没有把额度用完,只是单次输入在物理上太大了。
先说三个要点。(1)原因是「输入装不进窗口」。既不是输出被截断的 max_tokens,也不是套餐额度的 usage limit。(2)Claude Code 通常会通过 auto-compact(自动摘要)自动规避它,所以当你看到它时,要么是「一次性冲破了窗口」,要么是你关掉了 auto-compact。(3)最快的对策是用 /compact 摘要历史、用 /clear 重新开始,并把巨大的读取交给 subagent。本文将基于官方信息,梳理什么在填满窗口、窗口大小(200K 与 1M)、如何解决,以及如何与容易混淆的错误区分开。
直到「窗口」被填满
— 什么在填满上下文,又在何时溢出
层层堆叠到 100%,然后……
too long
通常 auto-compact
会在溢出前自动摘要
这意味着「输入窗口」已满——既不是使用量限制(quota),也不是输出截断(max_tokens)。
堆叠比例仅为示意。请用 /context 查看真实的明细。
1. 这条错误到底在说什么
AI 模型有一个叫做 「上下文窗口(context window)」的输入上限。它是 「单次交互中能够读取的信息量的最大值」,以 token(≈单词的碎片)来计数。Prompt is too long 的意思是,你试图发送的输入的总 token 数超过了那个窗口。在 API 上它甚至会把数字打印出来:233153 tokens > 200000 maximum(你发送了 233,153 个 token,上限是 200,000)。
关键在于,这是输入这一侧的问题。上下文窗口会把 会话历史、附加/读取的文件、工具执行结果、system prompt,以及 MCP 的工具定义全部加总在一起。持续进行一段很长的会话、把一个巨大的文件整个读进来,或者堆积大量工具输出,窗口就会逐渐被填满,并在某个瞬间溢出。关于概念本身,可参见 什么是上下文窗口。
需要注意的是,Claude Code 通常 默认开启 auto-compact(自动摘要),它会 在窗口接近填满时自动摘要历史以腾出空间。所以平时你根本看不到这条错误。如果它仍然出现,通常是因为 (1)单次输入一下子冲破了窗口(例如粘贴了一个巨大的文件),或者 (2)你关掉了 auto-compact(DISABLE_AUTO_COMPACT)。
2. 什么在填满上下文窗口
「它溢出得比预想更快」,是因为一些看不见的元素同样在消耗窗口。下面是来自 Claude Code 官方文档的主要构成明细。
| 填满窗口的东西 | 内容 | 如何减负 |
|---|---|---|
| 会话历史 | 用户/助手的每一轮对话。最大的因素——不清除就会一直增长 | 用 /compact 摘要,用 /clear 重启 |
| 你读取的文件 | 你 Read 的每个文件都会进入窗口。把巨大的文件整个读进来很重 | 按行范围读取;把大读取交给 subagent |
| 工具结果 | 命令输出、搜索结果等也会累积 | 避免不必要的大量输出,勤于摘要 |
| MCP 工具定义 | 已连接的 MCP 服务器的工具定义。服务器越多,从一开始就吃得越多 | 用 /mcp 禁用不用的 MCP |
| CLAUDE.md / 记忆 | 项目/全局指令、自动记忆。始终加载 | 避免膨胀,用 /doctor 检查 |
| system prompt | 核心行为指令。始终存在、固定、不可触碰 | (无法削减。减少其余部分) |
要点在于:「会话历史、文件读取、工具结果」是会不断增长的动态因素,而 「MCP 定义、CLAUDE.md、system prompt」是从一开始就存在的固定因素。诀窍在于,subagent 拥有它自己的窗口——把一个巨大的文件读取或调查交给 subagent,它的结果(那些沉重的原始数据)就永远不会进入你的主窗口。用 /context 可以确切地看到是什么在吃窗口。关于有意识地设计上下文的方法论,可参见 context engineering。
3. 窗口大小——200K 与 1M
「上限是多少」取决于模型。下面是 2026 年的整体格局(具体数值可能会被修订,所以请确认最新的官方列表)。
窗口大小可能相差 5 倍
[1m] 后缀出现。[1m] 模型可能需要使用量额度(credits)。(2)较新的模型采用了改动过的分词器,对同样的文本大约多消耗 30-35% 的 token(所以即便是 1M,实际装进去的也比体感要少)。在加宽窗口之前,基本的做法是不要把它弄乱。窗口数值、1M 支持情况以及价格都会随时间被修订。不要把它当作固定值死记——请在最新的官方模型列表中确认。
人们容易觉得「切换到 1M 模型就能解决一切」,但 更大的窗口是一种逃避,未必总是解决方案。在保留杂乱会话、浪费式整文件读取和不用的 MCP 的同时去加宽窗口,只会抬高成本、拖慢响应。聪明的做法是 先把窗口整理干净(compact、clear、subagent),只在那些确实庞大、仍然需要的任务上才使用 1M。
4. 现在就能解决的方法
错误出现那一刻可采取的措施,按优先级排列。根据情况(历史膨胀了 / 你喂进了一个巨大的文件)来选择。
如何腾空窗口
/compact focus on the auth bug。在精简的同时保留上下文。/context 查看明细,然后禁用不用的 MCP 并精简 CLAUDE.md。/doctor 会标出膨胀之处。/model 切换到 1M 上下文的模型。但要先做整理(1-4)。不要禁用 auto-compact(保持默认开启)。默认顺序是 1) /compact 然后 2) /clear。如果溢出主要是「大读取」,用 3)。如果是慢性问题,用 4) 削减固定负载。
补充:/compact 本身也可能失败并报出 「Conversation too long. Press esc twice...」——这意味着 窗口已经满到连插入一段摘要的空间都没有了。这种情况下,按两次 Esc 往回退几条消息,或者用 /clear 重新开始。关于系统性的 token 节省,可参见 Claude Code 节省 token。
5. 区分三个容易混淆的错误
「太长 / 卡住」这一类有好几个成员,而它们的对策有时是相反的。把这三个(+一个)区分开,免得混为一谈。
| 症状 | 真正是什么 | 主要对策 |
|---|---|---|
| Prompt is too long / N tokens > M maximum | 本文的主题。输入超出了上下文窗口 | /compact、/clear、把大读取交给 subagent、1M 模型 |
| 响应被截断(stop_reason: max_tokens) | 输出在你于请求中设定的 max_tokens 处被截断(不是窗口问题) | 调高 max_tokens / 让它继续 |
| usage limit reached | 你套餐的使用量额度已耗尽(与 token 窗口无关) | 等待重置;使用量限制对策 |
| Usage credits required for 1M context | 权限问题。你选了套餐中不包含的 [1m] 模型(不是溢出,也不是额度耗尽) | 启用额度,或用 /model 切到标准窗口 |
区分的判据:如果看到「N tokens > M maximum」这样的数字,那就是输入溢出 = 本文。一段 被干净截断的响应是输出上限(max_tokens)。「reset at [时间]」是 使用量限制。「1M 需要 credits」是权限(套餐)问题。关于其他常见的 Claude Code 错误,可参见 错误汇总。
6. 预防清单
让窗口不至于溢出的习惯。
(1)保持 auto-compact 默认开启(不要用 DISABLE_AUTO_COMPACT 关掉它)。(2)在任务边界处 /clear;会话进行中勤于 /compact。(3)巨大文件要按行范围读取或经由 subagent;不要整个粘贴进来。(4)禁用不用的 MCP,并不要让 CLAUDE.md 膨胀(用 /doctor 检查)。(5)在繁重工作前用 /context 查看明细。(6)只在确实庞大的任务上使用 1M 模型;其余时候在标准窗口上运行+整理好其余部分。
总结
Claude Code / API 的 「Prompt is too long」意味着 输入(会话历史+文件+工具定义等)超出了模型的上下文窗口。在 API 上它甚至会以 N tokens > M maximum 的形式显示上限。它 既不是使用量限制(quota),也不是输出截断(max_tokens)——而是「输入在物理上太大了」。Claude Code 通常 通过 auto-compact 来规避它,所以当它出现时,你要么是一下子冲破了窗口,要么是关掉了 auto-compact。
填满窗口的是 会话历史、文件读取、工具结果(动态)+ MCP 定义、CLAUDE.md、system prompt(固定)。最快的对策是 (1)/compact -> (2)/clear -> (3)把大读取交给 subagent -> (4)用 /context 削减固定负载 -> (5)确实需要时才用 1M 模型。窗口大小有 标准 200K 与 1M;截至 2026 年,1M 以标准价格提供,但要注意 订阅套餐可能需要额度,而新分词器会消耗更多。基本准则是:在加宽窗口之前,先别把它弄乱。相关:什么是上下文窗口、context engineering、使用量限制对策。
FAQ
Q. 「Prompt is too long」和「usage limit reached」是同一回事吗?
A. 完全不同。「Prompt is too long」意味着 单次输入超出了上下文窗口(token 上限)。「usage limit reached」意味着 你用完了套餐的使用量额度——与 token 窗口无关。前者用 /compact 或 /clear 腾空窗口即可立刻解决;后者需要等待重置或采取套餐层面的操作。
Q. 平时从不出现,却突然冒了出来。为什么?
A. Claude Code 默认开启 auto-compact,会在窗口接近填满时自动摘要历史以规避它。如果它仍然出现,通常是因为 (1)你一次性喂进了一个巨大的文件或大量数据,冲破了窗口,或者 (2)你用 DISABLE_AUTO_COMPACT 关掉了 auto-compact。前者用拆分 / 按行范围读取 / subagent 来解决,后者通过重新启用 auto-compact 来解决。
Q. 我运行了 /compact,却得到「Conversation too long」——连摘要都做不了。
A. 窗口已经满到连插入一段摘要的空间都没有了。按两次 Esc 往回退几条消息再重试,或者用 /clear 重新开始会话。从此之后,在窗口填满之前就 /compact,并把大读取交给 subagent,以防再次发生。
Q. 切换到 1M 上下文的模型能解决吗?
A. 对大型任务有帮助,但并非万能药。在保留杂乱历史、浪费式整文件读取和不用的 MCP 的同时去加宽窗口,只会抬高成本、拖慢响应。而且较新的模型采用了 改动过的分词器,对同样的文本大约多用 30-35% 的 token,所以实际装进去的比体感要少。聪明的打法是 先整理(compact/clear/subagent),只在确实需要时才用 1M。请注意,订阅套餐对 [1m] 可能需要额度。
Q. 我想知道是什么在吃掉窗口。
A. Claude Code 的 /context 会显示明细——system prompt、CLAUDE.md、MCP 工具定义、会话历史、你读取的文件等。多数情况下,不断增长的 会话历史和 大文件读取是主要元凶。/doctor 还会标出膨胀的 CLAUDE.md 或 subagent 定义。如果固定负载(MCP 定义、CLAUDE.md)很大,削减那一块会很有效。