尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

AI编程不花钱!Claude Code + 本地模型的完美搭配方案:TaoToken统一Key接入LiteLLM与LM Studio

AI编程不花钱!Claude Code + 本地模型的完美搭配方案:TaoToken统一Key接入LiteLLM与LM Studio 1. 为什么我决定让 Claude Code 跑在本地模型上Claude Code 这个工具用起来确实顺手终端里直接对话、改代码、跑命令交互逻辑比很多 IDE 插件都干净。但问题也很现实它默认只认 Anthropic 官方 API按 token 计费稍微重度用几天账单就上来了。我同时开了几个 AI 编程工具的订阅每个月加起来是一笔不小的开销于是开始琢磨能不能让它调用本地部署的开源模型。这个想法听起来有点绕但拆开看其实很清晰。Claude Code 本质上是一个客户端它把请求发到一个兼容 Anthropic 协议的接口然后解析返回结果。只要我们能提供一个「看起来像 Anthropic」的接口背后接什么模型它并不关心。LiteLLM 正好能干这件事——它是一个模型 API 代理支持把不同厂商、不同协议的模型统一成 OpenAI 或 Anthropic 格式对外暴露。LM Studio 则负责在本地把开源模型跑起来提供一个 OpenAI 兼容的/v1接口。所以整条链路是Claude Code → LiteLLM 代理 → LM Studio 本地服务 → 本地开源模型。全程数据不出本机除了电费没有额外成本。这套方案适合两类人一是想控制 AI 编程成本、又不想牺牲 Claude Code 交互体验的开发者二是对代码隐私敏感、希望模型完全跑在本地环境里的团队。下面我把从零到跑通的完整过程写出来包括配置片段、验证命令和几个我实际踩过的坑。2. TaoToken 统一 Key 与 API 通道的前置准备在讲本地链路之前先说一下 TaoToken 在这套方案里的位置。TaoToken 提供的是一个统一的 Key 和 API 通道官网是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 入口是 https://taotoken.net/api 。它的作用是让你用一个 Key 就能访问多种模型通道省去在多个平台之间来回切换、分别管理密钥的麻烦。在这套本地编程链路里TaoToken 主要承担两个角色。第一当你本地模型跑不动、或者想临时切换到更强的在线模型时LiteLLM 配置里可以直接把某个model_name指向 TaoToken 的通道不用改 Claude Code 那边的任何设置。第二TaoToken 的 Key 可以作为 LiteLLM 的master_key之外的备用鉴权层方便你在多台机器之间同步配置。你需要提前准备的东西不多一个 TaoToken 账号和对应的 API Key。获取方式很简单登录后在控制台的 API Keys 页面生成即可地址是 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。生成后先复制保存后面配置 LiteLLM 时会用到。如果你只是想先跑通本地模型TaoToken 的 Key 可以先不填等本地链路验证成功后再加进来做混合路由。这里要强调一点TaoToken 是正规的 API 通道服务不是所谓的「中转」或灰色代理它的接口文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 里面有完整的协议说明和示例。我把它接进 LiteLLM 的方式和接任何其他 OpenAI 兼容服务是一样的没有任何特殊操作。3. 可复制的 LiteLLM 与 LM Studio 配置片段这一节是整篇的核心我直接把能用的配置贴出来你复制后按自己的路径和模型名微调即可。先装依赖。LM Studio 从官网下载安装包装好后在界面里搜索并下载一个编码能力强的模型比如 Qwen3-Coder 系列。Claude Code 用 npm 全局安装LiteLLM 用 pip 装代理版本npm install -g anthropic-ai/claude-code pip install litellm[proxy]LM Studio 装好后进入开发者标签页启动本地服务器默认监听1234端口。加载模型时有两个参数值得注意一是 GPU 卸载层数GPU Offload显存够就拉满二是上下文长度Claude Code 的请求上下文比较长建议至少设到 8192太小会在处理大文件时截断。加载完成后用一条命令确认服务活着curl http://localhost:1234/v1/models返回里能看到你加载的模型 ID说明 LM Studio 侧就绪。接下来写 LiteLLM 的配置文件我命名为config.yaml放在用户目录下model_list: - model_name: claude-3-5-haiku-20241022 litellm_params: model: lm_studio/qwen/qwen3-coder-30b api_key: sk-dummy api_base: http://localhost:1234/v1 - model_name: claude-3-5-sonnet-20241022 litellm_params: model: lm_studio/qwen/qwen3-coder-30b api_key: sk-dummy api_base: http://localhost:1234/v1 - model_name: qwen3-coder-30b litellm_params: model: lm_studio/qwen/qwen3-coder-30b api_key: sk-dummy api_base: http://localhost:1234/v1 - model_name: taotoken-online litellm_params: model: openai/qwen-plus api_key: os.environ/TAOTOKEN_API_KEY api_base: https://taotoken.net/api general_settings: master_key: sk-lmstudio-proxy-12345这段配置里前三个model_name都指向本地 LM Studio 的同一个模型区别只是对外暴露的名字不同。第四个taotoken-online是备用通道当你想临时用在线模型时把 Claude Code 的模型名切过去就行。api_key那里用了环境变量引用避免把 Key 写死在文件里。启动 LiteLLM 代理export TAOTOKEN_API_KEY你的TaoToken Key litellm --config config.yaml看到Uvicorn running on http://0.0.0.0:4000就说明代理起来了。然后配置 Claude Code 的环境变量让它把请求发到 LiteLLM 而不是官方export ANTHROPIC_BASE_URLhttp://localhost:4000 export ANTHROPIC_AUTH_TOKENsk-lmstudio-proxy-12345 unset ANTHROPIC_API_KEY注意ANTHROPIC_AUTH_TOKEN要和配置文件里的master_key一致ANTHROPIC_API_KEY必须清掉否则 Claude Code 会优先用它去连官方接口导致 401。这三件套——Base URL、Key、Model ID——在 Claude Code 侧缺一不可Model ID 就是启动时--model指定的那个名字。4. 一次请求验证与成功结果确认配置写完后别急着写代码先用最小请求验证链路通不通。最直接的方式是用 curl 打 LiteLLM 的接口curl http://localhost:4000/v1/chat/completions \ -H Authorization: Bearer sk-lmstudio-proxy-12345 \ -H Content-Type: application/json \ -d { model: claude-3-5-haiku-20241022, messages: [{role: user, content: 用一句话说明什么是递归}] }如果返回里choices[0].message.content有正常文本说明 LiteLLM 到 LM Studio 这一段通了。接着测 Claude Code 本身echo 请写一个 Python 函数判断一个字符串是否为回文 | claude --model claude-3-5-haiku-20241022成功的话终端会流式输出一段 Python 代码并且 Claude Code 会显示它调用了工具、读取了上下文。我实测下来Qwen3-Coder 30B 在生成这种小函数时响应很快基本两三秒出结果。如果你想验证工具调用是否完整可以让它执行一个需要读写文件的任务比如「在当前目录创建一个 test.py 并写入快速排序实现」观察它是否会真正调用文件写入工具而不是只把代码打印出来。这里有个细节值得注意Claude Code 对模型名有格式偏好。用claude-3-5-haiku-20241022这种官方格式的名字时工具调用触发得更稳定直接用qwen3-coder-30b也能跑但偶尔会出现「该调工具时不调、直接输出 JSON 字符串」的情况。所以我在配置里做了映射让 Claude Code 始终看到官方格式的名字背后实际走本地模型。验证在线备用通道时把模型名换成taotoken-online再发一次请求如果返回正常说明 TaoToken 通道也接好了。这样你就有了一个「本地优先、在线兜底」的双通道结构。5. 本篇常见错误排查对照跑这套链路时我遇到过几个典型报错这里按现象、原因、解法列出来方便你对照。401 Unauthorized最常见。原因通常是ANTHROPIC_API_KEY没清掉Claude Code 拿着旧 Key 去连官方接口了。解法是unset ANTHROPIC_API_KEY并确认ANTHROPIC_AUTH_TOKEN和 LiteLLM 的master_key完全一致。如果 curl 打 LiteLLM 也 401检查请求头里的 Bearer 值有没有拼错。local proxy failed / connection refusedLiteLLM 没启动或者端口被占用。先lsof -i :4000看端口状态如果被别的进程占了启动时加--port 4001换端口同时把ANTHROPIC_BASE_URL改成对应端口。另外确认 LM Studio 的服务器是「Running」状态不是只加载了模型但没开服务。Error reading choices / 返回体解析失败多半是 LM Studio 返回的格式和 LiteLLM 预期不一致常见于模型加载不完整或上下文超限。检查 LM Studio 日志里有没有context length exceeded把上下文调大或者换一个更小的模型先验证链路。也有可能是模型名在 LM Studio 里的实际 ID 和配置里写的不一样用curl http://localhost:1234/v1/models核对准确 ID。OAuth 相关报错 / 提示登录Claude Code 检测到它在连官方触发了登录流程。根因还是环境变量没生效。注意export只在当前 shell 有效换终端窗口要重新设。建议把这几行写进~/.zshrc或~/.bashrc但TAOTOKEN_API_KEY这种敏感值建议用单独的 env 文件加载别直接写进 shell 配置。工具调用不触发、直接吐 JSON这是模型名格式问题。把--model换成claude-3-5-haiku-20241022这类官方格式再试。如果还是不行可能是模型本身对 function calling 支持不好换 Qwen3-Coder 或 DeepSeek 系列里明确支持工具调用的版本。响应特别慢先看 LM Studio 是否用了 GPU 加速CPU 推理 30B 模型会非常慢。其次看显存是否够30B 量化模型大约需要 20GB 显存不够就会部分卸载到内存速度断崖式下降。实在跑不动就换 7B 或 14B 的模型编码任务上小模型配合好的提示词也能用。6. 把这条链路用起来的几个实际建议跑通之后我建议你把 Claude Code 的模型切换做成习惯。日常写业务代码、改 bug 用本地模型遇到复杂架构设计或需要强推理的任务临时切到taotoken-online通道。切换只需要改--model参数不用动任何配置文件。如果你经常在多个项目间切换可以给 LiteLLM 配多个model_name分别映射到不同的本地模型比如一个专门写 Python、一个专门写前端。Claude Code 启动时指定对应名字即可。LiteLLM 的配置文件支持热重载改完保存后代理会自动读取新配置不用重启。另外提醒一点本地模型的输出质量和在线大模型有差距尤其在处理大型代码库、多文件重构时上下文理解和指令遵循会弱一些。我的做法是把它定位成「日常轻量任务的省流方案」重活还是交给在线通道。这样既控制了成本又不会在关键任务上掉链子。最后TaoToken 的接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 里面有不同语言的调用示例如果你想把这条链路集成到自己的脚本或 CI 流程里可以参考。模型对话入口在 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 想先试试通道质量的话可以直接在网页上对话验证。长期做编码和 Agent 任务的话Coding Plan 页面 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 里有更详细的套餐说明。
返回列表