RAG
RAG (Retrieval Augmented Generation) – делаем прослойку, которая улучшает запрос, добавляя автоматически данные из некоторой БД.
2 процесса:
- наполняем БД
- используем
Наполняем БД:
- подготавливаются данные в каком-то формате (например, папка с файлами в формате md или json)
- есть некий скрипт, которые данные переводит в БД. В БД есть поле (векторы, которые были текстом ранее) по которому происходит поиск и текст, который будет добавлен в запрос. Это может быть одно и то же, а могут быть немного разные (например, файл делится на абзацы, они становятся ключами поиска, а в запрос добавляется весь файл, чтобы предоставить законченный контекст)
- в основе скрипта обычно содержится специализированная LLM (обычно не та же, которая будет обрабатывать финальный запрос), которая переводит текст в некоторый вектор (массив цифр). Он сохраняется в БД. Как правило, используется векторая БД. Она умеет находить близость одного набора цифр к другому. Т.к. цифры кодируют некоторые понятия (пусть и явно неизвестные нам, но сформировавшиеся при изначальном обучении LLM), то на практике такой поиск вполне себе неплохо работает.
Используем:
- отправляем исходный запрос в ту же LLM, которая использовалась для создания БД. Получаем вектор.
- Отправляем вектор в БД и говорим вернуть N похожих записей. Из записей берем текст. Убираем повторы текста.
- По некоторому шаблону добавляем тексты в запрос.
- Отправляем улучшенный запрос в целевую LLM.
В целом, можно считать подход устаревшим. В общем случае лучше использовать MCP, но для каких-то отдельных сценариев может работать и дальше.