Маршрутизация по задаче
Сервис просит не конкретную модель, а класс задачи: подешевле, побыстрее, поточнее. Шлюз сам выбирает, куда отправить. Модель можно поменять для всей компании в одном месте, не трогая код сервисов.
Единая точка входа для всех AI-запросов компании. Переключает провайдеров при отказах, режет расходы маршрутизацией и не даёт одному сломавшемуся сервису утянуть за собой остальные.
Когда каждый сервис ходит к моделям сам, получается три проблемы сразу. Ключи расползаются по проектам, расходы никто не видит целиком, а отказ одного провайдера роняет всё, что на него завязано.
Добавьте к этому лимиты частоты запросов: провайдер начинает отвечать отказом на пике нагрузки, ровно тогда, когда сервис нужнее всего.
Сервис просит не конкретную модель, а класс задачи: подешевле, побыстрее, поточнее. Шлюз сам выбирает, куда отправить. Модель можно поменять для всей компании в одном месте, не трогая код сервисов.
Отказ по лимиту или ошибка сервера означают не ошибку пользователю, а переход к следующему провайдеру в списке. Проблемный провайдер временно исключается и проверяется позже.
В конце цепочки стоят модели на собственном железе. Они бесплатны и доступны всегда, поэтому полный отказ означал бы отказ вашего же сервера.
Все запросы проходят через одну точку, поэтому видно, сколько потрачено, каким сервисом и на какой задаче. Метрики, логи и оповещения собираются отдельным контуром.
Компаниям, у которых больше одного сервиса ходит к языковым моделям, и тем, кто хочет видеть и контролировать расходы на них.
Система работает у нас в боевой эксплуатации. Разворачиваем такую же на вашей инфраструктуре или дорабатываем под ваш процесс.
Запрос уходит следующему провайдеру. Раньше отказ по лимиту считался обычной ошибкой и возвращался пользователю - мы это изменили, потому что на пиках такое случается регулярно.
Считает ошибки за короткий промежуток. Если их становится слишком много, провайдер отключается на время, потом пробуется снова одним запросом. Так сломавшийся сервис не собирает на себя всю нагрузку.
Да, это обычный сервис в контейнере рядом с вашей инфраструктурой. Локальные модели ставятся на ваше железо, если приватность важнее качества.
Расскажите про задачу, посмотрим, что из этого применимо у вас.