Отделить внешнюю модель API от структуры таблиц базы данных — это архитектурное решение, которое позволяет гибко менять логику ответов без переписывания кода доступа к данным. Внешняя модель (LLM) отвечает за семантический анализ и генерацию текста, а база данных хранит факты и структуру сущностей. Разделение достигается через четкое разграничение ответственности: модель принимает запрос, оценивает его сложность и формирует план действий, но не имеет прямого доступа к физическому хранилищу без явного вызова функции (Function Calling) или специализированного инструмента поиска.
Архитектура LLM Router: принцип разделения нагрузки между дешёвыми и мощными моделями
Система строится на двухуровневой архитектуре. На первом уровне работает легковесная модель (например, небольшие версии Llama 3, Mistral или Phi-3). Её задача — быстро оценить входящий запрос и определить его тип.
На втором уровне подключаются мощные модели (GPT-4o, Claude 3.5 Sonnet или крупные экземпляры Llama). Они активируются только тогда, когда запрос содержит многошаговое логическое рассуждение, требует глубокого анализа текста, работы с кодом или сложного креатива.
Ключевой принцип: дешёвая модель не должна пытаться решить задачу, которую она не понимает. Если легковесная модель выдаёт ответ с низкой уверенностью или признаёт свою неспособность, запрос перенаправляется в «тяжёлый» кластер.
Алгоритм маршрутизации: как определить сложность запроса до вызова модели
Перед тем как вызывать языковую модель, система должна провести предварительную оценку. Это делается через анализ структуры запроса и его семантики.
Основные признаки простого запроса: короткий текст, отсутствие требований к логическим цепочкам, запрос на фактологические данные или простые инструкции. Такие запросы обрабатываются легковесной моделью.
Признаки сложного запроса: необходимость агрегации данных из разных таблиц, выполнение SQL-запросов динамически, работа с кодом или креативное письмо. В этом случае система инициирует вызов мощной модели или сразу формирует инструмент для работы с базой.
Критерии выбора легковесной модели для первого уровня фильтрации
Для первого уровня подходят модели, способные классифицировать намерения и отвечать на простые вопросы. Примеры: Llama 3 (8B), Mistral 7B, Phi-3.
При выборе учитывайте скорость ответа и стоимость токена. Легковесная модель должна уметь распознавать паттерны «простого» и «сложного» запроса с высокой точностью, чтобы не перегружать дорогие модели лишними вызовами.
Модель не должна пытаться генерировать SQL-запросы или выполнять сложные вычисления на лету. Её роль — триаж (сортировка) входящего потока.
Условия перенаправления запроса в «тяжёлый» кластер
Перенаправление происходит, если легковесная модель выдаёт ответ с низкой уверенностью или признаёт свою неспособность.
Также запрос уходит в тяжелый кластер, если требуется работа с кодом, глубокий анализ текста или сложное логическое рассуждение.
Если задача требует динамической выборки данных из базы (например, «найди всех клиентов, у которых сумма заказов больше X за последние Y дней»), легковесная модель не справится. Система должна передать такой запрос мощной модели или напрямую сформировать инструмент для работы с базой.
Ошибки при настройке порога уверенности легковесной модели
Ошибка 1: Слишком высокий порог уверенности. Легковесная модель часто ошибается на сложных запросах, но если порог настроен жестко, она будет пытаться ответить сама, выдавая галлюцинации или неверные данные.
Ошибка 2: Слишком низкий порог. Запросы, которые мог бы решить дешевый процессор, уходят к мощным моделям, что увеличивает стоимость обработки.
Решение: Настраивайте порог на основе метрик точности классификации. Используйте few-shot prompting для обучения модели распознавать сложные паттерны.
Влияние структуры таблицы базы данных на логику маршрутизации
Структура таблиц влияет на то, как модель формирует запросы к базе. Если данные разбиты на мелкие сущности (например, заказы, клиенты, товары), легковесная модель может не понять, какие связи нужно установить.
Мощные модели лучше справляются с навигацией по сложной схеме БД, но это стоит денег. Оптимально: нормализовать базу так, чтобы простые запросы требовали минимального количества таблиц.
Используйте Function Calling (вызов функций) для явного указания модели на то, какие инструменты доступны (например, «вызвать функцию get_orders»). Это позволяет легковесной модели просто выбрать нужную функцию, а не генерировать SQL сама.
Ограничения подхода: когда разделение нагрузки невозможно
Разделение нагрузки невозможно, если запрос требует глубокого понимания контекста, который хранится в базе данных, и легковесная модель не имеет доступа к этому контексту.
Также ограничения возникают при работе с очень большими объемами данных (Big Data). Легковесные модели могут не справиться с анализом огромных наборов данных без предварительной агрегации.
В таких случаях используйте гибридный подход: легковесная модель фильтрует запросы, а мощная модель работает с агрегированными данными или результатами поиска.
Вопросы и ответы
Как избежать галлюцинаций при работе с базой данных?
Используйте Function Calling, чтобы явно указывать модели на доступные инструменты. Не позволяйте модели генерировать SQL без проверки. Настраивайте порог уверенности легковесной модели так, чтобы она перенаправляла сложные запросы в тяжелый кластер.
Можно ли использовать одну модель для всех задач?
Нет, это неэффективно. Легковесные модели дешевле и быстрее для простых задач, а мощные модели нужны для сложных. Разделение нагрузки снижает стоимость обработки каждого запроса в разы.
Как оценить эффективность разделения нагрузки?
Сравнивайте стоимость обработки запросов до и после внедрения LLM Router. Измеряйте время ответа и точность ответов. Если легковесная модель справляется с 80% запросов, а тяжелая — с остальными, это уже экономия.


