Claude Code 报 undefined input_tokens?Free-Claude-Code 接 TaoToken 前先看 ANTHROPIC_BASE_URL
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_tokens和usage.output_tokens用来判断当前上下文窗口还剩多少、是否需要触发压缩。如果代理返回的 SSE 事件里message_start或message_delta缺少这两个字段或者字段值是undefined、null、空字符串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_sourcetaotoken_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_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面有完整的端点说明和请求示例配 Provider 之前建议先扫一眼。需要强调一点TaoToken 只提供 Key 和 Base URL协议转换、SSE 事件组装、Tool Use 的 block 索引分配这些仍然是 Free-Claude-Code 在做。所以undefined input_tokens的修复逻辑是让上游返回合法的 usage代理层就不需要做额外兜底Claude Code 拿到的就是完整字段。3. 可复制配置把 Free-Claude-Code 的 Provider 指向 TaoToken3.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。如果你在容器或远程机器上跑需要做端口转发确保浏览器访问的是localhost或127.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不加 UTMAPI 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_OPUStaotoken/claude-opus-4 MODEL_SONNETtaotoken/claude-sonnet-4 MODEL_HAIKUtaotoken/claude-haiku-4 MODELtaotoken/claude-sonnet-4这里的taotoken是你在 Admin UI 里给这个 Provider 起的 provider_id后面的模型名按 TaoToken 文档里支持的模型填写。如果你不确定模型名可以在 Admin UI 里点 ValidateFree-Claude-Code 会调用/v1/models做模型发现返回列表里能看到可用模型。3.4 设置 Claude Code 的环境变量Claude Code 侧只需要指向 Free-Claude-Code 的本地地址不要直接指向 TaoTokenexport ANTHROPIC_BASE_URLhttp://localhost:8082 export ANTHROPIC_AUTH_TOKENfreecc export CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY1Windows PowerShell$env:ANTHROPIC_BASE_URLhttp://localhost:8082 $env:ANTHROPIC_AUTH_TOKENfreecc $env:CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY1 claudeVS 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 UseTool Use 是 Claude Code 的核心能力验证方式是让 Claude Code 执行一个文件读取操作。在 Claude Code 里输入读取当前目录下的 package.json告诉我项目名称正常流程下Claude Code 会发起一个tool_use请求Free-Claude-Code 转发给 TaoToken返回的 SSE 事件里包含content_block_start且type为tool_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_start和message_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代理返回 404Claude 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 返回 403Admin UI 只允许本机访问。如果你通过http://192.168.x.x:8082/admin访问会返回 403。确保浏览器地址栏是localhost或127.0.0.1。远程服务器场景用 SSH 端口转发ssh -L 8082:localhost:8082 userremote-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_CONCURRENCY3 HTTP_READ_TIMEOUT180 HTTP_CONNECT_TIMEOUT15降低并发、增加读超时能缓解大部分流式中断问题。5.7 Tool Use 在部分模型上失效不是所有模型都支持 function calling。如果你在 TaoToken 侧选的模型不支持 toolsClaude 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 Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。需要单独管理 Key 或查看调用量走 API Keys 页面https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。接入细节和端点说明在文档里https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。想在浏览器里直接验证模型对话效果可以用模型对话入口https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 。最后提醒一句Free-Claude-Code 的 Provider 配置里Base URL 填https://taotoken.net/api不带/v1不加 UTM。Claude Code 的ANTHROPIC_BASE_URL填http://localhost:8082同样不带/v1。这两个地址各管一层不要混。配通后在 Admin UI 里跑一遍模型发现和流式验证确认 usage 字段完整undefined input_tokens就不会再出现了。

相关新闻

AI前端面试核心:SSE流式处理与TypeScript类型安全实战

AI前端面试核心:SSE流式处理与TypeScript类型安全实战

1. 这不是鸡汤,是9月AI前端面试现场的真实战报“最后提醒一次,9月的AI前端面试不用太老实”——这句话不是标题党,是我上周连续面了7家一线大厂和明星创业公司后,在凌晨两点改完第3版简历时写在备忘录里的第一行字。它背后没有情绪…

2026/9/21 13:58:12 阅读更多 →
iPhone/iPad上跑通AI Agent:混合架构与MCP工具调用实战

iPhone/iPad上跑通AI Agent:混合架构与MCP工具调用实战

上个月,我把一个几乎完整的 AI Agent 跑在了 iPhone 和 iPad 上。这里说的“完整”,不是像聊天助手那样能一问一答就完事,而是它真的能自己调用工具、查天气、写备忘录、整理周报,还带长期记忆。折腾这个项目的起因很简单&#xf…

2026/9/21 13:58:12 阅读更多 →
在 iPhone 上跑通几乎完整的 AI Agent:架构、踩坑与实测

在 iPhone 上跑通几乎完整的 AI Agent:架构、踩坑与实测

"我把一个几乎完整的 AI Agent,跑在了 iPhone 和 iPad 上"——这句话我憋了三个月才敢拿出来说。最开始我对这件事的判断是"套个壳、接个 API 不就完了?"可真把一个能感知、会规划、能调用工具、有长期记忆的 Agent 部署到实机上&am…

2026/9/21 13:58:12 阅读更多 →

最新新闻

草帽简笔画性能优化:3种绘图引擎横评

草帽简笔画性能优化:3种绘图引擎横评

草帽简笔画性能优化:3种绘图引擎横评 满屏红色的 StackTrace 看着就让人血压飙升,明明只是画个草帽简笔画,程序却卡死在内存溢出上。很多初学者以为这是代码逻辑错了,其实根源在于 性能优化 没做到位。在 Python 或…

2026/9/22 17:22:42 阅读更多 →
宜人贷源码解析:2026最新风控引擎拆解,3分钟看懂核心逻辑

宜人贷源码解析:2026最新风控引擎拆解,3分钟看懂核心逻辑

宜人贷源码解析:2026最新风控引擎拆解,3分钟看懂核心逻辑 官方文档堆砌如墙,核心逻辑藏在代码深处?别慌。在2026最新的技术迭代中,宜人贷的风控引擎依然是金融信贷领域的标杆。很多开发者苦于官方文档太长抓不住重点,直接跳进源码迷宫容易迷失…

2026/9/22 17:22:42 阅读更多 →
c大调速查手册:3步搞定跨项目代码迁移的性能陷阱

c大调速查手册:3步搞定跨项目代码迁移的性能陷阱

c大调速查手册:3步搞定跨项目代码迁移的性能陷阱 复制来的代码跑不通,报错信息却像天书?别慌,这行代码在原作者机器上飞起,到你这里就卡死,八成是环境差异或底层逻辑没对齐。我整理了一份 c大调速查手册 ,专门针对这类“水土不服”的性能瓶颈。…

2026/9/22 17:22:42 阅读更多 →
3个实操案例助你从入门到精通:如何战胜自己

3个实操案例助你从入门到精通:如何战胜自己

3个实操案例助你从入门到精通:如何战胜自己 面试官问:“讲下 Python 内存管理机制?” 你大脑一片空白,手心冒汗,只能支支吾吾说“引用计数”。 面试被问原理答不上来,这是应届生最痛的时刻。…

2026/9/22 17:22:42 阅读更多 →
查询身份证逻辑全解析与最佳实践

查询身份证逻辑全解析与最佳实践

查询身份证逻辑全解析与最佳实践 还在为环境配置卡半天?别急,这往往不是环境的问题,而是你对底层逻辑理解不到位。很多新人一上来就纠结 JDK…

2026/9/22 17:21:42 阅读更多 →
多特CS1.6一文搞懂:版本升级后API全变了怎么办

多特CS1.6一文搞懂:版本升级后API全变了怎么办

多特CS1.6一文搞懂:版本升级后API全变了怎么办 还在为多特CS1.6版本升级后API全变了而抓狂?明明昨天能跑的代码,今天直接报空指针异常,调试半天发现是底层接口签名彻底变了。别慌,这不是你的代码写得烂,而是这类老旧工业协议在现代化重…

2026/9/22 17:21:42 阅读更多 →

日新闻

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天 配置环境就卡半天?别怪机器慢,多半是你没选对工具链。在Java、Go或Python的项目现场, 手写实现…

2026/9/22 0:00:41 阅读更多 →
剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑 面试被问原理答不上来,是不是常态?别慌。很多开发者对着 GitHub 开源仓库里的代码发呆,看似简单实则暗藏玄机。今天这份【剑帝加点】速查手册,直接带你拆解核心实现,把面试必考的原理讲透。…

2026/9/22 0:00:41 阅读更多 →
手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优 复制来的代码跑不通不知道怎么调?别慌,这种“复制粘贴地狱”在开发圈太常见了。尤其是做 图片压缩网站…

2026/9/22 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/22 4:32:41 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/22 4:38:57 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/22 8:51:04 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/22 2:43:42 阅读更多 →