博客

Claude Code 提示「Request too large (max 32MB)」/ Claude API 报 413 request_too_large:原因和解决办法

一句话答案

Request too large (max 32MB) 的意思是:Claude Code 组装出来的原始请求体,超过了 Claude API 能接收的大小。这个上限算的是字节数,在计 token 之前就会检查,所以和上下文窗口是两回事。最常见的原因是对话里累积了图片、截图、PDF 或大段粘贴的内容——每一轮请求都会把整段对话重新发一遍。

想继续干活:

  1. 运行 /compact。它会丢掉对话里累积的图片和附件。
  2. 如果提示里写着 compacting cannot make it fit,按两次 Esc,退回到加入大内容之前的那一轮,或者运行 /clear。
  3. 之后大文件用路径引用,不要直接粘贴;截图也尽量截小一点。

自己调 API 时,同一个上限表现为 HTTP 413,错误类型是 request_too_large。解决办法就是少发字节:图片缩小、少内联文档,或者拆成多个请求。

报错长什么样

Claude Code 里,按 Claude Code 错误说明:

text
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:

text
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 里怎么解决

  1. 运行 /compact。 按错误说明,它会丢掉累积的图片和附件。然后再发一次消息。
  2. 提示里有 compacting cannot make it fit: 说明光文本就超了。按两次 Esc 退回到加入大内容之前,或者运行 /clear 重新开始。
  3. 用路径引用文件。 让 Claude 去读 logs/build.log,而不是把内容粘进来,这样它可以分段读取。
  4. 截图截小一点。 只截需要的区域,别截整个屏幕。另一条相关提示 Image was too large,意思是单张图片超过了 API 的大小或尺寸限制。
  5. PDF 按页读。 单个 PDF 过大时,Claude Code 会提示 PDF too large (max 100 pages, 20MB)。让它只读指定页,或者先用 pdftotext 转成文本,再让 Claude 读文本文件。
  6. 升级 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。 原样重试没有用,先把请求变小再重试。
python
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 上同样适用:把请求体控制在小范围内。

  1. 在 TeamoRouter 控制台 创建 API Key,Key 以 sk-teamo- 开头。
  2. 充值,最低 $5。 充值弹窗支持银行卡;也可以点 「USDT支付」,用 USDT、USDC 或 ETH,从任意交易所 App 转账——收银台会按金额显示可用网络(BEP20 从 $5 起就能用)。步骤见 用 USDT 充值。
  3. 设置两个环境变量(macOS / Linux):
bash
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 的字节上限对所有模型都一样。

延伸阅读

准备好接入了吗?登录控制台 · 购买额度 · 创建 API Key,三步即可开始。