开源项目

Switchyard

Switchyard

面向 LLM 流量的 Rust 代理层,负责在 OpenAI 与 Anthropic API 之间做协议翻译和路由分发。NVIDIA 出品,主打让 Claude Code/Codex 等 coding agent 直接对接 vLLM、NIM、Ollama 等开源模型,内置 LLM 分类器、阶段路由等多种路由策略,并输出 Prometheus 指标。目前为 pre-alpha,实验性质,不适合生产环境。

README

Switchyard

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 客户端会选择一种上游格式。

文档

社区

许可证

Apache 2.0 License。版权所有 © NVIDIA Corporation。

开源项目NVIDIA-NeMo2026-08-13原文

相关内容