NVIDIA NeMo Switchyard: умный роутер LLM-трафика

Что это и для кого

Switchyard — это Rust-прокси и библиотека для LLM-трафика. Она маршрутизирует запросы между провайдерами, транслирует форматы OpenAI и Anthropic API, фиксирует операционные метрики и предоставляет типизированные, компонуемые алгоритмы маршрутизации.

NVIDIA NeMo Switchyard — это open-source библиотека маршрутизации моделей для AI-агентов. Технология автоматически направляет промпты к наиболее подходящей и эффективной модели на каждом шаге агентного воркфлоу с учётом конкретных потребностей. Разработчики агентных приложений могут настраивать или менять алгоритмы маршрутизации в соответствии со своими приоритетами: качество, задержка и стоимость.

Для кого: разработчики AI-агентов и LLM-приложений, которым нужно:

  • снизить стоимость инференса, не жертвуя качеством;
  • проводить A/B-бенчмаркинг нескольких моделей;
  • работать с несколькими провайдерами (OpenAI, Anthropic, vLLM, NVIDIA NIM, Ollama) без переписывания кода;
  • встраивать гибкую логику маршрутизации в Rust-приложения.
ℹ Контекст релиза
Switchyard вышел одновременно с NVIDIA Nemotron 3.5 Lightning — 30B параметровой MoE-моделью. Вместе они образуют дуэт: дешёвая «лёгкая» модель берёт рутину, а фронтирная модель подключается только при необходимости.

Как это работает

Клиенты сохраняют нативный формат OpenAI или Anthropic API. Switchyard выбирает настроенный бэкенд, пересылает запрос в формате этого бэкенда и транслирует ответ обратно в формат, который ожидает клиент.


graph LR
    A[Клиент\nOpenAI / Anthropic API] --> B[Switchyard Proxy]
    B --> C{Алгоритм\nмаршрутизации}
    C -->|Простой запрос| D[Дешёвая модель\nNemotron / Ollama]
    C -->|Сложный запрос| E[Фронтирная модель\nClaude / GPT]
    C -->|A/B тест| F[Случайный бэкенд]
    D --> G[Трансляция ответа]
    E --> G
    F --> G
    G --> A

Switchyard предоставляет один и тот же Rust-движок маршрутизации через две среды выполнения: switchyard-server — автономный HTTP-прокси, который загружает нативный TOML-конфиг и открывает эндпоинты OpenAI Chat Completions, OpenAI Responses и Anthropic Messages.

А switchyard-libsy встраивает алгоритмы маршрутизации в ваше Rust-приложение. Он никогда не вызывает модель сам: алгоритм решает, какой таргет использовать, и передаёт каждый вызов модели обратно вам — что позволяет встроить его в существующий прокси, шлюз или агентный рантайм без владения HTTP-стеком.


Ключевые возможности

1. Трансляция протоколов

Switchyard транслирует форматы OpenAI Chat, Anthropic Messages и OpenAI Responses, поэтому агент продолжает говорить на своём нативном API, пока запрос обслуживается vLLM, NVIDIA NIM, Ollama или любым OpenAI-совместимым эндпоинтом.

2. Алгоритмы маршрутизации

Один и тот же прокси может распределять трафик между несколькими моделями для A/B-бенчмаркинга, применять сигнально-ориентированную стадийную маршрутизацию или запускать собственный алгоритм. Доступны: случайная маршрутизация, LLM-as-classifier, signal-driven stage-router и возможность написать свой алгоритм.

Escalation routing — особенно мощный паттерн:

Маршрутизация эскалации начинает каждый разговор на дешёвой «слабой» модели. LLM-судья читает ход работы и переключает сессию на «сильную» модель при обнаружении устойчивых проблем. Используйте её для многоходовых агентных воркфлоу, где слабая модель справляется с рутиной, но может потребовать «спасения» после повторных ошибок, зацикливания или дрейфа.

3. Операционные метрики

Prometheus-метрики охватывают запросы, ошибки, задержку, токены и накладные расходы маршрутизации.

4. Потоковая передача без буферизации

Поддержка стриминга сохраняет асинхронные итераторы без буферизации полного ответа.

Пример конфига (TOML)

Пример escalation router конфигурации:

schema_version = 1

[llm_clients.openrouter]
format = "openai_chat"
base_url = "https://openrouter.ai/api/v1"
api_key_env = "OPENROUTER_API_KEY"

[targets.judge]
id = "google/gemini-3.5-flash"
llm_client = "openrouter"

[targets.strong]
id = "anthropic/claude-opus-4.7"
llm_client = "openrouter"

[targets.weak]
id = "moonshotai/kimi-k2.6"
llm_client = "openrouter"

[routes.agent]
id = "agent"
type = "llm_classifier"
mode = "escalation"
classifier_target = "judge"
strong_target = "strong"
weak_target = "weak"
prompt = "Judge whether the weak model is stuck."

Встраивание в Rust (библиотека)

# Cargo.toml
[dependencies]
async-trait = "0.1"
futures = "0.3"
switchyard-libsy = { git = "https://github.com/NVIDIA-NeMo/Switchyard.git" }
switchyard-protocol = { git = "https://github.com/NVIDIA-NeMo/Switchyard.git" }
tokio = { version = "1", features = ["macros", "rt"] }

Реальные результаты бенчмарков

«Внутренние бенчмарки показывают, что NeMo Switchyard поддерживает точность на уровне фронтирных моделей, снижая стоимость выполнения задач почти до одной трети от использования одного лишь Opus 4.8».

LangChain сообщает о снижении стоимости на 74% на 145 многоходовых задачах Deep Agents за счёт направления только 7% вызовов к фронтирной модели — при этом точность снизилась лишь на 6 процентных пунктов.

💡 Совет по порогу
NVIDIA рекомендует начинать с порога около 0.5, а затем калибровать на репрезентативных задачах. Минимальный путь калибровки требует примерно 40–75 запусков на «сильной» модели и около 20 пробных запусков на «эффективной».

Тарифы и цены

NeMo Switchyard полностью open-source и интегрируется с уже используемыми технологиями. Проект распространяется под лицензией Apache 2.0 — бесплатно, без коммерческих ограничений. Вы платите только за вызовы моделей у выбранных провайдеров (OpenAI, Anthropic, OpenRouter и т.д.).

КомпонентСтоимость
switchyard-server (прокси)Бесплатно (Apache 2.0)
switchyard-libsy (Rust-библиотека)Бесплатно (Apache 2.0)
Вызовы моделейПо тарифам выбранного провайдера
Коммерческая поддержкаЧерез NVIDIA Enterprise

Плюсы и минусы

✅ Плюсы❌ Минусы
Полностью open-source (Apache 2.0)Pre-alpha статус, не для продакшена
Нативная совместимость с OpenAI и Anthropic APIНаписан на Rust — порог входа выше для Python-разработчиков
Гибкие алгоритмы маршрутизации (включая escalation)API может кардинально измениться до v1.0
Prometheus-метрики из коробкиНет встроенного UI/дашборда
Стриминг без буферизацииОграниченная экосистема интеграций на старте
Встраивается как Rust-библиотекаТребует самостоятельного деплоя и поддержки инфраструктуры
Доказанная экономия (до 74% по данным LangChain)Нет встроенного кэширования и управления ключами
Разработан и поддерживается NVIDIAТолько Rust как runtime — нет Python SDK

Сравнение с альтернативами

ПараметрNeMo SwitchyardLiteLLMPortkey
ЛицензияApache 2.0MITПроприетарная (есть free tier)
Язык реализацииRustPythonManaged SaaS / self-hosted
API-совместимостьOpenAI + AnthropicOpenAI (100+ провайдеров)OpenAI (250+ моделей)
Алгоритмы маршрутизацииРасширяемые (классификатор, эскалация, случайный)Fallback, load balancingAI Gateway (fallback, retries)
Prometheus-метрики✅ Из коробки✅ (Pro)✅ (Managed)
Кэширование
Встроенный дашборд
Управление API-ключами
Стриминг без буферизации
СтатусPre-alphaProduction-readyProduction-ready
GDPR / SOC 2❌ (self-host)❌ (self-host)✅ (Managed)
Встраивание в приложение✅ (Rust lib)✅ (Python SDK)Частично
ЦенаБесплатноБесплатно / EnterpriseFree tier + платные планы

LiteLLM — open-source прокси, позволяющий вызывать 100+ LLM-провайдеров через один OpenAI-совместимый API. Он бесплатен для самостоятельного хостинга и является основой AI-инфраструктуры многих команд.

Portkey — одна из ближайших альтернатив LiteLLM, если главный фокус — маршрутизация LLM, надёжность и наблюдаемость. Он предоставляет AI-шлюз с функциями автоматических повторных попыток, фолбэков, кэширования, балансировки нагрузки, контроля затрат, виртуальных ключей и наблюдаемости.

⚠ Важно о зрелости
Switchyard находится в статусе pre-alpha и быстро развивается. API и алгоритмы, как ожидается, значительно изменятся до версии v1.0. Не используйте в критических продакшен-системах без резервного прямого провайдера.

Как начать работу

# Установка через cargo
cargo install --git https://github.com/NVIDIA-NeMo/Switchyard switchyard-server

# Запуск в режиме launcher для coding-агентов
switchyard launch --config switchyard.toml

# Запуск как standalone proxy
switchyard-server --config switchyard.toml

Switchyard добавляет заголовок X-Switchyard-Version к исходящим LLM-вызовам для атрибуции релиза. Контент запросов и ответов при этом не включается. Для отключения: export SWITCHYARD_TELEMETRY_OPT_OUT=1.

📝 Use case: coding-агент на дешёвой модели
Направьте coding-агент (например, Claude Code или Codex) на open-source модель. Switchyard транслирует форматы OpenAI Chat, Anthropic Messages и OpenAI Responses, поэтому агент продолжает говорить на нативном API, пока запрос обслуживается vLLM, NVIDIA NIM или Ollama.

Вердикт

NeMo Switchyard — одна из наиболее технически амбициозных попыток решить реальную проблему: маршрутизацию LLM-трафика между моделями разного уровня для оптимизации стоимости и качества. Библиотека предоставляет провайдерно-нейтральный SDK, поддерживает как беcтренировочные, так и настраиваемые алгоритмы маршрутизации, и сохраняет разделение между логикой маршрутизации и конкретными провайдерами моделей.

Кому подойдёт:

  • Командам, разрабатывающим сложные многошаговые AI-агенты на Rust или с Rust-компонентами
  • Исследователям и инженерам NVIDIA-экосистемы (NIM, Nemotron)
  • Тем, кто хочет снизить затраты на фронтирные модели с доказанным ROI
  • Разработчикам, которым важна нативная совместимость с OpenAI и Anthropic API одновременно

Кому не подойдёт прямо сейчас:

  • Командам, которым нужна продакшен-стабильность уже сегодня (pre-alpha!)
  • Python-командам без Rust-опыта
  • Тем, кто нуждается в UI, кэшировании и управлении ключами из коробки

Рейтинг: 7.5 / 10

КритерийОценка
Инновационность концепции⭐⭐⭐⭐⭐
Зрелость / стабильность⭐⭐
Производительность (Rust)⭐⭐⭐⭐⭐
Документация⭐⭐⭐⭐
Экосистема интеграций⭐⭐⭐
Простота старта⭐⭐⭐