你是否曾在 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)、如何解决,以及如何与容易混淆的错误区分开。

CLAUDE CODE · CONTEXT WINDOW

直到「窗口」被填满

— 什么在填满上下文,又在何时溢出

system prompt
CLAUDE.md
MCP 工具定义
你读取的文件
工具结果
会话历史(不断增长)

层层堆叠到 100%,然后……

100%
= 200K / 1M tokens
Prompt is
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 年的整体格局(具体数值可能会被修订,所以请确认最新的官方列表)。

200K vs 1M

窗口大小可能相差 5 倍

标准 200K tokens
Sonnet 4.5、Haiku 4.5、Opus 4.5 等。你在错误里看到的 「200000 maximum」就是它。对大多数日常工作绰绰有余,但在巨大的代码库或长时间会话中容易溢出。
1M tokens
Opus 4.8/4.7/4.6、Sonnet 4.6 等。是标准的 5 倍。截至 2026 年,可以标准价格使用(目前没有长上下文附加费)。在 Claude Code 中带 [1m] 后缀出现。
注意:1M 并非万能药
(1)在订阅套餐上,[1m] 模型可能需要使用量额度(credits)。(2)较新的模型采用了改动过的分词器,对同样的文本大约多消耗 30-35% 的 token(所以即便是 1M,实际装进去的也比体感要少)。在加宽窗口之前,基本的做法是不要把它弄乱。

窗口数值、1M 支持情况以及价格都会随时间被修订。不要把它当作固定值死记——请在最新的官方模型列表中确认。

人们容易觉得「切换到 1M 模型就能解决一切」,但 更大的窗口是一种逃避,未必总是解决方案。在保留杂乱会话、浪费式整文件读取和不用的 MCP 的同时去加宽窗口,只会抬高成本、拖慢响应。聪明的做法是 先把窗口整理干净(compact、clear、subagent),只在那些确实庞大、仍然需要的任务上才使用 1M。

4. 现在就能解决的方法

错误出现那一刻可采取的措施,按优先级排列。根据情况(历史膨胀了 / 你喂进了一个巨大的文件)来选择。

FIXES

如何腾空窗口

1) /compact(首选)
摘要历史以腾出空间。可以给它指定焦点:/compact focus on the auth bug。在精简的同时保留上下文。
2) /clear(新任务)
清空会话。CLAUDE.md 和项目信息会保留。转入无关工作时最快。
3) 把大读取转移出去
行范围读取巨大文件,或者让一个 subagent 去调查并只返回结论(它使用自己的窗口)。
4) 削减固定负载
/context 查看明细,然后禁用不用的 MCP精简 CLAUDE.md/doctor 会标出膨胀之处。
5) 确实庞大时才用 1M 模型
只有在你确实需要时(例如处理整个大型代码库),才用 /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)很大,削减那一块会很有效。