📌 项目地址:NVIDIA-NeMo/Switchyard | ⭐ 718 颗星 | 🔧 Rust | 📜 未标注
Claude Code只认Anthropic Messages API,Codex只认OpenAI Responses API,而vLLM、Ollama、NVIDIA NIM这些推理服务只提供OpenAI Chat格式。三方协议各说各话,模型就没法互相替换。
Switchyard做的事很简单:站在中间,把三种协议格式互相翻译。编码代理继续说它的原生API,Switchyard把请求转成后端能理解的形式。Claude Code可以接vLLM跑的Qwen,Codex可以接Ollama上的本地模型,代理本身不用改一行配置。
这不是简单的字段映射。Anthropic和OpenAI两家的请求结构、系统提示格式、工具调用方式、流式事件类型都不一样。Switchyard用Rust实现了这套转换层,NVIDIA NeMo团队在维护,仓库718个star,当前状态是pre-alpha。
它解决的问题
先说清楚痛点在哪。
如果你跑过Claude Code,知道它写死在Anthropic Messages API上。Codex写死在OpenAI Responses API上。而开源推理服务几乎都只实现OpenAI Chat Completions——vLLM、NIM、Ollama都是。三者之间的差异不是一个base_url能解决的。
现在想把Claude Code接到Ollama上的本地模型,你面对几个选项:等Claude Code官方支持OpenAI兼容端点(遥遥无期),自己写个中间层做协议转换(费时费力),或者用Switchyard。
路由部分同样重要。Switchyard不是固定转发到某个后端,它提供几种策略:
- 随机路由:流量随机分配,做A/B基准测试,对比不同模型在同一批请求上的表现
- LLM-as-classifier路由:先让一个LLM判断请求应该走哪个后端
- 信号驱动的阶段路由:根据请求携带的信号选择后端
- 自定义算法:用Rust自己实现
这些算法是组合式组件,可以叠加使用,不是写死的逻辑。
三条使用路径
Launcher路径:给编码代理套启动器
最适合”我想让Claude Code用上别的模型”的场景。
先装uv,然后安装CLI工具:
curl -LsSf https://astral.sh/uv/install.sh | sh
source "$HOME/.local/bin/env"
uv tool install --python 3.10 "nemo-switchyard[cli]"
注意这条命令只装启动器,不装独立的switchyard-server。你的机器上需要先装好Claude Code、Codex CLI或OpenClaw,并且它在PATH里。
设置OpenRouter密钥后启动:
export OPENROUTER_API_KEY="your-openrouter-key" # pragma: allowlist secret
switchyard launch claude --model switchyard
switchyard launch codex --model switchyard
switchyard launch openclaw --model switchyard
默认走打包好的部署配置。想用自己的路由规则,指定路由ID和配置文件:
switchyard launch claude --model my-route --config routes.toml
Server路径:独立代理进程
适合不想碰Rust代码、直接部署的场景。
装Rust工具链后通过Cargo安装:
cargo install --locked switchyard-server
switchyard-server --help
按Getting Started指南创建routes.toml,密钥通过OPENROUTER_API_KEY注入。这是个独立进程,可以单独部署,多个客户端共用。
Library路径:嵌进Rust应用
协议转换和路由算法都发布为Rust库。你可以在自己的应用里调用这些组件,实现定制路由逻辑。README没有给代码示例,只说明了存在这个选项。对Rust开发者来说这条路值得关注——LLM流量路由层不用从零写,协议转换部分已经做好了。
运营指标
转发过程产生Prometheus指标,覆盖请求数、错误、延迟、token用量和路由开销。做A/B对比或线上观测时,这些数据直接可用。不用自己埋点,不用额外写采集代码,启了Prometheus就能看到。
成熟度与风险
README写得很直接:
Experimental software. Not for production use.
API和算法在v1.0之前会显著变化。你要用它,就得接受接口随时可能改。这是用于实验和验证的工具,不适合直接挂生产——至少现在不是。
项目方向本身值得关注。NVIDIA做这个项目不是偶然,NeMo生态需要一个能把自家模型接入主流编码代理的通道。Switchyard就是这个通道。随着开源模型能力逼近闭源模型,”编码代理用本地模型”这个需求会越来越现实,Switchyard卡的位置正好。
我觉得它最大的价值在于:把三家协议的翻译层做成一个标准化的开源组件。以后再有新的编码代理出现,不用重新发明一遍协议转换。