В два часа сорок минут ночи группа мониторинга начала заполняться оповещениями. Мы оказывали техническую поддержку команде, разрабатывающей систему обслуживания клиентов для трансграничной электронной коммерции: доля таймаутов их API интеллектуального обслуживания клиентов выросла с обычных 0,3% до 27% и держалась почти час. Со стороны пользователей это выглядело так: чат-бот подолгу не отвечал, а операторам пришлось временно переключиться на ручную обработку.
При разборе выяснилось, что проблема была не в нашем коде, а на стороне вышестоящего провайдера — у единственного поставщика модели в тот период возникло региональное ограничение частоты запросов на кластере инференса. Все наши запросы шли к одному и тому же провайдеру, и запасного варианта не было. В этой статье я подробно разбираю тот сбой и последующую схему модернизации — в помощь коллегам, которые занимаются корпоративной интеграцией ИИ.
Три ловушки зависимости от единственного поставщика — мы наступили на все
Многие думают, что подключить API большой модели — это просто вписать ключ и отправить HTTP-запрос. Но в продакшене ловушки сосредоточены в трёх местах.
Первая — ограничение частоты запросов. Квота QPS у провайдера выделяется на уровне аккаунта; во время большой распродажи объём сессий обслуживания клиентов вырос втрое, квота моментально исчерпалась, и посыпались ответы 429. Тогда мы не реализовали ни очередь запросов, ни экспоненциальную задержку повторов, а логика повторных попыток была написана слишком агрессивно и лишь усиливала нагрузку.
Вторая — таймауты. Как только потоковый интерфейс (SSE) на стороне провайдера зависает, соединение надолго остаётся в подвешенном состоянии и не возвращает данных, а клиент может только ждать. В том сбое значительная часть запросов не завершалась ошибкой, а «жила фиктивно» — TCP-соединение ещё держалось, но ни одного token не приходило.
Третья — различия протоколов. Разные провайдеры по-разному определяют формат потокового ответа, маркеры завершения и коды ошибок. Структура SSE-событий у API GPT-4o и API Claude различается, а отечественные API Qwen и API DeepSeek имеют собственные поля. Если в бизнес-коде напрямую подключать несколько провайдеров, это значит заложить себе кучу if-else.
Схема маршрутизации между несколькими моделями: категорирование, деградация, нормализация, агрегация
После сбоя мы провели модернизацию, ключевая идея которой — ввести слой шлюза моделей и вынести вопрос «к какому провайдеру обращаться» из бизнес-кода.
Категорирование запросов — первый шаг. Мы разделили запросы по бизнес-значимости на три класса: диалоговые в реальном времени (обслуживание клиентов, ассистент оператора) требуют задержки P99 менее 2 секунд; пакетная генерация (описания товаров, черновики писем) допускает задержку в минуты; офлайн-задачи (разметка данных, резюме отчётов) полностью асинхронны. Только после категорирования у стратегии маршрутизации появляется основа.
Автоматическая деградация при сбое — второй шаг. Для каждой модели настраивается проверка работоспособности: при превышении порога последовательных ошибок или таймаутов она автоматически выводится из работы, а трафик переключается на резервную модель. Мы задали порог срабатывания при доле ошибок в скользящем окне выше 5% и интервал проверки восстановления 30 секунд. Здесь стоит предупредить: деградация — это не бездумное переключение, нужно учитывать тип задачи. В сценарии обслуживания клиентов переключение на близкую по возможностям модель допустимо, но для задач со сложными рассуждениями после деградации нужно ставить пометку для последующей ручной проверки.
Нормализация протокола SSE — третий шаг и самый трудоёмкий. На уровне шлюза мы унифицировали формат потокового вывода: бизнес-сторона распознаёт только одну структуру событий, а перевод с языка конкретного провайдера выполняет шлюз. Так при смене модели бизнес-код менять не нужно.
Агрегация расхода — четвёртый шаг. После вызовов нескольких моделей тарификация Token и статистика расхода должны вестись по единым правилам, иначе в конце месяца сверка счетов сведёт с ума. Шлюз агрегирует данные по трём измерениям — арендатор, модель, тип задачи — и выдаёт единый счёт.
Позже мы усовершенствовали стратегию маршрутизации до «автоматического выбора оптимальной модели по задаче»: простые вопросы-ответы идут через дешёвую малую модель, сложные рассуждения — через мощную, генерация кода — через специализированную. С такой логикой общая стоимость вызовов снизилась, а отклик стал стабильнее. За этим, по сути, стоит способность к планированию на стороне вычислительных ресурсов: механизмы вроде планирования зелёных вычислений и эластичного выделения GPU по требованию не дают ресурсам инференса в пиковые периоды выстраиваться в бесконечную очередь.
О границах стратегии маршрутизации — скажу честно
Не всем командам нужна многоверсионная отказоустойчивость с несколькими моделями. Если у вас всего несколько десятков тысяч вызовов в день, бизнес не чувствителен к задержкам и бюджет позволяет, достаточно честно подключить одного провайдера и хорошо проработать повторы и таймауты — сложность от многоверсионной схемы лишь замедлит итерации.
Настоящие сценарии ценности маршрутизации между несколькими моделями таковы: объём вызовов настолько велик, что грозит ограничение частоты; бизнес предъявляет жёсткие требования к доступности; или нужно динамически балансировать между стоимостью и качеством. Критерий прост — случалось ли, что доля таймаутов вашего API влияла на конечных пользователей? Если да, этот слой шлюза стоит построить.
В нашем проекте мы также использовали token8341 — платформу агрегации API больших моделей для унифицированного подключения нескольких моделей: один Key позволяет вызывать GPT-4o, Claude, Gemini, DeepSeek, Qwen, ERNIE, Doubao и другие популярные модели, она совместима с OpenAI SDK, и для переключения достаточно изменить одну строку base_url. Она решает как раз описанные выше задачи нормализации протоколов и агрегации расхода, избавляя от хлопот с самостоятельным сопровождением SDK разных провайдеров. Для команд, которые не хотят строить шлюз с нуля, такие решения агрегации AI API, как token8341, — допустимый вариант.
В заключение добавлю: token8341 — платформа агрегации API больших моделей — достаточно полно покрывает отечественные модели: есть Pangu, DeepSeek, Qwen, ERNIE, Doubao, Spark, что упростит проекты по импортозамещающему соответствию. Но инструмент остаётся инструментом: как проектировать стратегию маршрутизации и определять пороги деградации, всё равно нужно настраивать под свои бизнес-данные. Тот ночной сбой преподал нам самый практичный урок: доступность не покупается — она проектируется слой за слоем.
Автор: Сунь Хаожань
Дата публикации: 12 ноября 2026 г.