使用笔记 · 排查手册

报错「exceeded the 64000 output token maximum 」怎么解决

Claude Code 写着写着突然中断,跳出一行红字让你「set the CLAUDE_CODE_MAX_OUTPUT_TOKENS environment variable」? 这篇把原理、作用、配置文件在哪、JSON 怎么写一次讲透——零基础也能跟着动手解决。

CLAUDE_CODE_MAX_OUTPUT_TOKENS settings.json max_tokens Claude Code
向下阅读
01

你看到的,是这一行红字

Claude Code 帮你写一个大文件、整文件重构、或生成一篇长文档,跑了十几秒,眼看快好了,却突然停下,蹦出这样一段:

先别慌,这不是故障,也不是你的账号 / 余额出了问题。它更像汽车的「限速器」被触发了——Claude Code 给每一次回复预设了一个长度上限,这次的回复刚好撞到了天花板。把上限调高,问题就没了。下面先讲清楚它为什么会出现,再手把手教你改。

02

原理:什么是「输出 token 上限」

大模型说话是按 token 计量的(粗略地说,1 个 token ≈ 0.5~1 个汉字,或几个英文字符)。模型每一次回复能吐多少 token,是有硬性上限的——这个参数在 API 里叫 max_tokens。

Claude Code 出于「防止失控生成、控制成本」的考虑,默认把这个上限设成 64000,并没有直接用满模型的能力。于是:当某一次回复的内容超过 64000 token(写超长文件、一次性重构一大片代码、生成长报告时很容易发生),就会被这道阀门拦下,中断并报出你看到的那行字。

动起来看:64000 这道阀门是怎么被撞上的

默认上限 64000 —— 一次大重构的输出 需要 ~82000 tok
64000 上限
✗ 超出上限 → 回复被截断、报错

最容易混淆的一点:输出上限 ≠ 上下文窗口。

上下文窗口(Context Window,Claude 是 200K 或 1M)装的是「这次对话的输入 + 输出」总量;而输出上限(max_tokens / 这里说的 64000)只管「这一次回复最多吐多长」。两者各管各的——哪怕你上下文窗口还很空,单次回复一旦超过 64000 照样会报这个错。所以解决它,要调的是输出上限,不是清理对话。

03

CLAUDE_CODE_MAX_OUTPUT_TOKENS 的作用

它就是把那道阀门调大的旋钮。报错里那句「set the CLAUDE_CODE_MAX_OUTPUT_TOKENS environment variable」,意思就是:去设一个叫这个名字的「环境变量」,把单次回复上限从默认的 64000 提上去。

设成 128000,就把上限提到了 Opus / Sonnet 模型的天花板,单次能写的内容差不多翻一倍:

调到 128000 后 —— 同一次大重构 需要 ~82000 tok
128000 上限
✓ 在上限内 → 顺利写完

各模型的输出天花板(设之前先看你用的是哪个)

模型单次输出天花板能设到 128000 吗
Claude Opus 4.8 / 4.7128K可以
Claude Sonnet 4.6128K可以
Claude Haiku 4.564K不行,上限就是 64000

用 Haiku 的注意:Haiku 的输出天花板本身就是 64K(64000),跟 Claude Code 的默认上限一样。给它设 128000 也突破不了模型自身的限制——真要写超长内容,换 Opus 或 Sonnet。

不是越大越好。把它设到模型天花板(128000)一般就够用了,再往上写没有意义——具体怎么设,往下看第四节。

04

动手解决:改一个配置文件,加一行

别被「环境变量」这种词吓到——永久解决从头到尾就一件事:打开你已经有的配置文件,往里加一行,存盘重启。跟着下面三步走完就行,不用挑、不用把别的办法挨个试一遍。

第 1 步:打开配置文件 settings.json

你配置中转时其实已经生成过这个文件,它在用户目录的 .claude 文件夹里。不用一层层翻,直接「跳」过去:

你的系统一步打开它所在的文件夹
Windows打开「文件资源管理器」,在最上方地址栏输入 %USERPROFILE%\.claude 回车
macOS打开「访达」,按 Cmd + Shift + G,输入 ~/.claude 回车

进到文件夹后,用记事本(Windows)或「文本编辑」(Mac,右键它 →「打开方式」)打开里面的 settings.json。

第 2 步:往里加一行(关键,照着抄)

打开后你会看到里面已经有内容——那是你配中转时填的地址和密钥,一个字都别删。通常长这样,里面有一个 env:

改之前 —— 你现在的文件(别清空):

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://www.vibeapi.cn",
    "ANTHROPIC_AUTH_TOKEN": "你的密钥"
  }
}

改之后 —— 只动了 2 个地方(已高亮):

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://www.vibeapi.cn",
    "ANTHROPIC_AUTH_TOKEN": "你的密钥",          ← ① 上一行结尾,补一个英文逗号
    "CLAUDE_CODE_MAX_OUTPUT_TOKENS": "128000"   ← ② 新增这一整行
  }
}

就两个动作:① 在上一行末尾补一个英文逗号 ,(因为后面要多一项了);② 另起一行,把 "CLAUDE_CODE_MAX_OUTPUT_TOKENS": "128000" 原样粘进去。缩进对不对齐都行,逗号、引号别漏别错就好。拿不准格式?第五节有「正确 vs 错误」对照。

万一你的文件里通篇没有 env——那基本说明你还没怎么配过,直接看下面「套用完整配置」更省事。

或者:直接套用一份推荐的完整配置(新装 / 想一步到位)

如果你是刚装好、文件基本是空的,或者干脆想把常用设置一次配齐,可以直接用下面这份推荐的完整 settings.json——整份复制、覆盖进去即可。它已经帮你把本文的输出上限、默认模型等都设好了:

{
  "theme": "dark",
  "env": {
    "ANTHROPIC_AUTH_TOKEN": "sk-123",
    "ANTHROPIC_BASE_URL": "https://www.vibeapi.cn",
    "ANTHROPIC_DEFAULT_HAIKU_MODEL": "claude-haiku-4-5-20251001",
    "ANTHROPIC_DEFAULT_OPUS_MODEL": "claude-opus-4-8[1m]",
    "ANTHROPIC_DEFAULT_SONNET_MODEL": "claude-sonnet-5",
    "ANTHROPIC_MODEL": "claude-opus-4-8[1m]",
    "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1",
    "ENABLE_TOOL_SEARCH": "true",
    "CLAUDE_CODE_MAX_OUTPUT_TOKENS": "128000"
  },
  "model": "opus[1m]",
  "attribution": {
    "commit": "",
    "pr": ""
  }
}

唯一必须改的一处:把高亮的 "sk-123" 换成你在 VibeAPI 后台拿到的真实密钥。中转地址 ANTHROPIC_BASE_URL 已经填好,别的都不用动。

已经在正常用、只是想解决截断报错?那就别整份替换(会把你现有的密钥、设置覆盖掉)——回到上面第 2 步「加一行」就够了。这份完整配置只适合新装或想推倒重来的情况。

第 3 步:存盘,彻底重启 Claude Code

保存文件,然后完全退出 Claude Code 再重新打开(它不会热更新,不重启不生效)。重启后再跑刚才的活儿,64000 那个报错就不会再出现了。值记得带引号写成 "128000"。

只是想先顶一下、这会儿不方便改文件?可以在终端临时设一下应急:关掉 Claude Code,粘下面对应那一行,再重新 claude 启动。缺点是关掉终端窗口就失效,治标不治本——长期还是建议用上面三步一劳永逸。

# macOS / Linux
export CLAUDE_CODE_MAX_OUTPUT_TOKENS=128000
# Windows · PowerShell
$env:CLAUDE_CODE_MAX_OUTPUT_TOKENS = "128000"

三步都照做了、还报错或还被截断?那多半不是这一项的问题,而是上下文窗口快满了(见第六节),或与所选模型 / 分组的输出能力有关。把报错截图发给 VibeAPI 客服,我们帮你确认并推荐最合适的分组即可。

05

JSON 语法别踩坑(正确 vs 错误对照)

settings.json 是 JSON 格式,规矩很死:多一个逗号、用错引号都会让整个文件失效,Claude Code 就当没看见你的设置。记住四条铁律:

  • 所有的「名字」和「文字值」都要用英文双引号 ",不能用中文引号「」,也不能用单引号 '。
  • 键值对之间用逗号隔开,但最后一项后面不能有逗号。
  • JSON 不支持注释(不能写 // 或 #)。
  • 大括号 { } 要成对闭合。
✓ 正确
{
  "env": {
    "CLAUDE_CODE_MAX_OUTPUT_TOKENS": "128000"
  }
}
✗ 这些都会让文件失效
{
  'env': {                ← 用了单引号
    "CLAUDE_CODE_MAX_OUTPUT_TOKENS": 128000,  ← 末尾多逗号
  } // 设置上限          ← JSON 不能写注释
}

拿不准?把文件内容贴到任意「JSON 校验 / JSON 格式化」在线工具里跑一下,红了就是哪儿写错了,绿了就放心。这比肉眼数括号靠谱得多。

06

顺手收藏:其他常见报错速查

用 Claude Code 还可能撞上这些,对照「一句话怎么修」即可:

报错 / 提示原因一句话解决
Prompt is too long / 提示上下文超长 整个对话累计超过了模型上下文窗口(200K / 1M),这是「输入太多」,跟本文的输出上限是两码事 输入 /compact 压缩对话,或 /clear 开个新会话
Auto-compact / Context low 上下文快满,Claude Code 自动帮你压缩历史 正常现象,不用管;想关掉设环境变量 DISABLE_AUTO_COMPACT=1
401 · invalid x-api-key API Key 填错、过期,或中转地址(base_url)配错 核对 Key 与中转地址;用 /status 看当前生效的凭据
429 Rate limit 触发了限流(额度或并发上限) 等几分钟重试;或联系客服确认分组额度
529 Overloaded 上游服务繁忙,影响面较大,非你个人问题 稍等几分钟重试;或 /model 临时换个模型
max_tokens must be greater than thinking.budget_tokens 同时设了 MAX_THINKING_TOKENS(思考预算),且它 ≥ 输出上限 把 MAX_THINKING_TOKENS 调小,或把输出上限调大,让前者明显小于后者

一个判断小技巧:报错里出现 output / max_tokens / 本文那个变量名 → 调「输出上限」(本文方法);报错里出现 prompt too long / context → 是「输入太多」,用 /compact 或 /clear。分清「进」和「出」,就不会改错地方。

07 · 总结

不是故障,是「限速器」被撞上了。

打开配置文件、加一行、重启 Claude Code —— 三步搞定。
已经在正常用的话,别整份替换配置,只加那一行就够。

✓ 打开 用户目录 .claude/settings.json ✓ 加一行 "CLAUDE_CODE_MAX_OUTPUT_TOKENS": "128000",记得给上一行补逗号 ✓ 重启 Claude Code,问题就没了 ✓ 还不行?多半是上下文窗口或分组能力问题,找 VibeAPI 客服