Построение эффективной системы маршрутизации запросов к провайдерам ИИ является важной задачей, особенно когда количество поддерживаемых провайдеров достигает 33. В этой статье мы рассмотрим подход к созданию 4-уровневого маршрутизатора затрат на ИИ, который начинается с наиболее дешевых вариантов и эскалирует только когда это необходимо.
Задача
При наличии 33 провайдеров ИИ ручной выбор одного из них может быть болезненным процессом. Необходимо обеспечить следующие функции:
- Оптимизация затрат: использовать бесплатных провайдеров, когда это возможно
- Автоматический переход на следующий провайдер: если один из провайдеров недоступен, попробовать следующий
- Уровни качества: разные задачи требуют разных уровней качества
4-уровневый дизайн
Для решения этой задачи был разработан 4-уровневый маршрутизатор, который включает в себя следующие уровни:
- Бесплатный (free): включает провайдеров, таких как "deepseek", "groq", "cerebras", "siliconflow" и "novita_ai"
- Бюджетный (budget): включает провайдеров, таких как "sambanova", "arcee_ai", "minimax", "deepinfra", "together_ai", "fireworks_ai" и "moonshot"
- Производительный (performance): включает провайдеров, таких как "openai", "google", "mistral", "cohere", "perplexity", "nebius" и "qwen"
- Премиум (premium): включает провайдеров, таких как "anthropic", "openai" и "google"
Каждый уровень имеет свою стоимость и используется для определенных задач:
- Бесплатный: $0,0001 за 1 000 токенов, используется для рутинных задач и прототипирования
- Бюджетный: $0,001 за 1 000 токенов, используется для общего вывода
- Производительный: $0,01 за 1 000 токенов, используется для задач, требующих высокого качества
- Премиум: $0,05 за 1 000 токенов, используется для сложных задач и максимального качества
Логика маршрутизатора
Маршрутизатор работает следующим образом:
- Попытка использовать провайдеров в порядке возрастания уровня
- Немедленный выход из цикла при первом успехе
Маршрутизатор также позволяет указать стартовый уровень, чтобы пропустить более дешевые уровни, когда известно, что они не подойдут.
Вызов маршрутизатора из Flutter
Маршрутизатор можно вызвать из приложения Flutter с помощью функции _supabase.functions.invoke, передав в качестве аргументов действие, сообщение и уровень. Например:
final resp = await _supabase.functions.invoke(
'ai-hub',
body: {
'action': 'provider.chat_auto',
'message': userMessage,
// 'tier': 'performance',
}
);