1. 为什么我要把 Claude Code 接到本地模型上
Claude Code 是 Anthropic 官方推出的命令行 AI 编程助手,能读项目、改文件、跑命令,体验确实顺。但它默认只认官方 API,一旦项目多、调用频繁,账单就有点肉疼。我平时写脚本、改小工具、做代码补全这类活儿,其实并不需要每次都上最强模型,本地跑一个开源代码模型完全够用。
于是就有了这套组合:Claude Code 负责交互和工具调用,LiteLLM 做协议转换代理,LM Studio 在本地加载模型。整条链路跑通之后,Claude Code 以为自己在调官方接口,实际请求全部落到你本机的模型上,不花一分钱 API 费用,代码和数据也不出本机。
这套方案适合谁?手上有 16GB 以上显存显卡、想零成本用 AI 编程助手的开发者;对代码隐私敏感、不想把公司代码发到云端的同学;以及想研究 Claude Code 工具调用机制、拿本地模型做实验的人。下面我把从装环境到验证成功的完整链路拆开讲,配置可以直接复制。
2. 前置准备:LM Studio、Claude Code 与 LiteLLM 三件套
先把三个组件的关系理清楚,不然后面配错了都不知道错在哪。
Claude Code 是客户端,它通过ANTHROPIC_BASE_URL这个环境变量决定请求发往哪里。默认发往 Anthropic 官方,我们把它改成 LiteLLM 的地址,请求就拐到本地了。
LiteLLM 是代理层,它对外暴露一个兼容 Anthropic 协议的接口,对内把请求翻译成 OpenAI 格式转发给 LM Studio。它靠一个config.yaml决定「哪个模型名映射到哪个后端」。
LM Studio 是模型运行平台,加载 GGUF 或 MLX 模型,对外提供 OpenAI 兼容的/v1接口,默认端口 1234。
安装三件套的命令如下,Claude Code 用 npm 全局装,LiteLLM 用 pip 装带 proxy 的版本:
# 1. 安装 Claude Code npm install -g @anthropic-ai/claude-code # 2. 安装 LiteLLM 代理(带 proxy 扩展) pip install 'litellm[proxy]' # 3. LM Studio 从官网下载安装包,图形化安装即可 # 下载地址:https://lmstudio.ai/装完之后先别急着配 Claude Code,按顺序验证每一层。先确认 LM Studio 起来了,再确认 LiteLLM 能转发,最后才配 Claude Code。这个顺序能帮你快速定位问题出在哪一层。
注意:LiteLLM 版本更新较快,如果
litellm --version报错,先pip install -U 'litellm[proxy]'升级到最新版。Claude Code 建议用 Node 18 以上环境。
3. 可复制配置:LM Studio 启动与 LiteLLM config.yaml 骨架
3.1 启动 LM Studio 本地服务
打开 LM Studio,在搜索栏找Qwen3-Coder系列模型下载,30B 版本对代码补全效果比较好,显存紧张就选 7B 或 14B。下载完成后切到左侧「Developer」标签页,选中模型,把 Server Port 保持默认 1234,点 Start Server。
服务起来后用 curl 验证一下,能返回模型列表就说明这层通了:
curl http://localhost:1234/v1/models返回内容里会列出你加载的模型 id,比如qwen/qwen3-coder-30b,这个 id 后面要填进 LiteLLM 配置里,别抄错。
3.2 编写 LiteLLM config.yaml
在任意目录新建config.yaml,内容如下。核心思路是把 Claude Code 认识的官方模型名,映射到 LM Studio 里的本地模型:
model_list: # Claude Code 兼容的模型映射 - 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 general_settings: master_key: sk-lmstudio-proxy-12345几个参数解释一下。model_name是 Claude Code 看到的模型名,建议用 Claude 官方格式,兼容性最好。model字段里的lm_studio/前缀是 LiteLLM 的 provider 标识,后面跟 LM Studio 里的真实模型 id。api_key填sk-dummy占位即可,LM Studio 本地不校验。master_key是你自己设的代理访问密钥,Claude Code 要用它做认证。
3.3 启动 LiteLLM 代理
在config.yaml所在目录执行:
litellm --config config.yaml看到类似下面的输出就说明代理起来了:
LiteLLM: Proxy initialized with Config, Set models: claude-3-5-haiku-20241022 claude-3-5-sonnet-20241022 qwen3-coder-30b INFO: Uvicorn running on http://0.0.0.0:4000默认监听 4000 端口。如果这个端口被占用,加--port 4001换一个,后面环境变量里的地址也要同步改。
4. 配置 Claude Code 环境变量并验证请求
4.1 设置环境变量
新开一个终端窗口,设置三个变量。ANTHROPIC_BASE_URL指向 LiteLLM,ANTHROPIC_AUTH_TOKEN填 config 里的 master_key,同时清掉可能冲突的官方 key:
export ANTHROPIC_BASE_URL="http://localhost:4000" export ANTHROPIC_AUTH_TOKEN="sk-lmstudio-proxy-12345" unset ANTHROPIC_API_KEY想让它永久生效,把前两行写进~/.bashrc或~/.zshrc。但如果你平时也用官方 Claude Code,建议别写死,用的时候临时 export,避免把官方请求也拐到本地。
4.2 连通性验证
先做一次最简单的对话测试,确认整条链路通:
echo "你好,请用一句话介绍你自己" | claude --model claude-3-5-haiku-20241022如果返回了本地模型的自我介绍,说明 Claude Code → LiteLLM → LM Studio 三层全部打通。接着测代码生成能力:
echo "请写一个 Python 斐波那契函数,带类型注解" | claude --model claude-3-5-haiku-20241022实测下来,Qwen3-Coder 30B 在这种单函数生成任务上响应很快,代码质量也够用。再试一个带工具调用的场景,比如让它读当前目录的文件:
claude --model claude-3-5-haiku-20241022 "列出当前目录下所有 .py 文件,并统计行数"这一步能验证工具调用是否正常。如果模型直接输出一段 JSON 字符串而不是真的去执行命令,说明工具调用没被正确触发,往下看排错部分。
4.3 多模型切换配置
如果你本地加载了多个模型,可以在 config.yaml 里配多组映射,用不同 model_name 区分用途:
model_list: - model_name: claude-3-5-haiku-coding 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-chat litellm_params: model: lm_studio/qwen/qwen2.5-72b-instruct api_key: sk-dummy api_base: http://localhost:1234/v1 - model_name: claude-3-5-reasoning litellm_params: model: lm_studio/deepseek-r1-distill-qwen-7b api_key: sk-dummy api_base: http://localhost:1234/v1之后按任务类型切换:
claude --model claude-3-5-haiku-coding # 日常编程 claude --model claude-3-5-sonnet-chat # 通用对话 claude --model claude-3-5-reasoning # 推理任务5. 本篇常见错误排查
5.1 模型加载失败或显存不足
30B 模型大概需要 20GB 显存,7B 约 6GB。如果 LM Studio 加载时报 OOM,先换更小的量化版本,比如 Q4_K_M。另一个容易忽略的点是 flash attention,部分显卡驱动下不开这个选项会加载失败,在 LM Studio 的模型设置里勾上再试。
5.2 代理连接失败
curl http://localhost:4000/health如果连不上,先确认 LiteLLM 进程还在跑,再看 4000 端口有没有被别的程序占用。换端口的话,ANTHROPIC_BASE_URL要同步改。另外 config.yaml 的缩进必须是空格,用 Tab 会解析失败,YAML 对缩进很敏感。
5.3 响应速度慢
本地模型推理速度取决于显卡和模型大小。如果 30B 太慢,换 14B 或 7B。也可以在 LM Studio 里调低上下文长度,减少 KV cache 占用。LiteLLM 侧可以配request_timeout避免长请求被截断。
5.4 模型名选择困惑
这是最容易踩的坑。很多人问:为什么配置里要用claude-3-5-haiku-20241022而不是直接写qwen3-coder-30b?原因是 Claude Code 针对官方模型名做了功能适配,用官方名能获得更完整的工具调用支持。如果你直接用qwen3-coder-30b,模型也能跑,但会出现该调工具时不调、直接吐 JSON 字符串的问题。所以推荐优先用 Claude 官方格式的 model_name。
5.5 工具调用不触发
除了模型名问题,还要确认 LiteLLM 版本支持 Anthropic 协议转换。老版本可能只转 OpenAI 格式,导致 Claude Code 的工具调用字段丢失。升级到最新版litellm[proxy]基本能解决。如果还不行,在 config.yaml 的litellm_params里加drop_params: true试试。
6. 长期编码场景的接入建议
本地模型跑通之后,日常写代码、改脚本、做代码补全都能用,零成本这点很香。但如果你要长时间跑 Agent 任务、批量重构项目,本地模型的上下文长度和稳定性还是不如云端。这种场景可以走 TaoToken 的 Coding Plan,专门面向长期编码和 Agent 调用,模型对话能力可以在模型对话页直接体验,接入细节看接入文档。
配置过程中如果遇到认证或密钥问题,去 API Keys 页面生成和管理密钥,控制台在 console 页面。Claude Code 相关的 Anthropic 协议接入说明在 ClaudeCodeAnthropic 文档里,对照着检查环境变量和请求格式,基本能覆盖大部分报错。
我自己的用法是:日常小改动走本地 Qwen3-Coder,省钱又保护隐私;遇到复杂重构或长链路 Agent 任务,切到云端模型保证稳定性。两套环境变量分开管理,用的时候临时 export,互不干扰。