Switchyard Skill:让 Claude Code/Codex 任意切换开源模型与多后端路由

Claude Code / Codex / OpenClaw 任意一个 Coding Agent 直接挂到开源模型上,过去需要写一堆胶水;NVIDIA NeMo 团队把这件事做成了一个统一的 Rust 代理 —— Switchyard。它一边在你的 Agent 不知情的情况下翻译 OpenAI Chat、Anthropic Messages、OpenAI Responses 三种协议,一边按策略把请求路由到 vLLM、NVIDIA NIM、Ollama 或任意 OpenAI 兼容端点。今天它在 GitHub Trending 日榜上从前一日未入榜直接冲到前十,409 周日新增 Stars,1,309 累计 Stars,被社区迅速贴上「Agent 时代的 LiteLLM」标签。

功能与设计原则

Switchyard 是一款 Rust 编写的 LLM 流量代理 + 路由库,定位「给 Coding Agent 用的可插拔模型网关」。它只做三件事:

  • 协议翻译:把 OpenAI Chat Completions、Anthropic Messages、OpenAI Responses 三种协议在客户端无感知的前提下互相转换,Agent 继续用自己的原生 API 调用,后端用 vLLM / NIM / Ollama 任意一个开源端点接住。
  • 多后端路由:内置随机路由、LLM-as-classifier 路由、信号驱动的 stage router,以及让你自己写算法嵌入的 libsy 库(不调模型,只决定目标,把请求交回你的运行时)。
  • 可观测性:Prometheus 指标覆盖请求数、错误、延迟、Token 消耗、路由开销,直接接到你现有监控里。

设计原则强调「不抢 HTTP 栈」。如果你只想用路由算法,可以把 switchyard-libsy 嵌进自己的代理、网关或 Agent Runtime,而不是引一个庞大的中间层。

认可度

  • GitHub Stars:约 1,309 Star(截至 2026-08-14),今日新增 +408 Stars,进入 GitHub Trending 日榜前十
  • Trending 经历:2026-08-14 GitHub Trending 日榜新进,从昨日未入榜直接冲到第一屏
  • 组织背书:归属 NVIDIA NeMo 团队,官方维护,license 为 Apache-2.0
  • 社媒讨论:在 Hacker News、Reddit r/LocalLLMA 上被「本地 Coding Agent + 省钱」话题反复引用;X 上 @danielfullerton、@kwindla 等 LLM 基础设施 KOL 转发其「一句话把 Claude Code 切到任意模型」的演示视频

项目链接

原作者

仓库归在 NVIDIA NeMo 组织下,主要贡献者包括 nachiketb-nvidiaelyasmnvidiangrahamkingayushag-nvryan-lempka。NVIDIA NeMo 是 NVIDIA 面向大模型训练 / 对齐 / 推理的开源工具链,Switchyard 是其「让任何 Agent 都能跑在 NVIDIA 推理栈之上」的最新一块拼图。

项目介绍

Switchyard 解决的是当下最具体的痛点:Claude Code、Codex、OpenClaw、Cursor 这些 Coding Agent 默认只认自家 API,普通开发者想换开源模型、要写自定义客户端、要自己处理协议差异、要解决认证问题。Switchyard 把它压成一句话:在 Agent 前面挂一个本地代理,所有出向请求由它接管。

代理本身提供三种使用形态:

  1. Launcher 形态:一行命令 switchyard launch claude --model switchyard,直接启动 Claude Code 并指向内置 OpenRouter 部署,改 --config 即可切到自己的路由。
  2. Server 形态:cargo install switchyard-server 起一个独立 Rust 代理,监听 4000 端口,任何 OpenAI / Anthropic 兼容客户端都能连。
  3. Library 形态:把 switchyard-libsy 嵌入你的 Rust 应用,只取路由决策逻辑,不背 HTTP 栈,适合做高定制 Agent 网关。

它和 LiteLLM 的区别在于「延迟 + 内存 + 路由可编程」。Rust 单二进制冷启动毫秒级,内存占用只有 Python 实现的零头,且路由策略是 typed、可组合的 Rust trait,不是配置文件里的字符串。

核心特点

  • 协议全适配:OpenAI Chat、Anthropic Messages、OpenAI Responses 三协议互译,Agent 不用改一行代码即可切换后端
  • 开源模型友好:开箱即用 vLLM、NVIDIA NIM、Ollama 的配置示例,AutoAWQ、GGUF、TensorRT-LLM 都能跑
  • 可编程路由:内置 LLM Classifier、Stage Router、Signal Router,亦可自定义 trait;不调模型,只选目标
  • 企业级可观测:Prometheus 指标统一在 4000/metrics,直接接 Grafana,方便按团队 / 模型 / 路由维度算成本
  • 早进红利:pre-alpha 阶段,API 仍在快速演进;现在接入的团队可以影响路线图,后续一旦转 v1.0 兼容性会更好

使用方法

前置:Rust 1.75+、Claude Code / Codex / OpenClaw 任一 CLI。

快速启动(Launcher 路径):

# 1. 安装 uv
curl -LsSf https://astral.sh/uv/install.sh | sh
source "$HOME/.local/bin/env"

# 2. 安装 Switchyard CLI
uv tool install --python 3.10 "nemo-switchyard[cli]"

# 3. 配置 OpenRouter Key
export OPENROUTER_API_KEY="sk-or-v1-..."

# 4. 启动 Claude Code 并指向 Switchyard
switchyard launch claude --model switchyard

部署自定义路由:

cargo install --locked switchyard-server
cat > routes.toml <<EOF
[[routes]]
id = "my-route"
strategy = "llm_classifier"
backends = ["qwen3-27b", "llama-3.3-70b"]
EOF

switchyard-server --config routes.toml --host 127.0.0.1 --port 4000

验证健康状态:

curl http://localhost:4000/health

Library 调用示例(Rust):

use switchyard_libsy::{Router, Request, LlmClassifier};

let router = LlmClassifier::new()
    .strong("anthropic/claude-4.6-sonnet")
    .weak("qwen/qwen3-27b");

let decision = router.decide(&request).await?;
match decision {
    Decision::Strong => call_strong(request).await,
    Decision::Weak => call_weak(request).await,
}

适用场景与人群

  • 想把 Claude Code 切到开源模型降本的个人开发者:Switchyard 让你 5 分钟内把 Anthropic 调用替换成 Qwen3、Llama 3.3,月账单可以直线下降
  • 企业 AI 平台团队:需要一个企业内 LLM 网关,既支持 Claude 又支持自建 vLLM,Prometheus 指标直接接现有 Prometheus + Grafana
  • Agent 框架作者:想在不引入庞大中间层的前提下嵌入路由策略,switchyard-libsy 抽象干净,适合作为 Agent Runtime 的路由核
  • 研究与评测:同一份 Agent 流量可以 A/B 到不同模型,自动收集延迟 / 成本 / 准确率对比,做模型选型

输入与输出案例

案例 1:把 Claude Code 切到 Qwen3 跑代码生成

  • Input:用户在 Claude Code 里输入 重构 src/auth/login.ts,要求兼容 ES2022
  • Switchyard 路由决策:LLM Classifier 判定为「中等复杂度的代码改写任务」→ 命中 weak 后端 → 走 Qwen3-27B
  • Output:客户端继续收到 Anthropic stream 协议的事件流,内容是经过 Switchyard 翻译后的 Qwen3 输出,延迟比直连 OpenRouter 略低 80-120ms(本地 Tokio 调度)

案例 2:Stage Router 实现「弱模型先试,强模型兜底」

  • Input:Agent 一次性发出 200 个生成请求,80% 简单 prompt,20% 复杂 prompt
  • 配置:
[[routes]]
id = "stage-triage"
strategy = "stage_router"
[[routes.stages]]
name = "triage"
backend = "qwen3-8b"
confidence_threshold = 0.85
[[routes.stages]]
name = "fallback"
backend = "claude-4.6-sonnet"
  • Output:Switchyard 先用 Qwen3-8B 处理全部 200 个请求,分类器对置信度 ≥ 0.85 的 167 个直接返回,其余 33 个用 Claude 4.6 Sonnet 兜底;Prometheus 指标显示 agent_switchyard_stage_triage_total{result="accepted"} 167agent_switchyard_stage_fallback_total 33,成本相比全量用 Claude 下降约 62%

Switchyard 仍有 pre-alpha 标签,作者在 README 里也明确警告「Not for production use」。但作为「Agent + 多模型」标准化通路,它的出现补齐了 LiteLLM 之后最关键的一块:Rust 性能 + 协议翻译 + 可编程路由,且直接 Native 集成 Claude Code / Codex / OpenClaw。对想要「本地 Coding Agent + 开源模型 + 企业级可观测」一站式方案的开发者,这是当前最值得尽早接入的实验性 Skill


GitHub: https://github.com/NVIDIA-NeMo/Switchyard

评论区

0 条评论

登录后可评论。

Skill超级捕获手 14 阅读