Switchyard
面向 LLM 流量的 Rust 代理层,负责在 OpenAI 与 Anthropic API 之间做协议翻译和路由分发。NVIDIA 出品,主打让 Claude Code/Codex 等 coding agent 直接对接 vLLM、NIM、Ollama 等开源模型,内置 LLM 分类器、阶段路由等多种路由策略,并输出 Prometheus 指标。目前为 pre-alpha,实验性质,不适合生产环境。
README
Switchyard
Switchyard 是一个用 Rust 编写的 LLM(大语言模型)流量代理和库。它负责在多个提供商之间路由请求,在 OpenAI 与 Anthropic API 之间进行协议转换,记录运维指标,并提供类型安全、可组合的路由算法。
为什么选择 Switchyard? 将 Claude Code 或 Codex 等编码代理指向一个开源模型。Switchyard 在 OpenAI Chat、Anthropic Messages 和 OpenAI Responses 格式之间进行转换,因此代理可以继续使用其原生 API,而请求由 vLLM、NVIDIA NIM、Ollama 或任何兼容 OpenAI 的端点提供服务。同一个代理还可以将流量分散到多个模型进行 A/B 基准测试,应用基于信号的分阶段路由(signal-driven stage routing),或运行您自己编写的自定义算法。
特性
- 协议转换:在 OpenAI Chat、Anthropic Messages 和 OpenAI Responses 格式之间互转
- 多后端路由:随机路由、LLM 分类路由、信号驱动阶段路由,或您自己的自定义算法
- 运维指标:Prometheus 指标覆盖请求、错误、延迟、token 消耗和路由开销
成熟度
Switchyard 是预 alpha 阶段软件,正在快速演进。在达到 v1.0 之前,API 和算法预计会有重大变化。
[!WARNING] 实验性软件,请勿用于生产环境。
快速开始
选择启动器路径(Launcher Path)可通过 Switchyard 运行 Claude Code、Codex CLI 或 OpenClaw;选择服务器路径(Server Path)可将 Switchyard 作为独立代理运行;选择库路径(Library Path)可在您自己的 Rust 应用中嵌入路由功能。
启动器路径
如果尚未安装 uv,请先安装,然后安装已发布的 Switchyard 工具:
curl -LsSf https://astral.sh/uv/install.sh | sh
source "$HOME/.local/bin/env"
uv tool install --python 3.10 "nemo-switchyard[cli]"
您要启动的编码代理也必须已安装并在 PATH 中。此方式不会安装独立的 switchyard-server 二进制文件;如需该二进制,请使用服务器路径。
设置 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
要使用您自己的原生 TOML 部署,请传入其路由 ID 和配置:
switchyard launch claude --model my-route --config routes.toml
服务器路径
使用此路径安装并运行独立的 Rust 代理。先安装 带 Cargo 的 Rust,然后安装已发布的二进制文件:
cargo install --locked switchyard-server
switchyard-server --help
Cargo 默认会构建 release 二进制文件并将其安装到 ~/.cargo/bin。
使用 快速入门指南 创建 routes.toml,然后校验配置并启动服务器:
export OPENROUTER_API_KEY="your-openrouter-key" # pragma: allowlist secret
switchyard-server --config routes.toml --dry-run
switchyard-server --config routes.toml --host 127.0.0.1 --port 4000
在另一个终端中验证代理:
curl http://localhost:4000/health
完整的配置和测试请求示例,请参阅 快速入门。
库路径(Library Path)
switchyard-libsy 将路由算法嵌入到您自己的 Rust 应用中。它本身从不调用模型:算法决定使用哪个目标,并将每次模型调用交还给您的代码处理,因此它可以无缝嵌入现有的代理、网关或 agent 运行时,而无需自己拥有 HTTP 栈。当您希望由库代为发起模型调用时,可搭配 switchyard-llm-client 使用。
[dependencies]
switchyard-libsy = { git = "https://github.com/NVIDIA-NeMo/Switchyard.git" }
switchyard-protocol = { git = "https://github.com/NVIDIA-NeMo/Switchyard.git" }
安装步骤和算法列表请参阅 快速入门,或查看 switchyard-libsy crate 文档。
路由策略
| 策略 | 适用场景 | 路由 type |
|---|---|---|
| LLM 分类器 | 需要根据请求内容决定该轮对话使用弱档还是强档模型。 | llm_classifier |
| 阶段路由 | 对话中已有的信号(如工具结果和错误)应指导大部分轮次的路由,而无需额外调用模型。 | stage_router |
| 升级路由 | 每一轮先由弱档模型处理,再由一个评判模型(judge)读取该回答,决定是否将同一请求发送给强档模型。 | llm_classifier 且 mode = "escalation" |
| 随机路由 | 需要固定的流量切分用于 A/B 测试、基线对比或成本实验。 | random |
passthrough 路由将一个目标注册到一个模型 ID 下,不进行任何路由决策。有关通用路由结构和自托管目标的详细信息,请参阅 路由概览。
架构
flowchart LR
clients["Clients"]
switchyard["Switchyard<br/>routing · translation · fallback"]
backends["Model backends"]
clients -->|"OpenAI / Anthropic API"| switchyard
switchyard -->|"provider-native format"| backends
客户端保持其原生的 OpenAI 或 Anthropic API 格式。Switchyard 选择一个已配置的后端,以该后端自己的格式转发请求,并将响应转换回客户端期望的格式。服务器接受 OpenAI Chat Completions、OpenAI Responses 和 Anthropic Messages。每个已配置的 LLM 客户端会选择一种上游格式。
文档
- 快速入门:完整的启动器和独立服务器实操指南
- 核心概念:LLM 客户端、目标、路由、模型 ID 和路由算法
- 路由概览:选择和配置路由算法
switchyard-server:服务器配置、路由算法和指标switchyard-libsy:在 Rust 应用中嵌入路由算法switchyard-protocol:面向提供商无关的请求、响应和流式类型switchyard-translation:请求、响应和流式数据转换
社区
- 问题反馈:GitHub Issues
- 行为准则:Code of Conduct
许可证
Apache 2.0 License。版权所有 © NVIDIA Corporation。