Проблема зависимости от одного поставщика моделей
Многие проекты искусственного интеллекта начинаются просто:
llm = ChatGroq(...)
response = llm.invoke(prompt)
Это работает до тех пор, пока не возникает необходимость сменить поставщика или модель. При росте приложения изменение поставщиков приводит к необходимости редактирования нескольких сервисов и введения специфической логики.
Решение проблемы через маршрутизацию запросов
Для решения этой проблемы была разработана архитектура с использованием роутера запросов. Вместо того чтобы сервисы напрямую обращались к поставщику модели, все запросы проходят через единый роутер. Он решает, какой поставщик должен обработать запрос, выполняет автоматическое переключение при сбоях и скрывает детали реализации от остальной части приложения.
Архитектура системы
Архитектура включает следующие компоненты:
- Клиент: отправляет запрос на обработку данных.
- FastAPI endpoint: принимает запрос от клиента.
- Dependency injection: обеспечивает внедрение зависимостей для обработки запроса.
- LLMRouter Service: определяет подходящего поставщика для выполнения задачи.
- Поставщики моделей (например, Groq, OpenRouter, Ollama): обрабатывают запросы согласно выбранной стратегии.
- LangChain models: обеспечивают структурированный вывод результатов.
Такая структура позволяет легко добавлять новые модели и поставщиков без изменения основной бизнес-логики приложения.