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は、1.0未満のNVIDIA-NeMoプロジェクトであり、各LLMリクエストを、タスクを処理できる最も安価なモデルにルーティングします。軽量なルーティングレイヤーで、1つ以上の大規模言語モデル(LLM)プロバイダーの前に配置されます。各リクエストに対して、設定可能なアルゴリズムに基づき、安価な「効率的」モデルか、より強力(通常は高価)なモデルにリクエストを送信するかを決定し、全体のコストを抑えつつタスクの正確性を維持することを目指します。
なぜ重要か – 複数のターンにわたるエージェント指向のワークロードでは、多くの場合、単一の強力なモデルは過剰です。Switchyardは、ハードなケースのみを自動的に「エスカレート」することで、トークンコストを13〜30%削減でき、成功確率はわずかに低下するか、むしろわずかに向上するという結果が、Terminal-Bench 2.1のベンチマークで示されています。
コアコンポーネント(1.0未満)
| コンポーネント | 空間 | 役割 |
|---|---|---|
switchyard-libsy |
ベータ | ルーティングアルゴリズムを公開する純粋なRustライブラリ。独自のゲートウェイやハーネスに埋め込み、HTTP呼び出し、リトライ、認証情報を自ら管理できます。 |
switchyard-llm-client |
アルファ | ライブラリの中立的なリクエスト/レスポンスタイプと実際のHTTP LLM APIとの間を変換するヘルパー。 |
switchyard-runner |
アルファ | 他のランタイム(例:NeMo Relay)内でルーティング設定を実行するグルー。 |
switchyard-server |
デモ | OpenAI/Anthropicエンドポイントを模倣するスタンドアロンプロキシ。迅速なデモや評価に有用です。 |
使い方
- NeMo Relayプラグイン – 既存のNeMo Relayデプロイメントに
routes.tomlファイルをロードします。プラグインは選択されたプロバイダーへのHTTPディスパッチを処理しますが、Relayの通常のトランスポートおよびリトライロジックは維持されます。 - ライブラリの埋め込み – Pythonパッケージ(
pip install nemo-switchyard)をインストールするか、Rustクレートをプロジェクトに追加します。ルーティングアルゴリズム(例:stage_router(picker="efficient_first", confidence_threshold=0.5))を構築し、モデル固有のHTTPクライアントを供給するrun_streamループで駆動します。 - スタンドアロンプロキシ – Rustバイナリ(
cargo install switchyard-server)をインストールし、routes.tomlをシンプルに記述してターゲットIDをOpenRouter(または任意のOpenAI互換エンドポイント)にマッピングし、サーバーを起動します。OpenAI/Anthropicクライアントはhttp://localhost:4000をポイントすることで、自動的にルーティングの恩恵を受けられます。
ルーティングアルゴリズム(TOML設定で1つ選択)
- 能力(
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クレートは Algorithm::run_stream イテレータを提供します。
成熟度とライセンス
- プロジェクトは 1.0未満 であり、APIや設定フォーマットは変更される可能性があるため、統合時にバージョンをピン留めしてください。
- サーバーコンポーネントは デモ とマークされており、現時点では本番環境での使用は推奨されていません。
- ライセンスは Apache 2.0(NVIDIA Corporation)。
詳細情報の入手先
- コアコンセプトとTOMLスキーマ –
docs/core_concepts.mdとdocs/reference/toml_schema.md - ルーティングアルゴリズムの詳細 –
docs/routing_algorithms/… - ベンチマーク結果 – READMEの「Benchmark Provenance」テーブルを参照。
- コミュニティ – GitHubのイシューをオープンし、コードの行動規範(Code of Conduct)が提供されています。
Switchyardは、既存のLLMゲートウェイ(NeMo Relay、LiteLLM、またはカスタムサーバー)にルーティングレイヤーを導入し、エージェントの再書き換えなしにトークンコストを削減できます。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト