OpenAI провела серию экспериментов с технологиями RAG для одного из клиентов. Результаты показали: не существует универсального решения — для разных задач требуются разные методы поиска информации. Эффективность оценивается через специальные метрики, которые зависят от конкретного приложения.
Среди методов RAG можно выделить несколько ключевых:
- Baseline: поиск на основе векторной базы данных с использованием расстояния. В исследовании OpenAI применялась косинусная схожесть.
- Query Transformations — модификация пользовательского ввода для улучшения поиска. В рамках этого подхода используются разные техники:
- Query expansion (с помощью LangChain) — запрос расширяется: LLM генерирует несколько запросов с разных точек зрения. Затем извлекаются релевантные документы, формируется объединение уникальных документов.
- HyDE (Hypothetical Document Embeddings, LangChain) — для входящего запроса генерируются гипотетические документы. Их встраивают и используют в поиске. Предполагается, что такие документы могут быть ближе к нужным исходным материалам, чем сам вопрос.
- Step back prompting подходит для задач рассуждения. Вопрос разбивается на более общие принципы и концепции. Ответ синтезируется на основе исходного вопроса и «отступного» ответа. Например, вопрос по физике можно абстрагировать до вопроса о физических принципах.
- Rewrite-Retrieve-Read — переписывание вопросов пользователя, чтобы улучшить поиск.
Важную роль играет маршрутизация вопросов (Routing) между несколькими хранилищами данных. В презентации OpenAI упоминались два векторных хранилища и одна SQL-база данных. LangChain использует LLM, чтобы направлять пользовательский ввод в нужные подцепочки (например, в различные векторные хранилища).
Ещё один важный элемент — построение запросов (Query Construction). Система генерирует корректный SQL-запрос из ввода пользователя, чтобы извлечь информацию из реляционной (SQL) базы данных. LangChain поддерживает такую возможность — подробности можно найти в недавних материалах по построению запросов.
OpenAI также зафиксировала заметный рост производительности благодаря экспериментам с размером чанков при встраивании документов в процессе построения индекса. Не менее важна пост-обработка документов — она выполняется после извлечения, но до подачи в LLM. Этот этап позволяет обеспечить разнообразие или актуальность извлекаемых материалов, особенно когда данные объединяются из нескольких источников. OpenAI описала два метода пост-обработки:
- Re-rank — интеграция LangChain с определённым эндпоинтом для сжатия документов (сокращение избыточности) при извлечении большого количества материалов.
- Классификация — каждый извлечённый документ классифицируется по содержанию. Затем выбирается запрос в зависимости от классификации. LangChain поддерживает классификацию, в том числе с использованием вызова функций для обеспечения схемы вывода.
Есть и другие подходы:
- MMR — многие vectorstores предлагают баланс между релевантностью и разнообразием.
- Кластеризация — некоторые методы используют кластеризацию встроенных документов с выборкой. Это полезно при консолидации материалов из широкого круга источников.
Результаты экспериментов OpenAI в области RAG можно воспроизвести. Главное — пробовать разные методы, ведь производительность приложения сильно зависит от настройки RAG. При этом критически важна оценка эффективности: она позволяет не тратить время на малоэффективные подходы. Для оценки RAG есть значительная поддержка — например, существует рецепт с использованием LangSmith для оценки нескольких продвинутых цепочек RAG.
Text-to-metadata filter
Text-to-Cypher
Text-to-SQL+semantic
Postgres with Pgvector
open source
Streamlit app
favorable results
guides for fine-tuning
very
good
Cohere ReRank
blog
implementation
multi-query
tagging
of
text
logical routing
max-marginal-relevance
search
here
LangSmith
here