RAG (Retrieval Augmented Generation) – делаем прослойку, которая улучшает запрос, добавляя автоматически данные из некоторой БД.

2 процесса:

  • наполняем БД
  • используем

Наполняем БД:

  • подготавливаются данные в каком-то формате (например, папка с файлами в формате md или json)
  • есть некий скрипт, которые данные переводит в БД. В БД есть поле (векторы, которые были текстом ранее) по которому происходит поиск и текст, который будет добавлен в запрос. Это может быть одно и то же, а могут быть немного разные (например, файл делится на абзацы, они становятся ключами поиска, а в запрос добавляется весь файл, чтобы предоставить законченный контекст)
  • в основе скрипта обычно содержится специализированная LLM (обычно не та же, которая будет обрабатывать финальный запрос), которая переводит текст в некоторый вектор (массив цифр). Он сохраняется в БД. Как правило, используется векторая БД. Она умеет находить близость одного набора цифр к другому. Т.к. цифры кодируют некоторые понятия (пусть и явно неизвестные нам, но сформировавшиеся при изначальном обучении LLM), то на практике такой поиск вполне себе неплохо работает.

Используем:

  • отправляем исходный запрос в ту же LLM, которая использовалась для создания БД. Получаем вектор.
  • Отправляем вектор в БД и говорим вернуть N похожих записей. Из записей берем текст. Убираем повторы текста.
  • По некоторому шаблону добавляем тексты в запрос.
  • Отправляем улучшенный запрос в целевую LLM.

В целом, можно считать подход устаревшим. В общем случае лучше использовать MCP, но для каких-то отдельных сценариев может работать и дальше.