Почему не стоит удерживать соединения с БД во время вызовов LLM

Задержка ИИ (latency) — это не только время, которое модель тратит на «раздумья». Она также включает в себя то, как вы управляете соединениями с базой данных.

Удержание соединения с БД во время ожидания ответа от LLM или API эмбеддингов может истощить ваш пул соединений. Медленные внешние вызовы заставляют сессии оставаться открытыми гораздо дольше, чем это необходимо.

Я изучил репозиторий Honcho, чтобы посмотреть на их решение. Они заменили одну долгоживущую сессию на короткие, специфичные для конкретных задач сессии.

Старый паттерн

  • Открыть сессию БД
  • Прочитать настройки пользователя
  • Вызвать LLM (медленно)
  • Вызвать API эмбеддингов (медленно)
  • Сохранить результаты
  • Закрыть сессию БД

Новый паттерн

  • Открыть сессию БД для предварительных проверок
  • Считать необходимые значения в переменные
  • Закрыть сессию БД
  • Вызвать LLM и API эмбеддингов (соединение с БД не удерживается)
  • Открыть новую короткую сессию БД для сохранения результатов
  • Закрыть сессию БД

Цель не в том, чтобы отказаться от базы данных, а в том, чтобы отделить согласованность транзакций от ожидания сетевых ответов.

Пять шагов для управления соединениями

  1. Определите границы согласованности данных.
  2. Считайте все необходимые значения в переменные перед любым внешним вызовом API.
  3. Закройте область видимости базы данных (scope).
  4. Выполните медленные внешние задачи.
  5. Откройте новую короткую область записи для сохранения финальных результатов.

Примечание: Если вы используете pgvector, поиск выполняется внутри базы данных, поэтому во время этой операции необходимо держать сессию открытой.

Сокращение времени жизни сессии улучшает масштабируемость, но следите за ошибками отсоединенных объектов (detached-object errors) в вашей ORM и проверяйте, что данные остаются согласованными в рамках снимков транзакций (transaction snapshots).

Source: https://dev.to/junhyun-dev/neurin-llm-hocul-jung-db-connectioneul-jabji-anhneun-iyu-3abg

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