Claude Code 报 undefined input_tokens?Free-Claude-Code 接 TaoToken 前先看 ANTHROPIC_BASE_URL
2026/9/21 14:00:05 网站建设 项目流程

1. 先搞清楚 undefined input_tokens 到底在报什么

Claude Code 通过 Free-Claude-Code 代理转发请求时,终端突然抛出一行undefined input_tokens,随后会话卡住或者直接中断。这个报错看起来像是 Claude Code 自己的问题,实际上根因在代理层:上游 Provider 返回的 usage 元数据不合法,代理没有做兜底,直接把undefined透传给了 Claude Code 的计费与上下文管理模块。

Claude Code 在每次/v1/messages响应里都会读取usage.input_tokensusage.output_tokens,用来判断当前上下文窗口还剩多少、是否需要触发压缩。如果代理返回的 SSE 事件里message_startmessage_delta缺少这两个字段,或者字段值是undefinednull、空字符串,Claude Code 就会在解析阶段报错。Free-Claude-Code 的 Provider 适配层在转换 OpenAI 兼容响应时,如果上游没有返回标准 usage 结构,就容易出现这个情况。

另一个高频触发点是ANTHROPIC_BASE_URL被误加了/v1。Free-Claude-Code 对外暴露的端点是http://localhost:8082/v1/messages,它自己会在内部拼接/v1。如果你把 Base URL 写成http://localhost:8082/v1,实际请求就变成了http://localhost:8082/v1/v1/messages,代理返回 404 或者非标准错误体,Claude Code 解析失败后同样会报undefined input_tokens。这个坑我见过太多次,排查时优先检查这一项。

本篇走的是排障视角,目标很明确:把上游兼容通道切到 TaoToken,让 Free-Claude-Code 的 Provider 配置指向https://taotoken.net/api,配通之后在 Admin UI 里验证/v1/messages流式响应、Tool Use 和模型发现都正常,从根上避免undefined input_tokens再次出现。适合已经在用 Claude Code + Free-Claude-Code 组合、但被这个报错卡住的开发者。

2. TaoToken 在整条链路里承担什么角色

TaoToken 在这条链路里只做一件事:提供兼容 Anthropic Messages API 的 Key 和 Base URL。它不替代 Free-Claude-Code 的协议转换职责,也不接管 Claude Code 的 CLI 进程管理。你可以把它理解成一个上游模型通道,Free-Claude-Code 的 Provider 适配器把请求转发过来,TaoToken 返回标准的 Anthropic 格式响应,usage 元数据完整,不会出现undefined

先打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 创建账号并生成 Key。创建完成后,你会拿到两样东西:一个 API Key,一个 Base URL。Base URL 固定是https://taotoken.net/api,注意这里不带/v1,也不加任何 UTM 参数。Free-Claude-Code 在 Provider 配置里会自己拼接/v1/messages,你只需要填根路径。

如果你需要单独管理 Key 或者查看用量,可以走这个入口:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite 。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,里面有完整的端点说明和请求示例,配 Provider 之前建议先扫一眼。

需要强调一点:TaoToken 只提供 Key 和 Base URL,协议转换、SSE 事件组装、Tool Use 的 block 索引分配,这些仍然是 Free-Claude-Code 在做。所以undefined input_tokens的修复逻辑是:让上游返回合法的 usage,代理层就不需要做额外兜底,Claude Code 拿到的就是完整字段。

3. 可复制配置:把 Free-Claude-Code 的 Provider 指向 TaoToken

3.1 确认 Free-Claude-Code 版本与启动方式

先确认你本地的 Free-Claude-Code 是最新版本,旧版本在 usage 兜底上处理不完善。用 uv 安装的话,执行:

uv tool upgrade free-claude-code

启动服务:

free-claude-code

终端会输出:

Server URL: http://127.0.0.1:8082 Admin UI: http://127.0.0.1:8082/admin (local-only)

Admin UI 只允许本机访问,非回环地址会返回 403。如果你在容器或远程机器上跑,需要做端口转发,确保浏览器访问的是localhost127.0.0.1

3.2 在 Admin UI 里新增 Provider 兼容通道

打开http://localhost:8082/admin,找到 Provider 配置区域。Free-Claude-Code 支持多 Provider 并存,你可以保留原有的本地 Ollama 或 DeepSeek 配置,新增一个指向 TaoToken 的通道。

关键字段填写如下:

字段填写值说明
Provider 类型anthropic_messagesTaoToken 返回原生 Anthropic 格式,走透明转发
Base URLhttps://taotoken.net/api不带 /v1,不加 UTM
API Key你在 TaoToken 创建的 Key填到 credential 字段
模型映射按需填写见下一节

注意 Base URL 这一栏,很多人习惯性补/v1,这里千万不要加。Free-Claude-Code 的AnthropicMessagesTransport会在内部拼接/v1/messages,你填https://taotoken.net/api,最终请求就是https://taotoken.net/api/v1/messages,这是正确路径。

3.3 配置模型路由映射

Free-Claude-Code 的 ModelRouter 支持按 Opus/Sonnet/Haiku 三档分别映射到不同后端。如果你想让 TaoToken 作为主力通道,可以在.env里这样写:

MODEL_OPUS="taotoken/claude-opus-4" MODEL_SONNET="taotoken/claude-sonnet-4" MODEL_HAIKU="taotoken/claude-haiku-4" MODEL="taotoken/claude-sonnet-4"

这里的taotoken是你在 Admin UI 里给这个 Provider 起的 provider_id,后面的模型名按 TaoToken 文档里支持的模型填写。如果你不确定模型名,可以在 Admin UI 里点 Validate,Free-Claude-Code 会调用/v1/models做模型发现,返回列表里能看到可用模型。

3.4 设置 Claude Code 的环境变量

Claude Code 侧只需要指向 Free-Claude-Code 的本地地址,不要直接指向 TaoToken:

export ANTHROPIC_BASE_URL="http://localhost:8082" export ANTHROPIC_AUTH_TOKEN="freecc" export CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY="1"

Windows PowerShell:

$env:ANTHROPIC_BASE_URL="http://localhost:8082" $env:ANTHROPIC_AUTH_TOKEN="freecc" $env:CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY="1" claude

VS Code 扩展在settings.json里配置:

{ "claudeCode.environmentVariables": [ { "name": "ANTHROPIC_BASE_URL", "value": "http://localhost:8082" }, { "name": "ANTHROPIC_AUTH_TOKEN", "value": "freecc" }, { "name": "CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY", "value": "1" } ] }

这里再次强调:ANTHROPIC_BASE_URL指向的是 Free-Claude-Code 的http://localhost:8082,不是 TaoToken 的地址。TaoToken 的 Base URL 只出现在 Free-Claude-Code 的 Provider 配置里。两层地址不要混。

4. 验证请求:确认流式响应、Tool Use 与模型发现都正常

4.1 用 curl 直接打 Free-Claude-Code 的 /v1/messages

在配置完成后,先用 curl 验证代理层是否正常转发:

curl -N http://localhost:8082/v1/messages \ -H "Content-Type: application/json" \ -H "x-api-key: freecc" \ -H "anthropic-version: 2023-06-01" \ -d '{ "model": "claude-sonnet-4", "max_tokens": 128, "stream": true, "messages": [ {"role": "user", "content": "用一句话说明什么是 SSE"} ] }'

正常返回应该是一串 SSE 事件,开头是event: message_start,里面包含完整的usage字段:

event: message_start data: {"type":"message_start","message":{"id":"msg_xxx","model":"claude-sonnet-4","usage":{"input_tokens":18,"output_tokens":0}}} event: content_block_start data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}} event: content_block_delta data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"SSE 是"}} event: message_delta data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":24}} event: message_stop data: {"type":"message_stop"}

重点看message_start里的usage.input_tokens是不是一个正整数。如果这里是undefined或者字段缺失,说明上游返回的 usage 不合法,需要检查 TaoToken 的 Key 是否有效、模型名是否正确。

4.2 在 Admin UI 里做模型发现

回到http://localhost:8082/admin,找到模型发现或 Validate 按钮。Free-Claude-Code 会调用 Provider 的/v1/models端点,TaoToken 返回可用模型列表。如果列表能正常展示,说明 Base URL 和 Key 都配对了。

模型发现失败通常有两个原因:Base URL 误加了/v1,或者 Key 没有正确写入 credential 字段。前者会导致请求路径变成/api/v1/v1/models,后者会返回 401。

4.3 验证 Tool Use

Tool Use 是 Claude Code 的核心能力,验证方式是让 Claude Code 执行一个文件读取操作。在 Claude Code 里输入:

读取当前目录下的 package.json,告诉我项目名称

正常流程下,Claude Code 会发起一个tool_use请求,Free-Claude-Code 转发给 TaoToken,返回的 SSE 事件里包含content_block_starttypetool_use,随后是input_json_delta分片。如果 Tool Use 正常,你会看到 Claude Code 实际读取了文件并返回内容。

如果 Tool Use 卡住或者报错,检查 TaoToken 侧使用的模型是否支持 function calling。部分轻量模型不支持 tools,换用支持的工具模型即可。

4.4 确认 undefined input_tokens 不再出现

完成上述验证后,在 Claude Code 里连续对话几轮,观察终端是否还有undefined input_tokens。正常情况下,每一轮message_startmessage_delta都会带完整的 usage 字段,Claude Code 的上下文管理模块能正确计算剩余窗口,不会再触发这个报错。

5. 本篇常见错排查

5.1 ANTHROPIC_BASE_URL 误加 /v1

这是最高频的坑。Free-Claude-Code 对外暴露的根路径是http://localhost:8082,它自己拼接/v1/messages。如果你写成http://localhost:8082/v1,实际请求变成/v1/v1/messages,代理返回 404,Claude Code 解析错误体失败后报undefined input_tokens

排查方法:在终端执行echo $ANTHROPIC_BASE_URL,确认结尾没有/v1。VS Code 扩展检查settings.json里的 value 字段。

5.2 Provider 的 Base URL 误加 /v1

同样的问题出现在 Free-Claude-Code 的 Provider 配置里。TaoToken 的 Base URL 是https://taotoken.net/api,不要写成https://taotoken.net/api/v1。Free-Claude-Code 的AnthropicMessagesTransport会拼接/v1/messages,你加/v1就重复了。

5.3 usage 字段缺失导致代理透传 undefined

如果上游返回的 SSE 事件里没有 usage 字段,Free-Claude-Code 旧版本会直接透传undefined。升级到最新版本后,代理层会做兜底,但根治办法还是让上游返回合法 usage。TaoToken 的 Anthropic 兼容通道返回标准 usage 结构,配通后这个问题自然消失。

5.4 Admin UI 返回 403

Admin UI 只允许本机访问。如果你通过http://192.168.x.x:8082/admin访问,会返回 403。确保浏览器地址栏是localhost127.0.0.1。远程服务器场景用 SSH 端口转发:

ssh -L 8082:localhost:8082 user@remote-host

然后在本地浏览器访问http://localhost:8082/admin

5.5 模型发现为空

CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY没有设置为1,或者 Provider 的/v1/models端点不通。先确认环境变量,再用 curl 直接打https://taotoken.net/api/v1/models看返回。如果 curl 正常但 Admin UI 为空,检查 Free-Claude-Code 的日志输出。

5.6 流式中断或超时

上游限流或网络抖动会导致 SSE 流中断。在.env里调整:

PROVIDER_MAX_CONCURRENCY=3 HTTP_READ_TIMEOUT=180 HTTP_CONNECT_TIMEOUT=15

降低并发、增加读超时,能缓解大部分流式中断问题。

5.7 Tool Use 在部分模型上失效

不是所有模型都支持 function calling。如果你在 TaoToken 侧选的模型不支持 tools,Claude Code 发起的工具调用会失败。换用文档里标注支持 tools 的模型,或者在 Free-Claude-Code 的 ModelRouter 里把复杂任务映射到支持 tools 的模型档位。

6. 配通之后怎么继续用

整条链路配通后,日常使用就是 Claude Code 正常对话,Free-Claude-Code 在本地做协议转换和路由,TaoToken 提供上游模型通道。undefined input_tokens的根因是 usage 元数据不合法,把上游切到 TaoToken 的 Anthropic 兼容通道后,usage 字段完整,代理层不需要额外兜底,Claude Code 拿到的就是标准响应。

如果你后续要长期跑编码任务或者 Agent 工作流,可以了解 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite 。需要单独管理 Key 或查看调用量,走 API Keys 页面:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite 。接入细节和端点说明在文档里:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 。想在浏览器里直接验证模型对话效果,可以用模型对话入口:https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite 。

最后提醒一句:Free-Claude-Code 的 Provider 配置里,Base URL 填https://taotoken.net/api,不带/v1,不加 UTM。Claude Code 的ANTHROPIC_BASE_URLhttp://localhost:8082,同样不带/v1。这两个地址各管一层,不要混。配通后在 Admin UI 里跑一遍模型发现和流式验证,确认 usage 字段完整,undefined input_tokens就不会再出现了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询