Почему я перестал полагаться на одного AI-провайдера

Я создал чат-бота реального времени для форума сообщества. Я думал, что одного API будет достаточно. Я ошибся.

Спустя три недели в часы пик я столкнулся с ошибкой 5xx. Мой чат-бот перестал отвечать. Пользователи были разочарованы. Я понял, что нельзя полагаться на одного провайдера в продакшн-приложениях.

Я использовал GPT-4. Все работало отлично, пока не начались проблемы. Я столкнулся с лимитами запросов (rate limits), таймаутами и полными сбоями в работе. Оплата более высоких уровней подписки казалась попыткой устранить симптом, а не саму проблему.

Я пробовал других провайдеров, но у всех были разные форматы и методы аутентификации. Мой код превратился в мешанину из операторов switch-case. Мне нужна была система, которая позволит:

Я избегал сторонних библиотек, потому что они были слишком сложными и часто ломались. Вместо этого я написал простой роутер.

Сначала я определил общий интерфейс для всех провайдеров. Каждый провайдер реализует метод generate и проверку работоспособности (health check).

Затем я создал класс роутера. Он опрашивает провайдеров в определенном порядке, используя экспоненциальную задержку (exponential backoff) и простой кэш. Если первый провайдер дает сбой, система ждет и пробует следующего.

Эта система спасла мои выходные во время трех различных сбоев. Она поддерживает работу приложения, даже когда у крупного провайдера случаются неполадки.

Если вы решите реализовать подобное, имейте в виду следующее:

Если ваш проект небольшой, не стоит усложнять архитектуру (over-engineer). Если вам нужна потоковая передача (streaming), этот паттерн увеличит задержку (latency). Выбирайте инструмент, соответствующий вашим масштабам.

А как вы обеспечиваете надежность провайдеров? Пользуетесь одним провайдером или создаете слой резервирования (fallback layer)?

Source: https://dev.to/__c1b9e06dc90a7e0a676b/why-i-stopped-relying-on-a-single-ai-provider-and-built-a-fallback-system-1pc0

Optional learning community: https://t.me/GyaanSetuAi