NVIDIA发布Switchyard:支持OpenAI与Anthropic协议互转的LLM流量代理
NVIDIA开源Rust编写的LLM流量代理工具Switchyard,可在OpenAI、Anthropic及本地vLLM/NIM/Ollama等后端间路由并自动翻译API请求与响应。项目处于pre-alpha实验阶段,暂不适用于生产环境,提供CLI启动、独立服务器和嵌入式库三种使用方式,并内置多种可配置路由算法与可观测性指标。
为多模型代理架构解耦而生
团队在部署编码类AI智能体时普遍面临协议碎片化困境:Claude Code原生调用Anthropic Messages API,Codex CLI依赖OpenAI接口,而实际想服务的模型却运行在vLLM、NVIDIA NIM或Ollama之上。重写智能体代码成本过高,因此需一个外部翻译层——Switchyard正是NVIDIA对此问题的技术回应。它是一个用Rust开发的轻量级代理与库,核心能力包括跨厂商API路由与格式转换(OpenAI ↔ Anthropic)、操作指标采集,以及提供类型安全、可组合的路由算法。项目采用Apache 2.0许可证,文档托管于docs.nvidia.com/nemo/switchyard。
非生产就绪的实验性工具
Switchyard当前明确标注为pre-alpha与experimental状态。NVIDIA强调其不可用于生产环境,并预警API设计与路由算法将在v1.0前发生显著变更。用户可通过crates.io安装二进制版,或从PyPI获取Python启动器;支持完全自托管,但所有部署仅限评估用途。
透明协议转换机制
Switchyard不改变客户端调用习惯:客户端继续使用原生API(如OpenAI Chat Completions或Anthropic Messages)。代理接收请求后,先解码为统一的provider-neutral Rust数据结构,再执行路由算法选定后端,将请求重新序列化为目标平台的线格式(wire format),发起调用,并将响应(含流式事件)逆向转换回客户端期望结构。服务器原生支持三种输入格式,且任一格式均可指向任意已配置路由;每个上游LLM客户端可自主选择适配的输入格式——这种解耦设计使智能体API与底层模型API彻底分离。
三种集成路径
- Launcher路径(面向编码智能体):通过`uv tool install "nemo-switchyard[cli]"`安装命令行工具,执行`switchyard launch claude`等指令,快速对接预打包部署或自定义TOML配置;
- Server路径(独立代理服务):用`cargo install --locked switchyard-server`安装,通过`--dry-run`校验配置,随后在指定host:port启动HTTP服务;
- Library路径(嵌入式集成):引入`switchyard-libsy`库,在Rust应用中直接调用路由逻辑,不绑定HTTP栈——算法仅决策目标模型,实际模型调用由调用方完成。
可编程路由算法
每条路由由一个客户端可见模型ID及其背后算法构成。当前支持:
- `passthrough`:全部请求直发单一目标;
- `random`:按权重分配流量,支持种子复现分流序列,适用于A/B测试与成本实验;
- `llm_classifier`:先调用分类器模型判断能力需求,再分发至“弱”或“强”目标,支持置信度阈值、能力提升下限与会话亲和性等调节参数,未决请求默认降级至强目标;启用`mode = "escalation"`时,每轮先在弱层执行,再由分类器决定是否升至强层重跑;
- `stage_router`:基于近期交互中的tool-result与agent-progress信号动态评分,选择“高效”或“高能力”目标,多数场景避免额外分类器调用。
> 注:“强/弱/高效/高能力”是路由上下文中的角色定义,同一上游模型可在不同路由中承担不同角色。
全链路可观测性
服务器通过`GET /metrics`暴露Prometheus格式指标,覆盖请求量、错误率、模型调用延迟、完整对话延迟、各类token计数(prompt/completion/cached/cache-creation/reasoning)及上游HTTP调用结果分布。`tier`标签区分强/弱决策路径,分类器调用本身不计入上述指标族。关键指标`switchyard_routing_overhead_ms`记录路由算法执行耗时(扣除实际模型调用时间),其中LLM分类器路由会包含其自身推理耗时,而passthrough/random仅报告亚毫秒级决策开销(桶宽起始0.1ms)。另支持`--routing-log-file`输出每响应一条JSON日志,以及`GET /v1/routing/session-stats`按会话聚合调用与token统计。