📌 项目地址:NVIDIA-NeMo/Switchyard | ⭐ 718 颗星 | 🔧 Rust | 📜 未标注
这个项目解决什么问题
今天用 Claude Code 这类编码代理时,模型被锁死在 Anthropic API 上。如果你想换用 vLLM、Ollama 或 NVIDIA NIM 跑的开源模型,代理完全不认。Switchyard 就是一个站在中间做协议翻译的 Rust 代理:它把 OpenAI Chat、Anthropic Messages、OpenAI Responses 三种 API 格式互转,让编码代理继续用母语说话,后端实际由任意 OpenAI 兼容端点服务。
它同时也是一个可编程路由库,支持随机路由、LLM 分类路由、信号驱动阶段路由,或者你自己用 Rust 写的算法。流量转发过程中还会输出 Prometheus 指标,包括请求量、错误率、延迟、token 用量和路由开销。
三条使用路径
Switchyard 提供三种运行方式,对应不同需求。
Launcher Path:给编码代理套壳
这是最省事的路径。先安装 uv 工具管理器,然后安装 Switchyard 的命令行工具:
curl -LsSf https://astral.sh/uv/install.sh | sh
source "$HOME/.local/bin/env"
uv tool install --python 3.12 "nemo-switchyard[cli]"
注意这个命令不会安装独立的 switchyard-server 二进制,它只安装启动器。你还需要把要用的编码代理(Claude Code、Codex CLI 或 OpenClaw)装到 PATH 里。
设置 OpenRouter 密钥后,直接启动编码代理,模型名填 switchyard:
export OPENROUTER_API_KEY="your-openrouter-key"
switchyard launch claude --model switchyard
switchyard launch codex --model switchyard
switchyard launch openclaw --model switchyard
默认会使用打包好的部署配置。如果你想用自己写的 TOML 路由配置,改成:
switchyard launch claude --model my-route --config routes.toml
Server Path:跑独立代理服务
如果你想要一个独立的 Rust 代理进程,用 Cargo 安装:
cargo install --locked switchyard-server
switchyard-server --help
然后按照官方 Getting Started 指南 创建 routes.toml,验证配置后启动服务。密钥同样通过环境变量 OPENROUTER_API_KEY 注入。
Library Path:嵌入自己的 Rust 应用
Switchyard 的协议转换和路由算法以 Rust 库形式发布,你可以在自己的应用里直接调用,实现定制逻辑。
路由算法:不只是简单转发
多后端路由不是随机挑一个就完事。README 里提到了几种内置算法:
- 随机路由:适合 A/B 对比测试。
- LLM-as-classifier 路由:先用一个 LLM 判断请求该走哪个模型。
- 信号驱动阶段路由:根据当前请求的阶段信号(比如编码代理的某个任务阶段)选择不同后端。
- 自定义算法:用 Rust 实现自己的路由策略。
这些算法都做成了可组合的组件,而不是写死的逻辑。
成熟度与风险
项目明确标注为 pre-alpha,README 里直接给了一句话:
Experimental software. Not for production use.
API 和算法在 v1.0 之前会大幅变动。如果你要用,只能把它当实验性质的东西,不能依赖长期稳定性。官方没有给许可证信息,想商用或二次分发需要谨慎,最好先向维护者确认。
谁需要认真看这个项目
如果你手上有 Claude Code 或 Codex CLI 的工作流,想换成自部署的开源模型来降低成本、避免厂商锁定,Switchyard 是目前少数能直接做 Anthropic 和 OpenAI 格式互转的代理。如果你的场景只是单纯转发 OpenAI 请求,那用普通负载均衡就够,不需要引入这个复杂度。
但如果你对 Rust 熟悉,并且想构建一套自己的 LLM 流量路由层,Switchyard 的库路径给你提供了一个已经实现协议翻译的框架,不需要从零造轮子。