报错「exceeded the 64000 output token maximum 」怎么解决
Claude Code 写着写着突然中断,跳出一行红字让你「set the CLAUDE_CODE_MAX_OUTPUT_TOKENS environment variable」? 这篇把原理、作用、配置文件在哪、JSON 怎么写一次讲透——零基础也能跟着动手解决。
你看到的,是这一行红字
Claude Code 帮你写一个大文件、整文件重构、或生成一篇长文档,跑了十几秒,眼看快好了,却突然停下,蹦出这样一段:
先别慌,这不是故障,也不是你的账号 / 余额出了问题。它更像汽车的「限速器」被触发了——Claude Code 给每一次回复预设了一个长度上限,这次的回复刚好撞到了天花板。把上限调高,问题就没了。下面先讲清楚它为什么会出现,再手把手教你改。
原理:什么是「输出 token 上限」
大模型说话是按 token 计量的(粗略地说,1 个 token ≈ 0.5~1 个汉字,或几个英文字符)。模型每一次回复能吐多少 token,是有硬性上限的——这个参数在 API 里叫 max_tokens。
Claude Code 出于「防止失控生成、控制成本」的考虑,默认把这个上限设成 64000,并没有直接用满模型的能力。于是:当某一次回复的内容超过 64000 token(写超长文件、一次性重构一大片代码、生成长报告时很容易发生),就会被这道阀门拦下,中断并报出你看到的那行字。
动起来看:64000 这道阀门是怎么被撞上的
最容易混淆的一点:输出上限 ≠ 上下文窗口。
上下文窗口(Context Window,Claude 是 200K 或 1M)装的是「这次对话的输入 + 输出」总量;而输出上限(max_tokens / 这里说的 64000)只管「这一次回复最多吐多长」。两者各管各的——哪怕你上下文窗口还很空,单次回复一旦超过 64000 照样会报这个错。所以解决它,要调的是输出上限,不是清理对话。
CLAUDE_CODE_MAX_OUTPUT_TOKENS 的作用
它就是把那道阀门调大的旋钮。报错里那句「set the CLAUDE_CODE_MAX_OUTPUT_TOKENS environment variable」,意思就是:去设一个叫这个名字的「环境变量」,把单次回复上限从默认的 64000 提上去。
设成 128000,就把上限提到了 Opus / Sonnet 模型的天花板,单次能写的内容差不多翻一倍:
各模型的输出天花板(设之前先看你用的是哪个)
| 模型 | 单次输出天花板 | 能设到 128000 吗 |
|---|---|---|
| Claude Opus 4.8 / 4.7 | 128K | 可以 |
| Claude Sonnet 4.6 | 128K | 可以 |
| Claude Haiku 4.5 | 64K | 不行,上限就是 64000 |
用 Haiku 的注意:Haiku 的输出天花板本身就是 64K(64000),跟 Claude Code 的默认上限一样。给它设 128000 也突破不了模型自身的限制——真要写超长内容,换 Opus 或 Sonnet。
不是越大越好。把它设到模型天花板(128000)一般就够用了,再往上写没有意义——具体怎么设,往下看第四节。
动手解决:改一个配置文件,加一行
别被「环境变量」这种词吓到——永久解决从头到尾就一件事:打开你已经有的配置文件,往里加一行,存盘重启。跟着下面三步走完就行,不用挑、不用把别的办法挨个试一遍。
第 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 客服,我们帮你确认并推荐最合适的分组即可。
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 格式化」在线工具里跑一下,红了就是哪儿写错了,绿了就放心。这比肉眼数括号靠谱得多。
顺手收藏:其他常见报错速查
用 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。分清「进」和「出」,就不会改错地方。
不是故障,是「限速器」被撞上了。
打开配置文件、加一行、重启 Claude Code —— 三步搞定。
已经在正常用的话,别整份替换配置,只加那一行就够。
.claude/settings.json
✓ 加一行 "CLAUDE_CODE_MAX_OUTPUT_TOKENS": "128000",记得给上一行补逗号
✓ 重启 Claude Code,问题就没了
✓ 还不行?多半是上下文窗口或分组能力问题,找 VibeAPI 客服