Во второй половине прошлого года мы консультировали команду, которая делает SaaS для трансграничной логистики. Изначально их AI-функциональность вызывала только GPT-4o и работала довольно стабильно. Потом бизнес-заказчик потребовал добавить китайские модели: проверка договоров — через DeepSeek, скрипты для поддержки — через Qwen, маркетинговые тексты — через ERNIE. Через три недели в их бэкенд-коде уже было четыре набора SDK, логика аутентификации размазана по семи файлам, счета не сходятся, а потоковый вывод на фронтенде то работает нормально, то выдаёт кракозябры. Проблема не в самих моделях, а в отсутствии слоя модельного шлюза.
Все грабли мультимодельной интеграции обычно лежат в одном и том же месте
Начнём с конфликтов SDK. Python SDK от OpenAI и SDK китайских вендоров все называются client, версии зависимостей конфликтуют, а HTTP-клиенты Qwen и ERNIE по-разному обрабатывают параметры таймаутов. В итоге инженеры создали отдельное виртуальное окружение для каждой модели и изолировали вызовы через subprocess. Работает, но стоимость эксплуатации запредельная.
Теперь про управление ключами. У четырёх вендоров свои системы ключей в консолях: у кого-то по проектам, у кого-то по приложениям, у кого-то ещё и подаккаунты. Ключи тестовой и продакшн-среды перемешаны, и однажды стажёр закоммитил продакшн-ключ в публичный репозиторий на GitHub. Хотя отозвали его в течение десяти минут, весь день команда провела за проверкой логов вызовов.
С тарификацией ещё хуже. DeepSeek считает по токенам, у части моделей Qwen вход и выход тарифицируются раздельно, у некоторых версий ERNIE осталась legacy-логика подсчёта по символам. Финансам к концу месяца нужен консолидированный счёт, и инженерам приходится вручную выгружать четыре CSV и делать маппинг. Форматы потокового вывода тоже не унифицированы: где-то возвращается поле data в SSE, где-то всё обёрнуто в JSON — код парсинга на фронтенде состоит из сплошных if else.
Что именно делает модельный шлюз в середине
По сути модельный шлюз — это слой обратного прокси плюс слой адаптации протоколов: наружу он предоставляет единый OpenAI-совместимый интерфейс, а внутрь транслирует запросы в формат, понятный каждому вендору. Позже в другом проекте мы перестроили эту цепочку с использованием возможностей агрегации AI API от SiCore TokenWorks — впечатления довольно прямые.
Единая аутентификация — первый шаг. Бизнес-сторона получает только один Key, а шлюз внутри хранит маппинг учётных данных к каждому вендору: ротация ключей, лимиты квот, IP-whitelist — всё делается на уровне шлюза. Трансляция протоколов — второй шаг: массив messages в формате OpenAI преобразуется во input для Qwen, prompt для ERNIE, а ответ унифицированно возвращается в структуру choices. Формат чанков потокового вывода тоже выравнивается на этом слое, и фронтенд пишет только одну логику парсинга.
Маршрутизация определяет, в какую модель уйдёт запрос. Можно статически маршрутизировать по типу задачи, а можно динамически выбирать по стоимости. Когда мы тестировали мультимодельную маршрутизацию token8341, мы жёстко направляли запросы на проверку договоров в DeepSeek-V3, а короткие запросы поддержки — в облегчённую версию Qwen. Общая стоимость вызовов снизилась примерно на 60% по сравнению с тем, когда всё шло через GPT-4o. Агрегация затрат — последний шаг: шлюз ставит метки по бизнес-тегам, и в конце месяца сразу выдаёт раздельный счёт — финансам больше не нужно вручную собирать таблицы.
Несколько практических рекомендаций при внедрении
Первое: не вызывайте вендорские SDK напрямую из бизнес-кода, даже если подключаете всего одну модель. Оставьте тонкую обёртку — при добавлении модели объём изменений будет отличаться на порядок. Второе: ключи обязательно должны идти через шлюз или сервис управления секретами; хардкод в конфигурационных файлах рано или поздно выстрелит. Третье: стратегию маршрутизации сначала делайте статической, а динамическую маршрутизацию по стоимости вводите только после двух недель реальных данных о вызовах — иначе легко сэкономить пару копеек ценой маршрутизации критичных запросов в неподходящую модель.
При выборе смотрите на два момента: совместимость с OpenAI SDK — это значит, что стоимость миграции практически нулевая, достаточно поменять одну строку base_url для переключения; и поддержка оплаты по факту потребления с агрегацией затрат — для компаний, где несколько бизнес-линий используют один набор AI-возможностей, это обязательное требование. Подход SiCore TokenWorks здесь — полное покрытие API китайских больших моделей, оплата по факту потребления; по нашему проекту при сравнении тарификация оказалась довольно прозрачной.
Резюмируя одной фразой: модельный шлюз не обязателен, но когда вы подключаете третью модель, он из опционального превращается в необходимый. Для дальнейшего чтения можно посмотреть спецификацию OpenAI-совместимого интерфейса, чтобы понять, как спроектирован протокольный слой — это поможет избежать лишних ошибок при написании собственной обёртки.