NVIDIA NeMo Switchyard: умный роутер для LLM
Обзор NVIDIA NeMo Switchyard — open-source Rust-прокси для маршрутизации LLM-трафика между моделями и провайдерами с совместимостью OpenAI и Anthropic API.
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-приложения.
Как это работает
Клиенты сохраняют нативный формат 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 процентных пунктов.
Тарифы и цены
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 Switchyard | LiteLLM | Portkey |
|---|---|---|---|
| Лицензия | Apache 2.0 | MIT | Проприетарная (есть free tier) |
| Язык реализации | Rust | Python | Managed SaaS / self-hosted |
| API-совместимость | OpenAI + Anthropic | OpenAI (100+ провайдеров) | OpenAI (250+ моделей) |
| Алгоритмы маршрутизации | Расширяемые (классификатор, эскалация, случайный) | Fallback, load balancing | AI Gateway (fallback, retries) |
| Prometheus-метрики | ✅ Из коробки | ✅ (Pro) | ✅ (Managed) |
| Кэширование | ❌ | ✅ | ✅ |
| Встроенный дашборд | ❌ | ✅ | ✅ |
| Управление API-ключами | ❌ | ✅ | ✅ |
| Стриминг без буферизации | ✅ | ✅ | ✅ |
| Статус | Pre-alpha | Production-ready | Production-ready |
| GDPR / SOC 2 | ❌ (self-host) | ❌ (self-host) | ✅ (Managed) |
| Встраивание в приложение | ✅ (Rust lib) | ✅ (Python SDK) | Частично |
| Цена | Бесплатно | Бесплатно / Enterprise | Free tier + платные планы |
LiteLLM — open-source прокси, позволяющий вызывать 100+ LLM-провайдеров через один OpenAI-совместимый API. Он бесплатен для самостоятельного хостинга и является основой AI-инфраструктуры многих команд.
Portkey — одна из ближайших альтернатив LiteLLM, если главный фокус — маршрутизация LLM, надёжность и наблюдаемость. Он предоставляет AI-шлюз с функциями автоматических повторных попыток, фолбэков, кэширования, балансировки нагрузки, контроля затрат, виртуальных ключей и наблюдаемости.
Как начать работу
# Установка через 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.
Вердикт
NeMo Switchyard — одна из наиболее технически амбициозных попыток решить реальную проблему: маршрутизацию LLM-трафика между моделями разного уровня для оптимизации стоимости и качества. Библиотека предоставляет провайдерно-нейтральный SDK, поддерживает как беcтренировочные, так и настраиваемые алгоритмы маршрутизации, и сохраняет разделение между логикой маршрутизации и конкретными провайдерами моделей.
Кому подойдёт:
- Командам, разрабатывающим сложные многошаговые AI-агенты на Rust или с Rust-компонентами
- Исследователям и инженерам NVIDIA-экосистемы (NIM, Nemotron)
- Тем, кто хочет снизить затраты на фронтирные модели с доказанным ROI
- Разработчикам, которым важна нативная совместимость с OpenAI и Anthropic API одновременно
Кому не подойдёт прямо сейчас:
- Командам, которым нужна продакшен-стабильность уже сегодня (pre-alpha!)
- Python-командам без Rust-опыта
- Тем, кто нуждается в UI, кэшировании и управлении ключами из коробки
Рейтинг: 7.5 / 10
| Критерий | Оценка |
|---|---|
| Инновационность концепции | ⭐⭐⭐⭐⭐ |
| Зрелость / стабильность | ⭐⭐ |
| Производительность (Rust) | ⭐⭐⭐⭐⭐ |
| Документация | ⭐⭐⭐⭐ |
| Экосистема интеграций | ⭐⭐⭐ |
| Простота старта | ⭐⭐⭐ |