Запознайте се със 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, а launcher-ът — от PyPI, и може да се хоства самостоятелно навсякъде, но NVIDIA определя Switchyard като предалфа и експериментален, предупреждава, че не е предназначен за продукционна употреба, и очаква API-ят и алгоритмите да се променят значително преди v1.0.
Какво прави Switchyard
Клиентите запазват своя native API. Switchyard декодира входящата заявка в независими от доставчика Rust типове, изпълнява алгоритъм за маршрутизиране, за да избере бекенд, кодира отново заявката в собствения wire формат на този бекенд, извиква го и превежда отговора, включително събитията при streaming, обратно във формата, който клиентът очаква.
Сървърът приема три входящи формата: OpenAI Chat Completions, OpenAI Responses и Anthropic Messages. Всеки от трите може да адресира всеки маршрут, а всеки конфигуриран LLM клиент избира собствен upstream формат. Именно това разделяне е същността: API-ят на агента и API-ят на бекенда вече не трябва да съвпадат.
Три начина за стартиране
Пътят чрез launcher е предназначен за агенти за програмиране. Инсталирайте публикувания инструмент с 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 стека. Тя никога не извиква модел сама; алгоритъмът решава коя цел да използва и предава всяко извикване на модела обратно към извикващия.
Алгоритми за маршрутизиране
Маршрутът представлява един видим за клиента ID на модел плюс алгоритъма зад него. Сървърът поддържа:
passthroughизпраща всяка заявка към една цел.randomразпределя трафика между цели чрез незадължителни относителни тегла, с незадължително начално число, което възпроизвежда последователността на избора. Това е подходът за A/B тестове и експерименти с разходите.llm_classifierизвиква цел за класификация, за да получи оценка на възможностите, след което маршрутизира към слаба или силна цел.base_thresholdе задължителен;min_confidence,capability_elevated_floorиsession_affinityго настройват, а всичко, което оценяващият не може да определи, се насочва към силната цел. Задаването наmode = "escalation"изпълнява всеки ход първо на слабото ниво и позволява на оценяващия да реши дали да го изпълни повторно на силното ниво.stage_routerоценява сигналите от резултатите на инструментите и напредъка на агента в последните ходове, за да избере способен или ефективен таргет, като избягва допълнително извикване на класификатор при повечето ходове.
Силни, слаби, способни и ефективни са роли в рамките на маршрут, а не фиксирани свойства на даден модел. Един и същ upstream модел може да изпълнява различни роли в различни маршрути.
Наблюдаемост
GET /metrics връща Prometheus текст от общодостъпния за процеса OpenTelemetry доставчик на сървъра. Семействата обхващат заявки, грешки, латентност на извикванията към модела, латентност на целия ход, prompt, completion, кеширани, създаващи кеш и reasoning токени, както и upstream HTTP опити според резултата и кода. Етикетът tier съдържа strong или weak за различимите решения на класификатора, а извикванията към класификатора са изключени от тези семейства.
По-интересната метрика е switchyard_routing_overhead_ms, която отчита времето за изпълнение на алгоритъма минус извикването, обслужило заявката. Извикванията към класификатора не се изваждат, така че маршрутът с LLM класификатор отчита тук времето за класификация, докато passthrough и random отчитат разхода под една милисекунда за избиране на цел. Интервалите започват от 0,1 ms. Отделно, --routing-log-file добавя JSON запис за всеки завършен отговор, а GET /v1/routing/session-stats връща общия брой извиквания и токени за всяка сесия от този лог.
Конфигурация
Едно TOML внедряване има три слоя: llm_clients определят базовия URL, wire формата, променливата на средата за идентификационните данни и политиката за повторни опити; targets свързват един upstream ID на модел с клиент; routes предоставят един видим за клиента ID на модел и неговия алгоритъм. Тайните никога не се съхраняват във файла, тъй като api_key_env само посочва променлива на средата. max_retries по подразбиране е 2 и се прилага при транспортни грешки, изтичане на времето, HTTP 408/429 и отговори 5xx.
Основни изводи
- Switchyard е Rust прокси и библиотека с лиценз Apache-2.0, която маршрутизира и превежда LLM трафик.
- Той свързва OpenAI Chat, OpenAI Responses и Anthropic Messages и в двете посоки, включително при streaming.
- Предлагат се четири типа маршрути: passthrough, random, LLM класификатор и управляван от сигнали stage router.
- Prometheus метриките изолират разхода за маршрутизиране от латентността на извикванията към модела, по модел и ниво.
- Проектът е предалфа и изрично не е предназначен за продукционна употреба, затова го приемайте като инструмент за оценка.
Разгледайте GitHub хранилището и документацията. Също така, можете да ни последвате в Twitter и не забравяйте да се присъедините към нашия ML subreddit с над 150 хил. членове и да се абонирате за нашия бюлетин. Чакайте! В Telegram ли сте? Сега можете да се присъедините към нас и в Telegram.
Имате нужда от партньорство с нас за популяризиране на вашето GitHub хранилище, Hugging Face страница, продуктово издание, уебинар и т.н.? Свържете се с нас
Преведено автоматично от английски. Оригиналната статия е на връзката по-долу.