2026/10/10 19:03:08

Claude Code 配置 Ollama 本地大模型教程:用 cc-switch 做多通道切换与 TaoToken 统一 Key 管理

Claude Code 配置 Ollama 本地大模型教程:用 cc-switch 做多通道切换与 TaoToken 统一 Key 管理 1. 为什么要在 Claude Code 里接 Ollama 本地大模型Claude Code 是 Anthropic 推出的命令行编码助手默认走云端模型通道。它的好处是上下文理解强、工具调用稳但有两个现实问题一是网络请求要出公网二是按量计费长期跑下来成本不低。很多开发者手里有不错的显卡想让它优先跑本地模型把 Ollama 当成 Claude Code 的后端这就是「Claude Code 配置 Ollama 本地大模型」这个需求的核心。Ollama 是一个本地大模型运行工具一条ollama run就能把模型拉下来跑起来默认在127.0.0.1:11434提供 HTTP 接口。但它原生不是 Anthropic 的 Messages API 格式Claude Code 也不认 Ollama 的/api/chat。所以中间需要一个协议转换层把 Anthropic 格式的请求翻译成 Ollama 能懂的格式再把结果翻译回去。litellm 的 proxy 模式就是干这个的它能把ollama_chat/xxx这类模型包装成兼容接口。但只接一个本地模型还不够。实际开发里你会遇到本地模型跑不动长上下文时想切回云端、团队里有人用统一 Key 通道、有人用本地通道来回改配置文件很烦。cc-switch 就是解决这个切换问题的工具它通过管理不同的配置档案让你一条命令在「本地 Ollama 通道」和「TaoToken 统一 Key 通道」之间切换。TaoToken 在这里扮演的是统一入口角色把 endpoint 和 auth.json 指向它就能用一个 Key 管理多个模型通道不用每个工具单独配一遍。这套组合适合谁适合有本地显卡、想省调用成本、又需要偶尔切云端兜底的开发者。下面我把完整链路拆开每一步都给可复制的配置。2. 前置准备Ollama、litellm 与 TaoToken 统一 Key 通道动手前先把三样东西装好。第一是 Ollama去官网下载对应系统安装包装完在终端敲ollama --version能出版本号就成。第二是 litellm用 pip 装带 proxy 的版本pip install litellm[proxy]装完litellm --version验证一下。第三是 TaoToken 的 Key去控制台创建一个后面 auth.json 里要用。TaoToken 的 API 地址是https://taotoken.net/api控制台在https://taotoken.net/console创建 Key 的页面在https://taotoken.net/api-keys。这几个地址记牢配置里会反复出现。先把本地模型拉下来。这里用deepseek-r1:1.5b做示例体积小、启动快适合验证链路ollama run deepseek-r1:1.5b第一次跑会下载模型下完会进入交互界面随便问一句能回就说明 Ollama 正常。按CtrlD退出。确认服务在监听curl http://127.0.0.1:11434/api/tags返回 JSON 里能看到模型列表就对了。这一步很关键因为后面 litellm 要连的就是这个地址。如果这里不通后面全是白搭。接着准备 litellm 的配置文件。在项目目录下新建litellm_config.yaml内容如下model_list: - model_name: deepseek-r1:1.5b litellm_params: model: ollama_chat/deepseek-r1:1.5b api_base: http://127.0.0.1:11434 api_key: none model_info: supports_function_calling: false litellm_settings: drop_params: true这里几个参数解释一下。model_name是 litellm 对外暴露的名字Claude Code 请求时用的就是它。model字段的ollama_chat/前缀告诉 litellm 走 Ollama 的 chat 接口。api_base指向本地 Ollama。api_key填none是因为本地不需要鉴权。supports_function_calling: false很重要因为 1.5b 这种小模型不支持工具调用不声明的话 Claude Code 发工具请求会报错。drop_params: true让 litellm 自动丢弃 Ollama 不认识的参数避免 400。TaoToken 这边的准备就是拿到 Key然后确认它的 endpoint 是https://taotoken.net/api。这个通道后面会写进 cc-switch 的另一个档案里作为云端兜底。两个通道都准备好cc-switch 才有得切。3. 可复制配置litellm 启动、cc-switch 档案与 auth.json先把 litellm 跑起来。在litellm_config.yaml所在目录执行litellm --config litellm_config.yaml --port 4000看到Uvicorn running on http://0.0.0.0:4000就说明代理起来了。这个 4000 端口就是 Claude Code 要连的本地入口。验证一下curl http://127.0.0.1:4000/v1/models能列出deepseek-r1:1.5b就对了。接下来配 cc-switch。cc-switch 的配置一般放在~/.cc-switch/config.json不同版本路径可能略有差异以你本地实际为准。它的核心是维护多个 profile每个 profile 对应一套 Claude Code 的环境变量。下面给两个档案一个是本地 Ollama 通道一个是 TaoToken 统一 Key 通道{ profiles: [ { name: ollama-local, env: { ANTHROPIC_BASE_URL: http://127.0.0.1:4000, ANTHROPIC_API_KEY: none, ANTHROPIC_MODEL: deepseek-r1:1.5b } }, { name: taotoken-unified, env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: 你的TaoToken Key, ANTHROPIC_MODEL: claude-sonnet-4-20250514 } } ] }这里三件套要写全Base URL、Key、Model ID。本地档案的 Base URL 是 litellm 的 4000 端口Key 填noneModel ID 是 litellm 暴露的deepseek-r1:1.5b。TaoToken 档案的 Base URL 是https://taotoken.net/apiKey 换成你控制台创建的那串Model ID 按你实际要用的模型填。cc-switch 切换时就是把这组环境变量写进 Claude Code 读取的位置。除了 cc-switchClaude Code 自己也有 settings 文件通常在~/.claude/settings.json。如果你不用 cc-switch也可以直接在这里写{ env: { ANTHROPIC_BASE_URL: http://127.0.0.1:4000, ANTHROPIC_API_KEY: none, ANTHROPIC_MODEL: deepseek-r1:1.5b } }但用 cc-switch 的好处是切换时不用手改这个文件它帮你覆盖。另外有些工具链会读auth.json比如 Codex 系的工具路径一般在~/.codex/auth.json。如果你同时用 Codex把 TaoToken 的 Key 写进去{ OPENAI_API_KEY: 你的TaoToken Key, OPENAI_BASE_URL: https://taotoken.net/api }注意这里字段名是OPENAI_前缀因为 Codex 走的是 OpenAI 兼容格式TaoToken 的/api同时兼容 Anthropic 和 OpenAI 两种协议所以同一个 Key 能喂给不同工具。这就是「统一 Key 管理」的实际含义一个 Key多个工具复用endpoint 都指向 TaoToken。配置写完用 cc-switch 切到ollama-localcc-switch use ollama-local切完cc-switch current确认一下当前档案。然后启动 Claude Code它会读环境变量连到 litellm。4. 验证请求本地通道与 TaoToken 通道的连通性测试配置对不对跑一次就知道。先测本地通道。切到ollama-local后直接 curl litellm 的 Anthropic 兼容端点curl http://127.0.0.1:4000/v1/messages \ -H Content-Type: application/json \ -H x-api-key: none \ -H anthropic-version: 2023-06-01 \ -d { model: deepseek-r1:1.5b, max_tokens: 100, messages: [{role: user, content: 用一句话说明什么是递归}] }如果返回里有content字段和模型输出说明 litellm 到 Ollama 的链路通了。这一步能过Claude Code 基本就能用。然后在项目目录里启动claude进去问一句「帮我看看当前目录有哪些文件」如果它调用了工具并返回结果说明工具调用链路也正常。注意 1.5b 模型工具调用能力弱可能偶尔不触发换个 7b 以上的模型会稳一些。再测 TaoToken 通道。切档案cc-switch use taotoken-unified然后 curl TaoToken 的端点curl https://taotoken.net/api/v1/messages \ -H Content-Type: application/json \ -H x-api-key: 你的TaoToken Key \ -H anthropic-version: 2023-06-01 \ -d { model: claude-sonnet-4-20250514, max_tokens: 100, messages: [{role: user, content: 回复 ok}] }返回正常就说明统一 Key 通道可用。这时候再启动 Claude Code它会走 TaoToken。你可以对比两个通道的响应速度和质量本地快但能力弱云端慢但强按场景切。实测下来切换后 Claude Code 不需要重启但保险起见切完档案重新开一个终端会话更稳。如果你在同一个终端里切环境变量可能没刷新echo $ANTHROPIC_BASE_URL确认一下当前指向哪个地址。5. 常见报错排查401、local proxy failed 与 reading choices配这套链路最容易踩几个坑我按报错原文对照说。401 Unauthorized。本地通道出现这个多半是ANTHROPIC_API_KEY没设成none或者 litellm 配置里api_key写错了。检查litellm_config.yaml里api_key: none有没有引号YAML 里none不加引号会被解析成 null。TaoToken 通道出现 401就是 Key 错了或过期去https://taotoken.net/api-keys重新生成一个注意别把 Key 里的空格带进去。local proxy failed / connection refused。这个通常是 litellm 没起来或者端口被占。先curl http://127.0.0.1:4000/v1/models看通不通。不通就检查 litellm 进程还在不在lsof -i:4000看端口占用。如果 litellm 起来了但连 Ollama 失败报错里会带11434那就是 Ollama 没跑ollama serve手动起一下。reading choices 相关报错。这个一般出现在用 OpenAI 兼容格式请求但返回结构不对时。litellm 返回的是 Anthropic 格式如果你用 OpenAI SDK 去请求/v1/messages解析choices字段就会失败。解决办法是请求路径和 SDK 匹配Anthropic 格式用/v1/messagesOpenAI 格式用/v1/chat/completions。TaoToken 的/api两个都支持但路径别写混。OAuth 相关报错。Claude Code 某些版本会尝试 OAuth 登录如果你已经用环境变量配了 Key它可能还在走登录流程。检查~/.claude/settings.json里有没有残留的 OAuth 配置清掉确保env里的ANTHROPIC_API_KEY生效。cc-switch 切换后如果还报 OAuth重启终端。模型不支持工具调用。报错里会说tool_use不被支持。这就是supports_function_calling: false没配或者你用的模型确实不支持。换deepseek-r1:7b或qwen2.5:7b这类支持工具调用的模型同时把配置里的supports_function_calling改成true。排查顺序建议先确认 Ollama 通再确认 litellm 通再确认 cc-switch 当前档案对最后看 Claude Code 环境变量。一层层往上查别跳步。6. 长期编码与多通道管理的落地建议这套链路跑通后日常怎么用更顺我的做法是把 cc-switch 的档案按场景分写小脚本、改配置这种轻量活切ollama-local省调用做架构设计、长上下文重构切taotoken-unified借云端模型的能力。切换成本就一条命令比手改配置文件快得多。如果你经常跑 Agent 类任务比如让 Claude Code 自动改多个文件、跑测试、迭代建议长期挂 TaoToken 的 Coding Plan 通道本地小模型在长链路里容易断。TaoToken 的 Coding Plan 页面在https://taotoken.net/coding-plan适合需要稳定长跑的编码场景。模型对话调试在https://taotoken.net/chat接入文档在https://taotoken.net/doc遇到协议细节可以去翻。统一 Key 管理的价值在工具多了以后才明显。你可能有 Claude Code、Codex、Cline 好几个工具每个都配一遍 Key 很烦。把它们的 endpoint 都指向https://taotoken.net/apiKey 用同一个换 Key 时只改一处。auth.json、settings.json、cc-switch 档案里引用的都是同一个 Key维护成本降下来。最后一个实用技巧把 litellm 做成后台服务别每次手动起。Linux 下可以写个 systemd unitmacOS 用 launchd或者简单点用nohup litellm --config litellm_config.yaml --port 4000 。这样开机就在跑Claude Code 随时能连。Ollama 本身装完就是常驻服务不用管。两边都常驻cc-switch 只管切档案整个链路就稳了。