4.3 RAG: Как научить GigaChat отвечать на вопросы по документам
GigaChat хорошо отвечает на фактологические вопросы и вопросы, ответ на которые есть в промпте. Но память у каждой языковой модели ограничена, значит GigaChat не может обрабатывать большие базы данных.

Что же делать, если задача именно такая? Доучивание модели может занять недели, а то и месяцы, и, как мы знаем, не всегда целесообразно. Есть решение под названием Retrieval Augmented Generation («генерация с расширенным поиском», RAG).

Это механизм извлечения информации, при котором модель «режет» данные на небольшие фрагменты, чтобы найти те их них, которые с наибольшей вероятностью содержат нужный ответ. Порядок действий такой:

  1. Документы — текстовые файлы, PDF, данные из интернета, Википедии и других источников, например, базы патентов — загружаются в память.
  2. Каждый документ «разрезается» на части, для каждой части рассчитывается эмбединг — числовой вектор, отображающий смысл текста. Если у текстов похожий смысл, эмбединги тоже будут схожими.
  3. Затем векторы смыслов складываются в векторную базу данных.
Загружаем -> разрезаем -> создаём вектор -> складываем:
Теперь, когда мы пишем запрос модели, для него тоже считается эмбединг и выполняется поиск релевантных частей из базы данных. Эти части «склеиваются» в мета-документ, который по размеру помещается в контекст модели. Модель анализирует этот мета-документ и даёт ответ.

Запрос -> извлечение -> эмбединг -> обработка мета-документа -> ответ:
Использование решения на базе RAG вызывает предсказуемые вопросы:
  • На какие части «разрезать» документ?
  • Какой из множества векторных баз данных лучше воспользоваться?
  • Какой алгоритм сравнения эмбедингов подойдёт лучше?
  • Как получить более точный и информативный ответ?
Это нетривиальные вопросы. Ответить на них можно только эмпирическим путём: попробовать разные варианты реализации RAG и подобрать оптимальный. В GigaChain SDK есть разные загрузчики документов, адаптеры к базам данных и коннекторы к алгоритмам поиска. Из них можно собрать индивидуальный пайплайн (процесс обработки данных), который лучше всего подходит для ваших задач.

Резюмируем:

  • GigaChain SDK — это библиотека Python на базе LangChain, которая упрощает разработку решения с использованием GigaChat.
  • В неё входит коллекция промптов и ряд шаблонных решений для работы с GigaChat, которые созданы разработчиками GigaChat и показывают хороший результат для решения разных задач.
  • Для задач обработки больших объемов данных можно подобрать оптимальное решение с использованием RAG — механизма извлечения информации и генерации ответов высокой точности на основе анализа мета-документов.