一句话答案
Request too large (max 32MB) 的意思是:Claude Code 组装出来的原始请求体,超过了 Claude API 能接收的大小。这个上限算的是字节数,在计 token 之前就会检查,所以和上下文窗口是两回事。最常见的原因是对话里累积了图片、截图、PDF 或大段粘贴的内容——每一轮请求都会把整段对话重新发一遍。
想继续干活:
- 运行
/compact。它会丢掉对话里累积的图片和附件。 - 如果提示里写着
compacting cannot make it fit,按两次 Esc,退回到加入大内容之前的那一轮,或者运行/clear。 - 之后大文件用路径引用,不要直接粘贴;截图也尽量截小一点。
自己调 API 时,同一个上限表现为 HTTP 413,错误类型是 request_too_large。解决办法就是少发字节:图片缩小、少内联文档,或者拆成多个请求。
报错长什么样
Claude Code 里,按 Claude Code 错误说明:
Request too large (max 32MB). Accumulated images and attachments in the conversation pushed the request over the limit. Run /compact, or double press esc to go back and remove attachments.
如果请求是直接发给 Claude API 的,Claude Code 会测量对话大小,并根据重试能不能成功换一种说法:
Request too large (max 32MB; 20.1MB of about 33.4MB is images or documents).:是图片或文档把请求撑爆了,Claude Code 会去掉它们再重试。Request too large for the API's 32MB request limit,后面跟着compacting cannot make it fit:光是消息文本就超了,Claude Code 不会重试。
经过代理、网关或云厂商时,看到的是上面那条通用提示。v2.1.212 之前的版本显示的是 Request too large (max 32MB). Double press esc to go back and try with a smaller file.
API 返回的样子,见 can1357/oh-my-pi#14453:
413 {"error":{"type":"request_too_large","message":"Request exceeds the maximum size"}}
经过 LiteLLM 时,同样的内容会以 AnthropicException 的形式抛出(dgml-io/dgml#158)。Anthropic Python SDK 遇到 413 会抛 anthropic.RequestTooLargeError。
为什么会这样
Claude API 错误说明 列出的请求体积上限:
| 接口 | 单次请求最大体积 |
|---|---|
| Messages API | 32 MB |
| Token Counting API | 32 MB |
| Batch API | 256 MB |
| Files API | 500 MB |
超过上限,API 返回 413 request_too_large。直连 Claude API 时,这个错误是 Cloudflare 在请求到达 API 服务器之前就返回的,所以请求根本没有被处理。
Claude Code 的请求超过 32 MB,通常是这三点叠加:
- 每一轮都重发整段对话。 会话早期附上的截图,在被移除之前会出现在之后的每一次请求里。
- 文件按 base64 传输。 图片和 PDF 都是 base64 编码后发送的,体积比磁盘上的文件大三分之一左右。
- 图片占 token 少、占字节多。 会话离上下文上限还很远,也可能先撞上字节上限。所以出这个错的时候,
/context看起来可能还很空。
大段粘贴的日志、输出很大的工具结果,也都会算进去。
这不是「Prompt is too long」。 Prompt is too long 是 token 数超过了模型的上下文窗口;Request too large 是字节数超了。两者解决办法不一样,token 的情况见 Claude Code 提示「Prompt is too long」。
在 Claude Code 里怎么解决
- 运行
/compact。 按错误说明,它会丢掉累积的图片和附件。然后再发一次消息。 - 提示里有
compacting cannot make it fit: 说明光文本就超了。按两次 Esc 退回到加入大内容之前,或者运行/clear重新开始。 - 用路径引用文件。 让 Claude 去读
logs/build.log,而不是把内容粘进来,这样它可以分段读取。 - 截图截小一点。 只截需要的区域,别截整个屏幕。另一条相关提示
Image was too large,意思是单张图片超过了 API 的大小或尺寸限制。 - PDF 按页读。 单个 PDF 过大时,Claude Code 会提示
PDF too large (max 100 pages, 20MB)。让它只读指定页,或者先用pdftotext转成文本,再让 Claude 读文本文件。 - 升级 Claude Code。 运行
claude update。好几个版本都改过长会话里移除图片的逻辑。
用了网关或代理时
- 网关的上限可能更低。 网关或反向代理可能远低于 32 MB 就拒绝请求。在 hs3180/tidemux#94 里,一个自建代理对超过 1 MiB 的请求体一律返回 413
request_too_large,Claude Code 读了两张图表图片之后,整个会话就进行不下去了。如果会话不大也报这个错,查一下网关的请求体积上限。 - 你看到的是通用提示。 设置了
ANTHROPIC_BASE_URL时,Claude Code 显示的是通用的Request too large (max 32MB),单看提示分不清是 Claude Code、网关还是 API 设的上限。去网关日志里查这条请求。 - 新会话第一条消息就报错。 在 anthropics/claude-code#95654 里,一位用自定义 Base URL 的用户在新会话第一条消息、没有任何附件时就看到这条提示,而网关根本没收到请求。如果你的情况一样,先升级 Claude Code,再关注这个 issue 的进展。
自己调 Claude API 时
- 发送前检查请求体大小。 量的是序列化后的 JSON,不是 token 数。图片会让请求变大,但 token 不一定多。
- 先缩小图片。 按任务需要的尺寸发图,大多数时候用不着全分辨率截图。
- 别把每张图都留在历史里。 多轮对话的应用里,模型用过的旧图片可以删掉或替换掉。
- 拆开处理。 文档分成多次请求发送,量大的任务可以用 Batch API,单个批次上限 256 MB。
- 单独处理 413。 原样重试没有用,先把请求变小再重试。
import anthropic
client = anthropic.Anthropic()
try:
msg = client.messages.create(model="claude-sonnet-5", max_tokens=1024, messages=messages)
except anthropic.RequestTooLargeError:
# 去掉或缩小图片和文档,再发一次
...
通过 TeamoRouter 使用 Claude Code
TeamoRouter 是一个 API 网关,一个 Key 可以调 Claude、GPT、Gemini、DeepSeek。Claude 走原生 Anthropic 协议(/v1/messages),Claude Code 只需要一个 Base URL 和一个 Key。没有订阅,按用量付费。上面的办法在 TeamoRouter 上同样适用:把请求体控制在小范围内。
- 在 TeamoRouter 控制台 创建 API Key,Key 以
sk-teamo-开头。 - 充值,最低 $5。 充值弹窗支持银行卡;也可以点 「USDT支付」,用 USDT、USDC 或 ETH,从任意交易所 App 转账——收银台会按金额显示可用网络(BEP20 从 $5 起就能用)。步骤见 用 USDT 充值。
- 设置两个环境变量(macOS / Linux):
export ANTHROPIC_BASE_URL=https://api.teamorouter.com
export ANTHROPIC_AUTH_TOKEN="你的 TeamoRouter API Key"
claude
Base URL 后面不要加 /v1。想确认 Key 能用,可以带上 Authorization: Bearer sk-teamo-...(或 x-api-key)调一下 GET /v1/models。Windows 命令和模型设置见 安装与配置 Claude Code。
常见问题
32MB 就是上下文窗口吗? 不是。上下文窗口算的是 token,32 MB 算的是请求体的字节数。一个请求可能只超了其中一个。
/compact 会丢掉我的工作吗?
它会把前面的对话换成摘要,并丢掉累积的图片和附件。较早对话里的文字细节可能会丢,可以加上重点说明,比如 /compact 保留接口设计的决定。
我只附了几张截图,怎么就超了? 每张截图都会留在对话里,按 base64 编码在每一轮重发。长会话里几张全屏截图累积起来就很大。如果网关的上限比 32 MB 低,会更早出现。
换一个上下文窗口更大的模型有用吗? 没用。Messages API 的字节上限对所有模型都一样。