"Claude's response exceeded the 32000 output token maximum":为什么调高环境变量也没用
返回博客
文章claude codetroubleshootingdev toolsagente de programação

"Claude's response exceeded the 32000 output token maximum":为什么调高环境变量也没用

Mafra2026年11月14日阅读约 4 分钟

你让它做一次大规模重构。agent 生成了好几分钟,终端一直在刷,最后停在下面这一行:

API Error: Claude's response exceeded the 32000 output token maximum. To configure this
behavior, set the CLAUDE_CODE_MAX_OUTPUT_TOKENS environment variable.

这个数字看起来像模型的上限,但大多数情况下不是。32000 是 CLI 给这一次请求设的上限,通常远低于模型本身能输出的量。你一边找“应该调高的那个限制”,一边还在为这次尝试持续付费。

流程图:回复停在 max_tokens 上限,消息里的数字是本次请求的上限,环境变量最多只能调到模型上限
报错发生的位置:截断来自请求上限,而不是模型上限。

“exceeded the 32000 output token maximum”是什么意思?

意思是模型停止输出,因为回复达到了本次请求的输出 token 上限。技术原因是 stop_reason: max_tokens。这不是权限问题,不是网络中断,也不是账号被锁。请求到达了模型,模型也回答了,服务器按约定好的上限把回复截断。

消息里的数字是那一次调用的实际上限。它可能是 32000,也可能是 64000。所以同一个 Claude Code 版本,两个人会在同一句话里看到不同的数字。

模型支持 128K,为什么报的是 32000?

因为 Claude Code 默认请求的量低于模型能交付的量。官方文档写得很直接:对于 CLI 无法识别到自己认识的模型 ID,默认值是 32000,上限是 128000。能识别的模型有自己的默认值和上限,具体随模型而变。

下面这张 Anthropic 模型表取自 2026 年 11 月 14 日,列出的是模型一侧的最大输出:

模型上下文窗口最大输出
Claude Opus 5.5、Sonnet 5.5、Haiku 5.51M tokens128K tokens
Claude Opus 4.6、Sonnet 4.61M tokens128K tokens
Claude Opus 4.5、Sonnet 4.5、Haiku 4.5200K tokens64K tokens

也就是说:模型能接受 12.8 万输出 token,而请求可能只要了 3.2 万。两者之间的差距就是报错的来源。

最常见的 32000 是“模型未被识别”。自定义 ID、网关里起的别名、名字不同的 deployment,或者自己的 base URL,都会出现这种情况。模型你可能非常清楚,但只要 CLI 没法把这个 ID 映射到它认识的模型,它就用默认值。

怎样用 CLAUDE_CODE_MAX_OUTPUT_TOKENS 调高上限?

在打开会话之前导出变量:

export CLAUDE_CODE_MAX_OUTPUT_TOKENS=64000
claude

如果希望每个终端都生效,把它写进 ~/.claude/settings.json:

{
  "env": {
    "CLAUDE_CODE_MAX_OUTPUT_TOKENS": "64000"
  }
}

已经打开的会话不会读取这次修改,导出后请开一个新会话。这个值也不是绝对的:文档说明,超过模型上限的值会被 Claude Code 压到上限。模型只交付 64K,你写 128K 也不会变成 128K。

想确认 CLI 到底看到了什么,claude doctor 会校验超出正常范围的环境变量。在 Verboo Code 里对应的命令是 verboo doctor。

为什么调高环境变量之后没有任何变化?

大多数反馈里,发生的是下面三种情况之一:

发生了什么怎么确认怎么处理
变量导出到了错误的 shell,或者会话早就开着在启动 Claude Code 的同一个终端里运行 echo $CLAUDE_CODE_MAX_OUTPUT_TOKENS重新导出,再开一个新会话
值超过了模型上限和上面那张最大输出表对比用上限以内的值,或者换成上限更高的模型
上限不是瓶颈:agent 想在一个回合里写完整个文件上限调高后,回复还是被截断把工作拆成块,每块之间提交一次

还有一个容易让人误判的现象。报错之后,agent 看起来还在“思考”。CLI 会试着从断点继续,给它一个继续执行的提示,并且重复几次。任务太大时,每次续写都会撞上同一个上限,再烧掉一批 token。会话没死,预算死了。

怎样拆分任务,避免再次撞上上限?

下面这段话可以写成项目的长期指令,也可以作为任务的第一次消息:

不要在一个回合里写完整文件。按每块最多 200 行来工作,
每写完一块运行测试并提交,然后再继续。如果下一块会超过这个量,
停下来把计划给我看,不要直接往下写。

三个习惯可以在不碰任何限制的情况下缓解问题:

  1. 先要计划,分段确认之后才允许写文件。
  2. 一个回合处理一个文件,每个文件之后跑测试。
  3. 请求下一段之前先提交。被截断时,已经完成的部分不会丢。

什么时候该换引擎,而不是继续和上限较劲?

如果报错反复出现,是因为你的网关用了 CLI 不认识的 ID,那么调变量只是补丁。在 Verboo Code 里,平台模型由 CLI 自己识别,输出上限来自模型配置,而不是因为 ID 未知就回落到 3.2 万的默认值。可以用 /model 换引擎,用 /cost 看这次会话的消耗。

如果你的问题正是模型因为未被识别而回落到默认值,Verboo Code 直接换掉这个原因:上限跟着你选的引擎走。用同一个 prompt 跑一遍,对比最后拿到的结果。

喜欢这篇文章吗?
把知识分享给你的朋友。
// 继续阅读

相关文章