1. 为什么要给 Claude、Codex、Gemini 换本地引擎
用云端 API 写代码,时间长了总会碰到三个绕不开的问题。第一是账单,按 token 计费,一个下午重构几个文件,费用就悄悄爬上去了,尤其是让 Agent 反复读上下文、跑多轮的时候,消耗比想象中快。第二是隐私,公司项目、内部接口、带业务逻辑的代码,发给第三方服务这件事,不是每个团队都能接受。第三是网络,出差、断网、内网环境里,云端接口直接不可用,活就干不下去。
本地模型正好把这三点全解决:模型跑在自己机器上,零 token 费用;对话和代码不出本机;断网也能跑。但以前本地模型的门槛不低,得先装 llama.cpp、下 GGUF 模型文件、手动起 llama-server、配端口,再让 Claude Code 这类工具连上去,中间还隔着 Anthropic、OpenAI、Gemini 三套协议差异,折腾一下午很常见。
这篇要做的,就是用 TaoToken 的统一 Key 和 API 通道,把 Claude、Codex、Gemini 三个 Agent 的调用统一指向本机的 llama.cpp 服务。核心思路是:llama-server 提供 OpenAI 兼容接口,TaoToken 作为统一入口做协议适配和 Key 管理,Agent 侧只改一个 base_url 和 key,就能把引擎从云端换成本地。下面给你可直接复制的 config.toml、settings.json 骨架,CC Switch 的切换步骤,以及一次离线验证动作,确认本地模型真的生效、且没有外网流量。
2. TaoToken 前置准备:Key、通道与本地服务
在动手改配置之前,先把两件事准备好:TaoToken 侧的 Key,以及本机的 llama.cpp 服务。
TaoToken 在这里扮演的是统一 API 通道的角色。它把不同 Agent 的协议差异收敛到一套入口上,你只需要维护一个 Key,Claude、Codex、Gemini 的调用都走这个通道。官网入口是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 基址是 https://taotoken.net/api (这个不加 UTM)。
拿 Key 的路径很直接:进控制台,在 API Keys 页面创建一个新 Key,复制出来先存好。控制台地址是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,API Keys 页面是 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,遇到协议细节可以对照看。
本机这边,llama.cpp 的 llama-server 要能跑起来。假设你已经下好了 GGUF 模型,比如一个 7B 到 14B 的量化版本,启动命令大致是这样:
./llama-server \ -m ./models/qwen2.5-coder-7b-instruct-q4_k_m.gguf \ --host 127.0.0.1 \ --port 19090 \ -c 8192 \ -ngl 99参数说明:-m指定模型文件路径;--host 127.0.0.1只监听本机,避免暴露到局域网;--port 19090是服务端口,后面配置里要对应;-c 8192是上下文长度,按显存调整;-ngl 99表示尽量把层卸载到 GPU,纯 CPU 跑就删掉这行。
启动后访问 http://127.0.0.1:19090/ ,能看到 llama-server 自带的对话页,说明服务正常。注意这个页面只有最基础的大模型能力,没有工具调用和 skills,所以真正干活还是建议走 Agent。
提示:llama-server 默认提供 OpenAI 兼容的
/v1/chat/completions接口,这正是它能被统一通道接管的前提。
3. 可复制配置:config.toml 与 settings.json 骨架
这一节是重点,给你两份可直接改的配置骨架。不同 Agent 读的配置文件不一样,Codex 类走 config.toml,Claude 类走 settings.json,Gemini 类通常也是 JSON 结构。核心都是把 base_url 指向 TaoToken 通道,把 model 指向本地模型名。
先看 config.toml 骨架,适合 Codex 这类:
# Codex / 兼容 OpenAI 协议的 Agent 配置 model = "local-qwen-coder" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY" wire_api = "chat" [model_providers.taotoken.query_params] # 本地模型标识,按你 llama-server 加载的模型名填 model = "local-qwen-coder"再看 settings.json 骨架,适合 Claude 这类:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的TaoTokenKey", "ANTHROPIC_MODEL": "local-qwen-coder" }, "permissions": { "allow": [] } }Gemini 类的 JSON 结构类似,把 base_url 和 model 换成对应字段即可:
{ "apiBase": "https://taotoken.net/api", "apiKey": "sk-你的TaoTokenKey", "model": "local-qwen-coder" }关键点有三个。第一,base_url统一指向 TaoToken 通道,不要直接写http://127.0.0.1:19090,因为 Agent 的协议和 llama-server 的 OpenAI 协议之间需要一层适配,这层由通道完成。第二,model字段填本地模型的标识名,这个名字要和你在通道里登记的本地模型名一致。第三,Key 用环境变量或配置文件注入,别硬编码到会提交到 git 的文件里。
注意:本地模型名建议起一个固定别名,比如
local-qwen-coder,这样换底层 GGUF 文件时,Agent 侧配置不用动。
4. CC Switch 切换与一次离线请求验证
配置写好后,用 CC Switch 做切换。CC Switch 的作用是管理多套配置档案,你可以在「云端」和「本地」两套之间一键切换,不用每次手改文件。
操作步骤:打开 CC Switch,新建一个配置档案,命名比如「local-llama」,把上面那份 config.toml 或 settings.json 的内容贴进去,保存。然后在档案列表里选中它,点应用。切换完成后,Agent 下次启动就会读这套配置。
接下来做一次离线验证,确认本地模型真的生效、且没有外网流量。验证分两步。
第一步,确认 llama-server 在跑,并且能响应:
curl http://127.0.0.1:19090/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "local-qwen-coder", "messages": [{"role": "user", "content": "用一句话说明什么是递归"}], "stream": false }'如果返回里有正常的choices内容,说明本地推理服务没问题。
第二步,断网验证。把机器的外网断掉(拔网线或关 Wi-Fi),然后在 Agent 里发一条请求,比如让 Claude Code 解释一段代码。如果它能正常返回,说明调用确实走了本地链路,没有依赖外网。
想更严谨地确认没有外网流量,可以在请求前后看系统网络监控,或者临时把 TaoToken 通道的域名解析指向本地做对照测试。实测下来,断网后 Agent 仍能响应,就是最直接的证据。
提示:如果断网后 Agent 报连接错误,先检查是不是有某个环节还在直连云端,重点看 base_url 有没有被其他配置覆盖。
5. 本篇常见错排查
配置过程中容易踩几个坑,这里集中说一下。
报错一:401 Unauthorized。多半是 Key 没生效。检查ANTHROPIC_API_KEY或env_key指向的环境变量是否真的注入了,可以在终端echo $TAOTOKEN_API_KEY确认。如果 Key 是从控制台复制的,注意别带多余空格。
报错二:404 model not found。说明 model 字段填的名字,通道侧不认识。回到 TaoToken 控制台,确认本地模型别名登记的是不是local-qwen-coder,两边必须完全一致,大小写敏感。
报错三:连接被拒绝 connection refused。这是 llama-server 没起来,或者端口不对。先curl http://127.0.0.1:19090/看服务在不在,不在就重新启动,确认--port和配置里一致。
报错四:响应特别慢或直接超时。本地模型吃硬件,7B 模型在纯 CPU 上跑,首 token 可能要等十几秒。可以调小-c上下文,或者加-ngl用 GPU 加速。如果显存不够,换更小的量化版本,比如 Q4 甚至 Q3。
报错五:Agent 能连上但不会调用工具。这是本地模型的固有局限,llama-server 自带页面没有工具调用能力,Agent 侧的工具链依赖模型本身支持 function calling。选模型时优先挑标注支持工具调用的版本,否则复杂任务会退化。
注意:排查顺序建议从「服务在不在」到「Key 对不对」再到「模型名一致不一致」,由外到内,能省不少时间。
6. 按场景选对入口,把链路用顺
链路跑通之后,日常使用可以按场景分流。如果你主要是在排障、调接入参数,重点看 API Keys 和接入文档,Key 管理在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite ,协议细节对照 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 。
如果你只是想先验证某个本地模型的效果,不想动 Agent 配置,可以直接用模型对话页面试,地址是 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite ,发几条请求看看输出质量,再决定要不要接进 Agent。
如果你是长期用 Claude Code、Codex 这类做编码和 Agent 任务,建议走 Coding Plan,地址是 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite ,把本地模型和云端模型按任务复杂度分配,隐私敏感的走本地,复杂重构走云端,各取所长。
最后说个实际经验:本地模型的效果高度依赖硬件和模型尺寸。家用机器跑 7B 到 14B,日常改 bug、写函数、解释代码够用;遇到跨文件大重构、复杂架构设计,云端大模型还是更强。我现在的做法是两条线并行,本地那条负责不出门的活,云端那条负责硬骨头,切换就靠 CC Switch 一键完成,不用来回改配置。链路搭好一次,后面就是顺手的事。