Знайомтеся: Switchyard — проксі та бібліотека на Rust для маршрутизації й перетворення трафіку LLM між API OpenAI та Anthropic
Команди, які запускають агентів для кодування, стикаються з тією самою проблемою. Claude Code працює з Anthropic Messages API, Codex CLI — з OpenAI, а модель, яку команда насправді хоче обслуговувати, працює через vLLM, NVIDIA NIM або Ollama. Переписувати агента не варіант, тож рівень трансляції має розташовуватися деінде.
Switchyard — відповідь NVIDIA: Rust-проксі та бібліотека для трафіку LLM, які маршрутизують запити між провайдерами, перекладають формати OpenAI та Anthropic, записують операційні метрики й надають типізовані алгоритми маршрутизації, які можна комбінувати. Проєкт випущено за ліцензією Apache 2.0, а документація доступна за адресою docs.nvidia.com/nemo/switchyard.
Чи придатний він до розгортання? Так, але лише для оцінювання. Бінарний файл встановлюється з crates.io, лаунчер — з PyPI, а самостійно розгорнути його можна будь-де, однак NVIDIA позначає Switchyard як передальфа-версію та експериментальний проєкт, попереджає, що він не призначений для використання в продакшені, і очікує значних змін API та алгоритмів до виходу версії v1.0.
Що робить Switchyard
Клієнти зберігають власний API. Switchyard декодує вхідний запит у нейтральні до провайдера типи Rust, запускає алгоритм маршрутизації для вибору бекенду, повторно кодує запит у власний дротовий формат цього бекенду, надсилає його та перекладає відповідь, зокрема потокові події, назад у формат, якого очікує клієнт.
Сервер приймає три вхідні формати: OpenAI Chat Completions, OpenAI Responses та Anthropic Messages. Будь-який із трьох може звертатися до будь-якого маршруту, а кожен налаштований клієнт LLM обирає власний висхідний формат. Саме в цьому полягає сенс такого розділення: API агента та API бекенду більше не повинні збігатися.
Три способи запуску
Шлях через лаунчер призначений для агентів кодування. Встановіть опублікований інструмент командою uv tool install --python 3.12 "nemo-switchyard[cli]", а потім запустіть switchyard launch claude, switchyard launch codex або switchyard launch openclaw для роботи з пакетним розгортанням або власним TOML-файлом.
Шлях через сервер встановлює автономний проксі командою cargo install --locked switchyard-server, перевіряє конфігурацію за допомогою --dry-run і запускає сервер на вибраних хості та порту.
Шлях через бібліотеку використовує switchyard-libsy, яка вбудовує алгоритми маршрутизації в застосунок Rust, не володіючи HTTP-стеком. Вона ніколи не викликає модель самостійно: алгоритм вирішує, яку ціль використовувати, і передає кожен виклик моделі назад тому, хто її викликає.
Алгоритми маршрутизації
Маршрут — це один ідентифікатор моделі, видимий клієнту, та алгоритм, що стоїть за ним. Сервер підтримує:
passthroughнадсилає кожен запит до однієї цілі.randomрозподіляє трафік між цілями за допомогою необов’язкових відносних ваг, а необов’язкове початкове значення відтворює послідовність вибору. Це шлях для A/B-тестування та експериментів із витратами.llm_classifierзвертається до цілі-класифікатора для отримання висновку про можливості, а потім спрямовує запит до слабкої або сильної цілі. Параметрbase_thresholdє обов’язковим;min_confidence,capability_elevated_floorіsession_affinityналаштовують його, а все, що суддя не може визначити, спрямовується до сильної цілі. Встановленняmode = "escalation"спочатку запускає кожен крок на слабкому рівні, після чого суддя вирішує, чи потрібно повторно виконати його на сильному рівні.stage_routerоцінює сигнали результатів використання інструментів і прогресу агента з останніх кроків, щоб вибрати потужну або ефективну ціль, уникаючи додаткового виклику класифікатора на більшості кроків.
Сильний, слабкий, потужний і ефективний — це ролі всередині маршруту, а не фіксовані властивості моделі. Та сама висхідна модель може виконувати різні ролі в різних маршрутах.
Спостережуваність
GET /metrics повертає текст у форматі Prometheus від загальнопроцесного провайдера OpenTelemetry сервера. Сімейства метрик охоплюють запити, помилки, затримку викликів моделей, затримку повного кроку, токени промптів, завершень, кешовані токени, створення кешу та токени міркувань, а також висхідні HTTP-спроби за результатом і кодом. Мітка tier містить значення strong або weak для розрізнення рішень класифікатора, а виклики класифікатора виключаються з цих сімейств.
Цікавішою метрикою є switchyard_routing_overhead_ms, яка показує час роботи алгоритму мінус час виклику, що обслужив запит. Виклики класифікатора не віднімаються, тому маршрут із LLM-класифікатором показує тут час класифікації, тоді як passthrough і random показують вартість вибору цілі — менше мілісекунди. Бакети починаються з 0,1 мс. Окремо, --routing-log-file додає запис JSON для кожної завершеної відповіді, а GET /v1/routing/session-stats повертає загальні показники викликів і токенів для кожної сесії з цього журналу.
Конфігурація
Розгортання TOML має три рівні: llm_clients визначають базову URL-адресу, дротовий формат, змінну середовища для облікових даних і політику повторних спроб; targets прив’язують один ідентифікатор висхідної моделі до клієнта; routes відкривають один ідентифікатор моделі, видимий клієнту, та його алгоритм. Секрети ніколи не зберігаються у файлі, оскільки api_key_env лише вказує назву змінної середовища. Значення max_retries за замовчуванням дорівнює 2 і застосовується до транспортних помилок, тайм-аутів, HTTP-відповідей 408/429 і відповідей 5xx.
Основні висновки
- Switchyard — це Rust-проксі та бібліотека за ліцензією Apache 2.0, які маршрутизують і перекладають трафік LLM.
- Він забезпечує двосторонній міст між OpenAI Chat, OpenAI Responses та Anthropic Messages, зокрема для потокових даних.
- Постачаються чотири типи маршрутів: passthrough, random, класифікатор LLM і маршрутизатор етапів на основі сигналів.
- Метрики Prometheus відокремлюють накладні витрати маршрутизації від затримки викликів моделей для кожної моделі та рівня.
- Проєкт перебуває на передальфа-стадії та прямо не призначений для продакшену, тож розглядайте його як інструмент для оцінювання.
Перегляньте репозиторій на GitHub і документацію. Також підписуйтеся на нас у Twitter і не забудьте приєднатися до нашого сабреддіту ML із понад 150 тисячами учасників та підписатися на нашу розсилку. Стривайте! Ви є в Telegram? тепер ви також можете приєднатися до нас у Telegram.
Потрібно співпрацювати з нами для просування вашого репозиторію на GitHub, сторінки на Hugging Face, релізу продукту, вебінару тощо? Зв’яжіться з нами
Перекладено автоматично з англійської. Оригінал статті — за посиланням нижче.