litellm 适配 claude code 遇到的坑记录:从 api_base 到 Anthropic 兼容层
1. litellm 适配 claude code 的 api_base 与 Anthropic 兼容层踩坑记录litellm 是一个把多家大模型 API 统一成 OpenAI 或 Anthropic 格式的网关claude code 是 Anthropic 官方的命令行编码工具两者组合起来能让 claude code 用上非 Anthropic 的模型。听起来很美好但我在把 litellm 作为统一网关接入 claude code 的过程中被 api_base、Anthropic 消息格式和 Vertex AI 后端之间的兼容性问题折腾了整整两天。这篇记录面向已经在用 litellm 的开发者把请求路由和鉴权配置里最常见的失败模式拆开讲清楚每一步都给出可复制的配置和验证动作包括 curl 探活和日志比对帮你快速定位报错到底出在哪一层。核心检索词先摆出来litellm 接入 claude code 时api_base 指向哪里、Anthropic 兼容层走哪个后缀、Vertex AI 后端为什么会被意外触发这三个问题决定了你的请求最终打到哪个端点。适合谁看已经在本地跑起 litellm、想让 claude code 复用这套网关、但被 401 或 RESOURCE_EXHAUSTED 卡住的开发者。如果你还没搭 litellm也能跟着走因为我会把最小可用的 config.yaml 完整贴出来。我踩的第一个坑就是以为只要把 ANTHROPIC_BASE_URL 指向 litellm 就万事大吉结果 claude code 抛出的错误里赫然写着 Vertex AI 和 limit0而我根本没配过 Vertex AI。这个现象背后是 claude code 的路由逻辑它默认走 Anthropic 的 /v1/messages 格式但也内置了对 /anthropic、/vertex_ai/v1、/bedrock 这几个后缀的识别一旦你的 base_url 或环境变量里带了相关线索它就会切到对应后端而 litellm 那边如果没有对应的 key请求就会以奇怪的方式失败。下面按顺序把每个坑拆开。2. TaoToken 前置准备统一网关的 Key 与 Base URL 怎么拿在讲 litellm 的配置之前先把上游凭据准备好。我这次用的是 TaoToken 作为上游统一入口它的好处是同一个 Key 能覆盖多种模型省得在 litellm 里为每个后端单独配 key。你需要先拿到两样东西API Key 和 Base URL。访问 https://taotoken.net/api 可以看到接口说明Key 的申请在控制台完成地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。拿到 Key 之后Base URL 统一用 https://taotoken.net/api注意这个地址不带任何路径后缀litellm 的 api_base 就填它。这里有个容易混淆的点TaoToken 的 Base URL 是给 litellm 用的而 claude code 的 ANTHROPIC_BASE_URL 要指向你本地的 litellm 服务比如 http://127.0.0.1:4000。两层地址不要搞反否则 claude code 会直接把请求打到上游绕过 litellm 的格式转换Anthropic 消息格式对不上就会报错。如果你只是想先验证模型能不能通可以直接用模型对话页面测一下地址是 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。确认 Key 有效之后再回到 litellm 的配置。对于长期做编码或 Agent 的场景可以考虑 Coding Plan地址是 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content它的额度策略更适合高频调用。需要提醒的是litellm 的 master_key 这个配置项坑了很多人。如果你只是自用本地测试时 litellm 不填 master_key 也能跑claude code 那边只填 base_url 就能调通。但一旦你在 litellm 里设了 master_keyclaude code 的 ANTHROPIC_AUTH_TOKEN 就必须和它一致否则会报 401。我当初就是本地 apifox 测试通过放到 claude code 里死活 401排查半天才发现是 master_key 和 auth token 不匹配。自用场景建议先不设 master_key减少一层鉴权变量。3. 可复制的 litellm config.yaml 与 claude code settings 配置这一节给出完整的配置文件路径和字段都按实际能跑通的版本来写。litellm 的配置文件默认放在项目根目录或 ~/.litellm/config.yaml启动时用litellm --config ./config.yaml --port 4000。先看 litellm 的 config.yamlmodel_list: - model_name: claude-sonnet-4-20250514 litellm_params: model: anthropic/claude-sonnet-4-20250514 api_base: https://taotoken.net/api api_key: os.environ/TAOTOKEN_API_KEY - model_name: gemini-2.5-pro litellm_params: model: gemini/gemini-2.5-pro api_base: https://taotoken.net/api api_key: os.environ/TAOTOKEN_API_KEY litellm_settings: drop_params: true set_verbose: true general_settings: master_key: sk-litellm-local几个关键点。第一model字段里的前缀anthropic/和gemini/决定了 litellm 用哪个 provider 的适配器这个前缀不能省否则 litellm 不知道该怎么转换消息格式。第二api_base统一指向 TaoToken 的 https://taotoken.net/api不要在后面加 /v1 或 /anthropic加了反而会 404。第三api_key用环境变量引用启动前先export TAOTOKEN_API_KEY你的key避免把 Key 写死在文件里。第四master_key我设了一个本地值claude code 那边必须对应填上。然后是 claude code 的 settings 文件路径在 ~/.claude/settings.json{ env: { ANTHROPIC_MODEL: claude-sonnet-4-20250514, ANTHROPIC_BASE_URL: http://127.0.0.1:4000, ANTHROPIC_AUTH_TOKEN: sk-litellm-local } }注意 ANTHROPIC_BASE_URL 填的是本地 litellm 地址不带任何后缀。ANTHROPIC_AUTH_TOKEN 和 litellm 的 master_key 保持一致。ANTHROPIC_MODEL 填 litellm config 里定义的 model_name不是上游的真实模型名。如果你用的是 Codex 或 Cline 这类工具配置思路一样只是文件位置不同。Codex 的 auth.json 里填 base_url 和 api_keyCline 的 MCP 配置里填 Base URL、Key、Model ID 三件套。三件套缺一不可尤其是 Model ID 要和 litellm 的 model_name 对上。启动 litellm 之后先别急着开 claude code用 curl 探活确认 litellm 本身是通的curl -X POST http://127.0.0.1:4000/v1/messages \ -H Content-Type: application/json \ -H x-api-key: sk-litellm-local \ -H anthropic-version: 2023-06-01 \ -d { model: claude-sonnet-4-20250514, max_tokens: 64, messages: [{role: user, content: ping}] }如果这一步返回正常的 Anthropic 格式响应说明 litellm 到上游的链路是通的。如果返回 401检查 master_key 和 x-api-key 是否一致。如果返回 404检查 api_base 是不是多加了后缀。4. 验证请求与成功结果从 curl 到 claude code 的完整链路curl 探活通过之后下一步是验证 claude code 能不能真正走通。先启动 litellm 并打开 verbose 日志这样每个请求的路由和转换过程都能看到export TAOTOKEN_API_KEY你的key litellm --config ./config.yaml --port 4000 --detailed_debug日志里会打印每个请求命中的 provider、转换后的上游请求体、以及上游返回的状态码。这一步非常关键因为 claude code 报的错往往是它自己抛的真正的失败原因藏在 litellm 的日志里。然后开一个终端跑 claude codeclaude进去之后随便问一句比如「读一下当前目录的 README」。如果一切正常你会看到 claude code 正常调用工具、读取文件、返回结果。同时 litellm 的日志里会显示请求命中了anthropic/claude-sonnet-4-20250514这个 provider上游返回 200。成功的关键标志有三个。第一litellm 日志里 provider 是 anthropic 而不是 vertex_ai。第二请求路径是 /v1/messages 而不是 /vertex_ai/v1/messages。第三claude code 没有抛出 RESOURCE_EXHAUSTED 或 limit0 这类错误。我实测下来只要 config.yaml 里 model 前缀写对、api_base 不带后缀、master_key 和 auth token 一致这条链路是能稳定跑通的。之前卡住的原因就是 claude code 意外走了 Vertex AI 后端而 litellm 那边没有 Vertex AI 的 key导致请求在格式转换阶段就失败了。如果你想让 claude code 用上 Gemini 模型把 ANTHROPIC_MODEL 改成 gemini-2.5-pro 即可litellm 会自动用 gemini 适配器转换消息格式。但要注意Gemini 对 Anthropic 的 tool use 格式支持不完整claude code 调用工具时可能会报格式错误这个后面排障章节会讲。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth这一节把我在适配过程中遇到的真实报错逐个拆开给出定位方法和解决动作。第一个是 401 Unauthorized。这个最常见原因通常是 master_key 和 ANTHROPIC_AUTH_TOKEN 不一致。排查方法在 litellm 日志里搜Authentication Error如果看到Invalid proxy server token passed就是 token 对不上。解决动作把两边改成同一个值或者干脆去掉 master_key 自用。还有一种 401 是上游返回的说明 TaoToken 的 Key 无效或过期去控制台重新生成一个。第二个是 local proxy failed。这个报错说明 claude code 连不上本地的 litellm 服务。排查方法先curl http://127.0.0.1:4000/health看 litellm 是否在跑如果连不上就是端口没起或防火墙拦了。解决动作确认 litellm 启动时 --port 4000 和 settings.json 里的端口一致确认没有其他进程占用 4000。第三个是 reading choices 相关报错。这个通常出现在 litellm 把 Anthropic 格式转成 OpenAI 格式再转回来的时候字段丢失导致解析失败。排查方法在 litellm 日志里找reading choices或undefined看是哪个字段为空。解决动作在 litellm_settings 里加drop_params: true让 litellm 丢弃上游不支持的参数减少转换失败的概率。第四个是 OAuth 相关报错。如果你用的是 Claude Code 的 OAuth 登录模式它会尝试走 Anthropic 官方端点而不是你配的 base_url。排查方法看报错里有没有oauth或console.anthropic.com。解决动作确保用的是 ANTHROPIC_AUTH_TOKEN 而不是 OAuth token或者在 settings.json 里显式设置apiKeyHelper指向你的 token。第五个是 RESOURCE_EXHAUSTED 和 limit0。这个是我踩得最深的坑。报错里出现 Vertex AI 和 limit0说明 claude code 没走你配的 litellm而是切到了 Vertex AI 后端。原因是 claude code 识别到了某些环境变量或 base_url 里的线索误判成了 Vertex AI 模式。排查方法检查 ANTHROPIC_BASE_URL 是不是带了 /vertex_ai 后缀检查环境里有没有 GOOGLE_APPLICATION_CREDENTIALS 之类的变量。解决动作把 base_url 改成纯本地地址清掉所有 Vertex AI 相关的环境变量。第六个是工具调用格式错误。claude code 调用工具时如果上游模型对 Anthropic 的 tool use 格式支持不好会报tool_use或input_schema相关错误。排查方法在 litellm 日志里看转换后的请求体对比 Anthropic 官方格式。解决动作换一个对 tool use 支持更好的模型或者在 litellm 里加自定义转换逻辑。6. 语义一致的 CTA 与后续接入建议排障和接入相关的文档都在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content里面有完整的接口说明和示例。Key 的管理在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content可以随时生成和吊销。如果你主要做编码或 Agent 场景Coding Plan 的额度策略更划算地址是 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。最后说一个实用技巧。litellm 的日志级别调到 detailed_debug 之后每个请求的完整链路都能看到包括 claude code 发来的原始请求、litellm 转换后的上游请求、上游返回的原始响应、以及转换回 Anthropic 格式的最终响应。排障时把这四段日志对照着看基本能定位到问题出在哪个环节。我后来养成习惯每次改配置先跑一遍 curl 探活再看 litellm 日志确认 provider 正确最后才开 claude code这样能把问题范围缩小到最小。

相关新闻

CLI+JSON Schema:轻量级结构化数据验证工作流

CLI+JSON Schema:轻量级结构化数据验证工作流

1. 这不是“安全审计”培训课,而是一套可立即上手的 CLI 安全验证工作流你有没有遇到过这样的场景:写完一个配置文件,心里没底——它真的符合团队约定的结构吗?部署前手动检查 YAML 里几十个字段是否拼写正确、类型匹配、必填项齐…

2026/10/18 22:27:40 阅读更多 →
Java宠物管理系统:Spring Boot分层架构与事务实战

Java宠物管理系统:Spring Boot分层架构与事务实战

简介:本资源是一套完整的Java Web课程设计项目——基于SSM框架的宠物管理系统,面向计算机专业本科生、Java初学者及Web开发入门者,旨在通过真实业务场景(宠物信息管理、用户领养记录等)帮助学习者掌握企业级Java全栈开…

2026/10/18 22:27:40 阅读更多 →
开源智能体 XAgent 实战:从任务描述到自动执行的企业级执行引擎拆解(附 CoPaw/OpenClaw 对比)

开源智能体 XAgent 实战:从任务描述到自动执行的企业级执行引擎拆解(附 CoPaw/OpenClaw 对比)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 22:27:40 阅读更多 →

最新新闻

PlantUML驱动的可执行架构图设计方法论

PlantUML驱动的可执行架构图设计方法论

1. 项目概述:这不是画图,是构建可执行的逻辑骨架“diagram-design”这个词组乍一看像美术课作业,但在我过去十年带过的几十个跨领域项目里,它从来不是PPT里的装饰性插图,而是系统落地前最关键的“可执行蓝图”。我见过…

2026/10/19 0:26:02 阅读更多 →
扩展有限元XFEM从原理到C++实现:裂缝模拟与渗透率联动实战

扩展有限元XFEM从原理到C++实现:裂缝模拟与渗透率联动实战

干数值模拟这行当,最让人头秃的往往不是力学推导本身,而是建模那一关。常规有限元里,裂缝面必须跟单元边界重合,网格拓扑得迁就裂缝几何。遇到一条弯弯曲曲的裂缝倒还好,顶多多切几刀;可真到了多裂缝交叉、…

2026/10/19 0:26:02 阅读更多 →
Agent Skills深度架构解析与实战:从MCP到TaoToken的智能体能力编排

Agent Skills深度架构解析与实战:从MCP到TaoToken的智能体能力编排

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:25:02 阅读更多 →
如何将 PostgreSQL MCP 服务器与 Cursor 或 Claude 结合使用:TaoToken 统一 Key 接入实战

如何将 PostgreSQL MCP 服务器与 Cursor 或 Claude 结合使用:TaoToken 统一 Key 接入实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:25:02 阅读更多 →
那张被审稿人点赞的图是怎么做出来的?科迅捷AI(官方网站:www.kexunjie.com)有答案

那张被审稿人点赞的图是怎么做出来的?科迅捷AI(官方网站:www.kexunjie.com)有答案

想象这样一个场景:你的博士论文投稿三个月,审稿意见回来了,其中一条写着这张图设计得尤其清晰、信息量大。这是审稿人少见的正面评价,在满是修改意见的意见单里格外显眼。那张被点赞的图,到底是怎么做出来的&#xff1…

2026/10/19 0:25:02 阅读更多 →
论文里的数据分析别硬编,科迅捷AI(官方网站:www.kexunjie.com)把方法讲明白

论文里的数据分析别硬编,科迅捷AI(官方网站:www.kexunjie.com)把方法讲明白

本科论文里最常见的硬伤之一,是数据分析部分。数据是编的、图表是凑的、结论是事先想好再回头找数的。每年答辩季,老师都能听到几个自相矛盾的回答,问题几乎都出在数据不是自己做的。这一段对比一下硬编数据和认真做分析两种路径的差别&#…

2026/10/19 0:25:02 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →