claude+litellm+LM studio +Qwen3-coder,免费能用:把本地 endpoint 改到 TaoToken 的完整配置 1. 本地 Qwen3-coder 与 Claude 混用时 endpoint 到底乱在哪如果你同时用 Claude Code 写业务代码、又想在本地 LM studio 里跑 Qwen3-coder 做离线补全大概率会遇到一个很烦的问题两套模型各有各的地址、各有各的 Key 格式Claude Code 只认 Anthropic 那套ANTHROPIC_BASE_URLLM studio 只认 OpenAI 兼容的/v1中间还夹着一个 LiteLLM 代理层。改着改着就分不清哪个端口对应哪个模型了。我自己踩过的坑是这样的一开始把 Claude Code 的ANTHROPIC_BASE_URL直接指到 LM studio 的http://127.0.0.1:1234/v1结果 Claude Code 发的是 Anthropic Messages 格式LM studio 只吃 OpenAI Chat Completions 格式直接 400。后来加了一层 LiteLLM 做协议转换本地 Qwen3-coder 能通了但一旦想切回云端 Claude又得手动改settings.json来回折腾。这篇要解决的就是这件事用 LiteLLM 当统一入口把本地 LM studio 的 Qwen3-coder 和 TaoToken 提供的 Claude 通道都挂到同一个config.yaml里Claude Code 只认一个本地端口模型切换靠--model参数完成endpoint 不再混乱。适合已经在本地跑过 LM studio、装过 LiteLLM、想让 Claude Code 同时吃本地模型和云端 Claude 的开发者。核心检索词就是 claude、litellm、LM studio、Qwen3-coder 这四个的组合配置。先说清楚整体链路避免后面看配置时迷路Claude CodeAnthropic 协议→ LiteLLM 本地代理http://127.0.0.1:4000做协议转换→ 分流到两个后端一个是 LM studio 的http://127.0.0.1:1234/v1跑 Qwen3-coder一个是 TaoToken 的https://taotoken.net/api跑 Claude 系列。这样 Claude Code 永远只连127.0.0.1:4000换模型只改--model后面的名字settings.json一次配好不用再动。下面按步骤来每一步都给可复制的片段。2. 前置准备LM studio 本地端口、LiteLLM 安装与 TaoToken Key 获取这一节把三样东西准备好本地 Qwen3-coder 服务、LiteLLM 代理、TaoToken 的 API Key。三者缺一不可顺序上建议先起本地模型再装代理最后拿 Key。2.1 LM studio 起 Qwen3-coder 并确认本地端口打开 LM studio在模型搜索里找 Qwen3-coder 的量化版本Q4_K_M 这类占用资源少精度损失可接受很适合本地部署。下载完在左侧「Developer」标签页里加载模型然后点「Start Server」。默认端口是1234服务地址就是http://127.0.0.1:1234/v1。注意两点一是 LM studio 的 OpenAI 兼容接口不需要真实 API Key但字段必须存在随便填dummy或lm-studio都行二是模型 ID 要和你加载的模型名对上在 server 页面能看到类似qwen3-coder-30b的标识后面 LiteLLM 配置里要用。先用 curl 确认本地服务活着curl http://127.0.0.1:1234/v1/models返回里能看到你加载的模型 ID 就说明本地通道 OK。如果连不上检查 LM studio 的 server 是否真的启动了以及端口有没有被占用。2.2 安装 LiteLLM 代理LiteLLM 是把多家模型统一成 OpenAI 格式的代理工具这里额外用它做 Anthropic 到 OpenAI 的协议转换。安装pip install litellm[proxy]装完确认版本litellm --version建议用 Python 3.10 以上的虚拟环境避免和系统包冲突。如果pip装完命令找不到多半是 Scripts 目录没进 PATH用python -m litellm --version也能跑。2.3 获取 TaoToken API KeyTaoToken 这边提供 Claude 系列的 API 通道走的是标准 Anthropic 兼容接口。先到控制台创建 Key注册/登录后进控制台https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content在 API Keys 页面新建一个 Keyhttps://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content拿到形如sk-xxxx的 Key 先存好后面写进config.yaml。API 基础地址是https://taotoken.net/api这个地址不加 UTM 参数直接用于配置。模型 ID 用 Claude 系列的标准名比如claude-sonnet-4-5这类具体以文档里的模型列表为准https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content三样齐了就可以写配置了。3. 可复制配置litellm config.yaml 双通道写法与 Claude Code settings.json这一节是全文核心给出两个可复制文件LiteLLM 的config.yaml和 Claude Code 的settings.json。路径和字段都按实际能跑通的来。3.1 config.yaml本地 Qwen3-coder TaoToken Claude 双通道在项目目录下新建config.yaml内容如下。注意model_name是你对外暴露的名字Claude Code 里--model用的就是它litellm_params.model才是真实后端模型。model_list: # 通道一本地 LM studio 的 Qwen3-coder - model_name: qwen3-coder-30b litellm_params: model: openai/qwen3-coder-30b api_base: http://127.0.0.1:1234/v1 api_key: dummy timeout: 120 max_retries: 3 temperature: 0.7 max_tokens: 2048 # 通道二TaoToken 提供的 Claude - model_name: claude-sonnet-4-5 litellm_params: model: anthropic/claude-sonnet-4-5 api_base: https://taotoken.net/api api_key: sk-你的TaoTokenKey timeout: 300 max_retries: 3 litellm_settings: drop_params: true general_settings: verbose: false cache: false几个关键点解释一下。openai/qwen3-coder-30b里的openai/前缀是告诉 LiteLLM 用 OpenAI 兼容协议去请求LM studio 正好吃这套。anthropic/claude-sonnet-4-5里的anthropic/前缀让 LiteLLM 用 Anthropic 协议去请求 TaoToken这样协议转换在 LiteLLM 内部完成Claude Code 那边感知不到差异。drop_params: true很重要因为 Claude Code 会带一些 LM studio 不认识的字段不丢弃会直接报错。cache: false避免本地调试时命中缓存看不到真实请求。3.2 启动 LiteLLMlitellm --config config.yaml --port 4000看到Uvicorn running on http://0.0.0.0:4000就说明代理起来了。这个4000端口就是 Claude Code 要连的地址。3.3 Claude Code settings.jsonClaude Code 的配置文件在用户目录下的.claude/settings.jsonWindows 是C:\Users\你的用户名\.claude\settings.json。写入{ env: { ANTHROPIC_AUTH_TOKEN: qwen3-coder-30b, ANTHROPIC_BASE_URL: http://127.0.0.1:4000, API_TIMEOUT_MS: 3000000, CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: 1 } }这里ANTHROPIC_AUTH_TOKEN填什么其实不影响 LiteLLM 转发真正的 Key 在config.yaml里但字段必须存在填个占位符即可。ANTHROPIC_BASE_URL指向 LiteLLM 的4000端口不是 LM studio 的1234这是最容易搞错的地方。三件套对照一下避免混淆组件Base URLKeyModel IDLM studio 本地http://127.0.0.1:1234/v1dummyqwen3-coder-30bTaoToken Claudehttps://taotoken.net/apisk-你的Keyclaude-sonnet-4-5LiteLLM 代理http://127.0.0.1:4000占位符上面两个 model_nameClaude Codehttp://127.0.0.1:4000占位符--model 指定4. 验证请求curl 测双通道连通与 Claude Code 实际调用配置写完别急着开 Claude Code先用 curl 把两条通道分别测通出问题好定位。4.1 测本地 Qwen3-coder 通道直接打 LiteLLM 的4000端口指定qwen3-coder-30bcurl http://127.0.0.1:4000/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer dummy \ -d { model: qwen3-coder-30b, messages: [{role: user, content: 用 Python 写一个快速排序}], max_tokens: 256 }返回里choices[0].message.content有代码输出说明本地通道通了。如果报连接错误先确认 LM studio 的 server 还在跑。4.2 测 TaoToken Claude 通道同样打4000换模型名curl http://127.0.0.1:4000/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer dummy \ -d { model: claude-sonnet-4-5, messages: [{role: user, content: 解释一下什么是闭包}], max_tokens: 256 }这条能返回内容说明 LiteLLM 到 TaoToken 的 Anthropic 协议转换正常。如果这里报 401多半是config.yaml里的 Key 写错了。4.3 Claude Code 实际调用两条通道都通后启动 Claude Code 指定模型claude --model qwen3-coder-30b进去随便问一句能正常回复就说明整条链路打通。想切云端 Claude 就重开claude --model claude-sonnet-4-5settings.json完全不用改这就是统一入口的好处。你也可以在 Claude Code 里用/model命令查看当前模型。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth这一节把最容易撞的四个报错列出来对照着改。401 Unauthorized出现在测 TaoToken 通道时说明config.yaml里api_key不对或过期。去控制台重新生成一个https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。注意 Key 要带sk-前缀别多复制空格。local proxy failed / connection refusedClaude Code 报这个基本是 LiteLLM 没起来或端口不对。确认litellm --config config.yaml --port 4000还在前台跑着settings.json里的ANTHROPIC_BASE_URL是http://127.0.0.1:4000而不是1234。端口被占用就换一个比如--port 4001同步改settings.json。Error reading choices / KeyError choices这个报错通常出现在 LiteLLM 转发后拿到的响应格式不对。常见原因是model前缀写错比如本地模型漏了openai/或者 Claude 漏了anthropic/。检查config.yaml里litellm_params.model的前缀本地用openai/TaoToken 用anthropic/。另外drop_params: true没开也会导致字段不兼容。OAuth / authentication errorClaude Code 有时会尝试走官方 OAuth 登录流程如果你已经用ANTHROPIC_AUTH_TOKEN走代理需要确保CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC设为1减少非必要请求。如果还报 OAuth 相关检查settings.json的 JSON 格式有没有多余逗号格式错误会导致整个 env 不生效。排查顺序建议先 curl 本地1234再 curl 代理4000的本地模型再 curl4000的 Claude最后才开 Claude Code。逐层定位比一上来就开 Claude Code 瞎试快得多。6. 长期编码与 Agent 场景把统一入口用顺手配置跑通只是第一步真正省心的是长期用起来。这里说几个实用习惯。第一把config.yaml纳入版本管理Key 用环境变量或单独文件别提交。LiteLLM 支持在api_key里写os.environ/TAOTOKEN_KEY这样配置里不出现明文api_key: os.environ/TAOTOKEN_KEY启动前export TAOTOKEN_KEYsk-xxxx即可。第二模型命名保持语义化。本地模型叫qwen3-coder-30b云端叫claude-sonnet-4-5Claude Code 里--model一眼能认出来。如果你经常在 Agent 模式跑长任务建议把云端 Claude 作为主力本地 Qwen3-coder 做离线补全或隐私敏感场景两者通过同一个4000端口切换不用改任何环境变量。第三如果你要跑更重的编码 Agent 或长时间任务TaoToken 的 Coding Plan 在配额和稳定性上更适合持续调用https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。日常验证模型是否正常用模型对话页面快速试一句就行https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。接入细节和模型列表随时查文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。最后提醒一个我实际踩过的点LM studio 加载大模型时显存吃紧会静默降速甚至断开LiteLLM 那边表现为超时。把timeout从 120 调到 300或者换更小的量化版本比反复重启代理有效。整套配置的核心就一句话——Claude Code 只认127.0.0.1:4000剩下的事交给 LiteLLM 的config.yaml分流endpoint 从此不再乱。