Claude Code 好用,但它有个隐含前提:你得用 Anthropic 的模型。想换成 DeepSeek 省钱、想切到本地 Ollama 跑私有模型、或者想在主服务挂掉时自动切到备用——这些都得自己想办法。
8 月 27 日出现在 GitHub 上的开源项目 my-free-code,就是来解决这件事的。它是一个多提供商 AI 网关,架在 Claude Code(以及其他编程智能体)和模型厂商之间,让流量往哪走由你说了算。目前版本 v0.8,已累计 620 颗星、211 个 fork。
先说清楚一件事:这是独立实现,与 Anthropic 没有任何关联。
它到底是个什么东西
架构上分三层,理解了这个就懂了全部:
最上层是线协议层——网关同时对外提供两套兼容接口,一套是 Anthropic Messages(/v1/messages),一套是 OpenAI Responses 兼容接口(/v1/responses)。这样不管客户端说的是哪种「方言」,它都能接。
中间是模型路由层——决定一个请求最终落到哪个厂商的哪个模型上,以及失败后往哪退。
最下层是提供商运行时——对接 42 家外部厂商和三种本地运行时的具体适配。
这个分层是有意为之:线协议、路由、提供商、CLI 适配器各自独立,互不干扰。
42 家厂商 + 3 种本地运行时
提供商目录是它最实在的资产,逐项点算共有 42 家外部厂商:
NVIDIA NIM、OpenRouter、Groq、OpenAI、xAI、QwenCloud、Together、DeepInfra、SiliconFlow、Nebius、Chutes、Featherless、ZenMux、W&B Inference、Azure OpenAI、Google AI Studio、Google Vertex、DeepSeek、Mistral、Codestral、OpenCode Zen、OpenCode Go、Vercel AI Gateway、Amazon Bedrock、Hugging Face、Cohere、GitHub Models、Wafer、Kimi、Kimi Code、MiniMax、Cerebras、SambaNova、Kilo、Fireworks、Novita、Cloudflare Workers AI、Z.ai、TokenRouter、NaraRoute、Poolside、LLM7。
另外还有三种本地运行时:Ollama、LM Studio、llama.cpp。
⚠️ 但这里必须说句实话。作者在 README 里明确写了:认证或协议比较特殊的提供商需要专门的 adapter,只有常见的 OpenAI 兼容提供商才能走共享 transport。所以「42 家」是目录规模,不等于「42 家都开箱即用、无门槛」。用之前最好先确认你要接的那家属于哪一类。
不只是 Claude Code:9 个客户端都支持
启动器(launcher)这一层,my-free-code 支持 9 个编程客户端:Claude Code、Codex、Pi、OpenCode、Cline、Hermes、DeepSeek Harness、Grok Build、Muse Code。
启动器的逻辑很克制:它只是把本地代理环境准备好,然后把参数原样交给已安装的客户端。前提是那个客户端本身已经装好并且在 PATH 里。
装起来:五步
需要 Python 3.10 以上。流程如下:
python -m venv .venv
激活虚拟环境。Windows 用 .venv\Scripts\Activate.ps1,macOS/Linux 用 source .venv/bin/activate。
python -m pip install -r requirements.txt
copy .env.example .env(Windows)或 cp .env.example .env(macOS/Linux)
python -m my_free_code
启动后默认地址是 http://127.0.0.1:8082。
配置:核心是「把 Claude 的模型名映射成你想要的模型」
这是整个工具最巧妙的地方。你在 .env 里这样写:
MODEL=open_router/openrouter/free
MODEL_SONNET=deepseek/deepseek-chat
MODEL_HAIKU=groq/llama-3.3-70b-versatile
MODEL_OPUS=nvidia_nim/meta/llama-3.3-70b-instruct
FALLBACK_MODELS=deepseek/deepseek-chat,ollama/llama3.1
然后在同一个 .env 里填上对应的 API Key。
效果是什么?Claude Code 以为自己在调 Sonnet,实际上请求已经跑到了 DeepSeek 上。而且对外的公开模型身份保持不变——即使请求被路由到了别的提供商,客户端看到的依然是网关的这个模型名。
想接本地模型也很直接,配个地址就行:
Ollama:OLLAMA_BASE_URL=http://127.0.0.1:11434/v1 + MODEL=ollama/llama3.1
LM Studio:LM_STUDIO_BASE_URL=http://127.0.0.1:1234/v1 + MODEL=lmstudio/qwen3.5-coder
llama.cpp:LLAMACPP_BASE_URL=http://127.0.0.1:8080/v1 + MODEL=llamacpp/my-model
接进 Claude Code
两种办法。手动设置环境变量:
$env:ANTHROPIC_BASE_URL="http://127.0.0.1:8082"
$env:ANTHROPIC_AUTH_TOKEN="local"
$env:CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY="1"
claude
或者用它的启动器一步到位:
python -m my_free_code.cli.mfc claude
其他客户端同理,把最后的 claude 换成 codex、pi、opencode、cline、hermes、deepseek-harness、grok 或 muse 即可。
失败回退:有个细节做得对
假设你这样配置:
MODEL_SONNET=deepseek/deepseek-chat
FALLBACK_MODELS=groq/llama-3.3-70b-versatile,ollama/llama3.1
那么一个 Sonnet 请求的路径是:Claude Code 发出 → 落到 deepseek/deepseek-chat → 如果在产生输出之前失败 → 退到 groq 的模型 → 再失败 → 退到本地 ollama/llama3.1。
关键在这个细节:一旦流式响应已经开始输出内容,网关就不会再静默切换提供商。这一点非常重要——如果切了,同一轮对话会被生成两遍,你会看到重复内容。这个设计避免了这个坑。
此外还有 provider 健康退避机制,以及针对每个 provider 的并发控制和速率窗口控制。
其他能力
推理模式归一化:接受 Claude 风格的思考意图,并把它跟各厂商特定的请求字段解耦。支持三档归一化模式 auto / on / off,以及可选的 effort 强度 low / medium / high,由适配器映射到上游对应字段。
协议与能力:除了前面说的两套线协议,还支持 token counting(/v1/messages/count_tokens)、模型发现(/v1/models)、健康检查(/health)。Agent 侧支持流式 SSE、工具定义与调用、工具结果回传、图片输入、推理/思考元数据透传,以及 no-thinking 的网关 ID。
管理界面:本地打开 http://127.0.0.1:8082/admin,另有三个需要认证的 JSON 端点:/api/admin/status、/api/admin/models、/api/admin/providers。
⚠️ 安全提醒:这东西只该跑在本地
作者给出的安全约束必须照做:
保持 HOST=127.0.0.1,不要改;设置一个足够复杂的 PROXY_AUTH_TOKEN,别用默认值;不要把代理暴露到公网。
原因不难理解——这个网关持有你所有厂商的 API Key,一旦暴露,等于把所有账号的钥匙交了出去。
对普通人意味着什么
它不是给所有人准备的。如果你只是想用 Claude Code 干活,直接订阅就行,不需要这一层。
但如果你是下面这几类人,它就很有价值:想控制成本的人(把日常任务路由到便宜模型,只在硬骨头上用贵的);想摆脱单一厂商锁定的人(今天用 DeepSeek,明天换 Kimi,配置改一行);需要私有化的人(敏感代码只走本地 Ollama);需要高可用的人(主服务挂了自动退到备用)。
需要清醒认识的是:它是个 v0.8 的年轻项目,社区验证还不充分,而且「42 家」里有多少能真正开箱即用,得看具体的 adapter 情况。建议先在非关键项目上跑通,再考虑放进日常工作流。
关注「AI 智习室」,每天一条看得懂的 AI 情报。