NVIDIA-NeMo/Switchyard

Switchyard lets LLM applications route traffic across models and providers while preserving native OpenAI and Anthropic API compatibility - enabling flexible model selection, benchmarking, and cost/performance optimization.

Switchyard – 成本感知的 LLM 呼叫路由

是什麼 – Switchyard 是一個輕量級的路由層,位於一個或多個大型語言模型(LLM)提供者之前。針對每個請求,它根據可設定的演算法,決定是將呼叫發送到便宜的「高效」模型,還是發送到更強大(通常也更昂貴)的模型,目標是在維持任務準確性的同時,降低整體成本。

為何重要 – 在許多面向代理的工作負載中,單一強大的模型對大多數回合來說是過度的。透過僅自動「升級」困難的情況,Switchyard 可在成功率僅小幅下降(或甚至略有提升)的情況下,將令牌成本降低 13–30%,如 Terminal-Bench 2.1 基準測試所示。


核心元件(預 1.0 版)

元件 穩定性 作用
switchyard-libsy Beta 純 Rust 庫,公開路由演算法。可嵌入您自己的網關或框架中;您可自行控制 HTTP 呼叫、重試和憑證。
switchyard-llm-client Alpha 助手,用於在庫的中立請求/回應類型與真實 HTTP LLM API 之間轉換。
switchyard-runner Alpha 橋接程式碼,可在其他執行環境(如 NeMo Relay)中執行路由設定。
switchyard-server 示範 獨立代理,模擬 OpenAI/Anthropic 端點;適用於快速示範或評估。

如何使用

  1. NeMo Relay 插件 – 將 routes.toml 檔案載入現有的 NeMo Relay 部署中。插件處理對所選提供者的 HTTP 分派,而 Relay 保持其慣用的傳輸與重試邏輯。
  2. 嵌入庫 – 安裝 Python 套件(pip install nemo-switchyard)或在專案中加入 Rust crate。建構一個路由 演算法(例如 stage_router(picker="efficient_first", confidence_threshold=0.5)),並使用 run_stream 迴圈驅動,向模型特定的 HTTP 客戶端提供輸入。
  3. 獨立代理 – 安裝 Rust 二進位檔(cargo install switchyard-server),撰寫簡單的 routes.toml 將目標 ID 映射到 OpenRouter(或任何 OpenAI 相容)端點,然後啟動伺服器。任何 OpenAI/Anthropic 客戶端現在都可以指向 http://localhost:4000,並自動受益於路由功能。

路由演算法(在 TOML 設定中選擇一個)

  • 能力(llm_classifier – 第一個請求由小型 LLM 判斷;若認為任務困難,則呼叫被升級。
  • 階段(stage_router – 在決定是否切換模型之前,對工具產生的回應使用模式比對或裁判 LLM 進行評估。
  • 升級 – 從便宜模型開始,然後對結果執行裁判 LLM;若檢測到問題,則請求將重新發送至強大模型。
  • 隨機 / 建議 / 子代理感知 / 自訂 – 其他各種用於實驗的策略。

快速上手(Python 範例)

from switchyard.libsy import LlmResponse, Step
from switchyard.libsy.algorithms import stage_router

algorithm = stage_router(picker="efficient_first", confidence_threshold=0.5)

async def route(request, clients):
    async for step in algorithm.run_stream(request, {
        "efficient": ["fast"],
        "capable":   ["quality"],
    }):
        if isinstance(step, Step.CallModel):
            # 為每個候選模型呼叫您自己的 HTTP 客戶端
            resp = await clients[step.models[0]].call(step.request)
            step.respond(LlmResponse.Agg(resp))
        elif isinstance(step, Step.Done):
            return step.outcome.response

Rust 中也存在相同邏輯;switchyard-libsy crate 提供了 Algorithm::run_stream 迭代器。


成熟度與授權

  • 此專案為 預 1.0 版;API 和設定格式可能變更,因此整合時請固定版本。
  • 伺服器元件標記為 示範,目前不建議用於生產環境。
  • 授權為 Apache 2.0(NVIDIA Corporation)。

更多資訊

  • 核心概念與 TOML 模式docs/core_concepts.mddocs/reference/toml_schema.md
  • 路由演算法詳情docs/routing_algorithms/…
  • 基準測試結果 – 請參閱 README 中的「Benchmark Provenance」表格。
  • 社群 – 提供 GitHub 問題與行為準則(Code of Conduct)。

Switchyard 允許您將路由層輕鬆整合到任何現有的 LLM 網關(NeMo Relay、LiteLLM 或自訂伺服器)中,無需重寫您的代理即可節省令牌成本。

相關

  • 專案
  • 專案
  • 專案
  • 專案
  • 專案