RAG (Retrieval-Augmented Generation): как связать поиск и генерацию, чтобы модель перестала «додумывать»

RAG (Retrieval-Augmented Generation) — это архитектурный паттерн, в котором генеративная модель (обычно LLM) перед ответом извлекает релевантные факты из внешнего корпуса знаний и опирается на них при формировании финального текста. Идея проста: не заставлять модель «помнить» всё в своих весах и не стимулировать её «догадываться», а подставлять проверяемые источники из индекса документов. На практике это снижает «галлюцинации», улучшает объяснимость (цитирование), упрощает актуализацию знаний и помогает контролировать стоимость инференса.

RAG (Retrieval-Augmented Generation): как связать поиск и генерацию, чтобы модель перестала «додумывать»

RAG — это не продукт и не одна библиотека, а инженерный конвейер: данные → подготовка и индексация → извлечение (retrieval) → обогащение запроса → генерация → валидация и логирование. Он органично сочетается с векторными представлениями и поиском по эмбеддингам (Эмбеддинги), а для выбора движка хранения и поиска полезен обзор во векторной базе данных. В продакшн-окружении RAG часто становится «скелетом» ассистентов и инструментом для корпоративных баз знаний.

Зачем нужен RAG (Retrieval-Augmented Generation) и что он решает

Классический вызов LLM без опоры на источники страдает от двух системных ограничений:

  • Стареющие знания: модель «застывает» на дате обучения; любое изменение фактов требует дообучения или специальной подгрузки.
  • Вероятностная природа: при нехватке контекста LLM «додумывает» детали, создавая риск неточностей.

RAG решает оба пункта:

  • Актуальность: документы обновляются в индексе без переподготовки модели.
  • Проверяемость: ответ можно сопроводить цитатами и ссылками на источники, повышая доверие и управляемость.

В типичных сценариях RAG обеспечивает рост «faithfulness» (верности источникам), снижает долю «безцитатных» ответов и уменьшает стоимость (меньше необходимости в длинном контексте и «тяжёлых» моделях).

Архитектура RAG: полный путь от данных до ответа

RAG удобно представить как цепочку модулей. Ниже — подробный разбор и ключевые инженерные решения для каждого шага.

Подготовка данных и индексация

  • Сбор и дедупликация. Источники: корпоративные документы, базы знаний, вики, инструктажи, тикеты, лог-сводки, код. Удаляем дубликаты, пустые страницы, версии «черновик».
  • Нормализация. Преобразуем форматы к «строгому» тексту (PDF→текст, HTML→чистый контент), сохраняем структурные маркеры: заголовки, списки, табличные ячейки.
  • Разбиение на фрагменты (chunking). Вопрос баланса: слишком мелкие чанки теряют контекст, слишком крупные — мешают точному матчинг-поиску и удешевлению. Популярные стратегии:
    1. фиксированная длина (например, 500–1200 токенов) с перекрытием 10–20%;
    2. структурное (по заголовкам/секции/параграфам);
    3. семантическое разбиение (порог похожести/тематические границы).
  • Эмбеддинги. Для каждого чанка считаем векторное представление. Ключ: консистентная модель эмбеддингов для индексирования и запроса (см. Эмбеддинги).
  • Индекс в векторной БД. Храним (vector, id, метаданные). Метаданные минимальны и функциональны: источник/версия/дата/автор/язык/тэги/раздел. Важна поддержка фильтров по метаданным и шардингу (см. Векторная база данных).

Извлечение (retrieval)

  • Формирование запроса. Из пользовательского запроса строим вектор (можно применить переформулировку/расширение: query expansion).
  • Поиск. Базовая стратегия — ANN-поиск (approximate nearest neighbors) в векторном индексе по косинусной близости/дот-продукту. В производстве почти всегда выигрывает гибрид: BM25/keyword + векторный поиск → слияние (fusion) по рангу/скорингу.
  • Переранжирование (rerank). Кандидаты (например, top-50) прогоняются через компактную модель переранжирования либо через LLM-судью на выдержках. Это поднимает точность top-k, но увеличивает задержку.
  • Фильтры. Ограничиваем домен, язык, свежесть (time-decay), доступность по ролям. Для многодоменных корпусов это критично.

Обогащение контекста и подготовка подсказки

  • Сжатие фрагментов. Длинные куски режем/резюмируем до фактов, релевантных вопросу, чтобы экономить контекст.
  • Агрегация top-k (напр., 3–8 фрагментов). Порядок — по релевантности и разнообразию.
  • Формат подсказки. Инструкции модели: стиль ответа, формат, список выдержек с идентификаторами источников, требования «не выдумывать за пределами источников».

Генерация (generation)

  • Стратегии декодирования. Greedy/beam давят разнообразие, но повышают устойчивость к вымыслам; top-p/top-k добавляют вариативность, однако требуют строже заданных рамок.
  • Контроль формата. Для извлечения структурированных полей используем схемы (JSON/таблица) и валидаторы. Для объяснений — цитаты с id-ссылками на фрагменты.

Пост-валидация и логирование

  • Проверка «faithfulness»: содержатся ли факты ответа в цитируемых фрагментах; не появились ли «новые» факты.
  • Политики: фильтры токсичности и запретных тем, ограничение длины и тона.
  • Логи: запрос, версия эмбеддингов, индекс, кандидаты, выбранные top-k, параметры декодирования, итоговый ответ, цитаты и стоимость.

В производстве RAG живёт рядом со стеком инференса (см. Стек инференса LLM) и часто становится частью общего AI-стека (см. AI-стек) для ассистентов и внутренних сервисов.

Где RAG сильнее fine-tuning, а где нет

Сценарий RAG лучше Fine-tuning лучше Комментарий
Часто меняющиеся факты Да Нет Проще обновить индекс, чем переобучать модель
Корпоративные документы Да Иногда RAG даёт цитаты и контроль доступа
Строгая стилистика/политика Иногда Да Дообучение/инструкционное дообучение выравнивает стиль
Тесная терминология Да (если есть корпус) Иногда RAG + глоссарий снижают «перевирания» терминов
Компрессия знаний «в весах» Нет Да Когда офлайн-инференс без доступа к индексу

Часто выбирают гибрид: лёгкий тюнинг под формат и политику + RAG для фактов.

Практические решения: chunking, top-k, rerank

Компонент Варианты/диапазоны Что даёт Риски
Chunking 500–1200 токенов, перекрытие 10–20%; структурное/семантическое Баланс точности и контекста Слишком мелко — «шум», слишком крупно — размывание
top-k 3–8 Высокий recall релевантных фактов Завал модели лишним контентом
Rerank Компактная модель/LLM-судья Повышает точность top-k Цена и P95 задержка
Гибридный поиск BM25 + векторный, score fusion «Живучесть» к формулировкам Требует настройки весов
Фильтры По языку/времени/разделу/ролям Меньше «мусора» в контексте Риск отсечь полезное

Совет: начинайте с простого (фиксированный chunk size, k=5, гибрид BM25+вектор) и постепенно добавляйте rerank и сжатие по данным экспериментов.

Метрики: как мерить качество RAG

Класс Метрики Что показывает
Извлечение Recall@k, Precision@k, NDCG@k, MRR Способность находить нужные фрагменты
Верность источникам Faithfulness / Attribution rate, Citation@k Долю ответов, опирающихся на цитаты
Качество ответа Human eval, полезность/корректность Полезность в реальных задачах
Стоимость/производительность Цена/1k токенов, P50/P95, cache hit Экономику и SLA
Дифф-метрики Срезы по доменам/языкам/датам Где падает качество и почему

Важно разводить офлайн-метрики (на эталонных наборах) и онлайн-качество (A/B на реальном трафике). Без A/B легко «переобучить» систему под тесты.

Стоимость и производительность: где прячутся токены

  • Сжатие контекста. Резюмирование фрагментов до bullet-фактов сокращает токены без больших потерь качества.
  • Кэширование. KV-кэш и кэш поисковых результатов для повторяющихся вопросов/паттернов запросов.
  • Квантование и маршрутизация. Дорогое место — генерация: используйте компактные модели, а тяжёлую LLM включайте только при необходимости (см. Квантование).
  • Лимиты. Обрезайте «длинные хвосты»: максимальный k, длина цитаты, длина ответа.
  • Асинхронность вторичных шагов. Сложные операции (добавочные проверки) выносите из критического пути.

Варианты RAG: от «классики» к многошаговым цепочкам

  • Классический RAG: один запрос → top-k документов → ответ. Подходит для FAQ и «локальных» вопросов.
  • Многошаговый RAG: последовательность уточнений и дополнительных извлечений («расследование»). Полезен, когда первый top-k слишком общ.
  • Ре-источники (re-sources): если источники противоречат друг другу, модель запрашивает дополнительные фрагменты и строит сравнительную таблицу.
  • Цитатно-центричный RAG: приоритизируем выдержки, которые легко цитировать (прямые формулировки, таблицы, нормы).
  • Доменные профили: отдельные индексы/веса для разных направлений (право/техника/поддержка).

Безопасность и управление рисками

  • Политика источников. Индексируйте только санкционированные корпуса; исключайте «серые» источники и приватные данные без нужных прав.
  • Prompt-injection. Не допускайте выполнения инструкций из документов-источников (чёткая граница между данными и командами).
  • Фильтры содержания. Токсичность/PII-детекторы на документ-потоке до индекса и на финальном ответе.
  • Цитирование. Каждому важному утверждению — id источника. Это дисциплинирует генерацию и упрощает аудит.
  • Логи. Храните «карту решения»: какие документы и почему вошли в контекст.

Чек-лист внедрения RAG в продукт

  • Определите узкие сценарии (FAQ, поиск норм, извлечение полей, справка по коду).
  • Соберите санкционированный корпус: источники, лицензии, владельцы, SLA обновлений.
  • Настройте pipeline подготовки: очистка, chunking, эмбеддинги, индекс.
  • Запустите базовый retrieval: гибрид BM25+вектор, k=5, без rerank.
  • Подключите генерацию с инструкциями и форматом цитирования.
  • Введите валидацию: проверка фактов/схемы, фильтры и политики.
  • Отстройте метрики и A/B: Recall@k, faithfulness, цена/1000 токенов, P95.
  • Точечно добавляйте rerank и сжатие там, где это реально улучшает эффективность.
  • Организуйте обновления индекса и контроль дрейфа корпуса (novelty/устаревание).
  • Документируйте инциденты и процедуры отката; настройте наблюдаемость.

Таблица: стратегии извлечения и когда их применять

Стратегия Суть Когда использовать Плюсы Минусы
Только векторный ANN по эмбеддингам Семантические запросы, синонимы Хорош для перефразировок «Промахи» по редким терминам
Только BM25 Ключевые слова/фразы Формальные названия/термины Быстро и дёшево Игнорирует семантику
Гибрид (fusion) Слияние BM25 и ANN Большинство задач Стабильно к формулировкам Нужна настройка весов
Rerank-модель Дореранжирование top-N Трудные/многословные документы Улучшает точность top-k Цена, задержка
Time-aware Временные фильтры/веса Новости, нормы, версии Учитывает «свежесть» Сложность метаданных

Типовые анти-паттерны RAG

  • Слишком «жирные» чанки: модель «тонет» в лишнем контенте, а поиск теряет точность.
  • Одинаковая модель эмбеддингов для всего: мультиязычие/код/таблицы требуют выбора подходящих репрезентаций.
  • Отсутствие гибридного поиска: векторный без BM25 «падает» на редких терминах.
  • Нет переранжирования: топ выдачи содержит «почти релевантные» фрагменты.
  • Нет цитирования: сложно проверять ответы и объяснять решения.
  • Индекс без владения: непонятно, кто обновляет/чистит корпус и по какому SLA.
  • Неучёт стоимости: k=20, длинные выдержки и «тяжёлые» LLM — и бюджет «горит».

Роль RAG в агентах и производственных системах

RAG — «пища» для агентов: он уменьшает риск «самоуверенных» ошибок и позволяет планировщику работать с фактами, а не с предположениями. В типичном агентном цикле (perception → plan → act → validate) retrieval повторяется несколько раз, а выводы снабжаются цитатами. Для устойчивости многошаговых сценариев полезно фиксировать граничные условия: лимиты на k, длину контекста и список разрешённых источников. См. также AI-агент.

FAQ

RAG — это библиотека или паттерн? Паттерн. Он описывает, как связать поиск и генерацию. Инструменты/библиотеки реализуют отдельные куски цепочки.

Обязательно ли использовать векторные базы? Для семантического поиска — практически да. Но в реальных системах лучше гибрид с ключевыми словами: так вы устойчивее к формулировкам запроса.

Нужен ли rerank? Если документы длинные и похожие — почти всегда да: rerank повышает долю действительно релевантных top-k и стабилизирует качество.

Как выбрать размер чанка? Стартуйте с 500–800 токенов и 10–20% перекрытия. Затем по A/B и Recall@k регулируйте под корпус и задачи.

Можно ли обойтись без цитирования? Технически — да, но для корпоративных сценариев цитаты резко повышают доверие и обнаруживаемость ошибок.

Что делать с таблицами и кодом? Извлекать структурно (ячейки, ключ-значение), хранить метаданные; для кода — учитывать «паддинги» и синтаксис при разбиении.

Когда лучше fine-tuning вместо RAG? Когда факты мало меняются, а критичен стилистический/поведенческий профиль ответов. Часто уместен компромисс: лёгкий тюнинг + RAG.

Словарь терминов

  • RAG (Retrieval-Augmented Generation) — генерация с подстановкой фактов из внешнего индекса перед ответом.
  • Chunking — стратегия разбиения документов на фрагменты для индексации/поиска.
  • Эмбеддинг — плотное векторное представление текста/кода/таблиц для семантического поиска.
  • Векторная база данных — хранилище/индекс эмбеддингов с быстрым ANN-поиском и фильтрами.
  • Гибридный поиск — объединение keyword-методов (BM25) и векторного поиска.
  • Rerank — доранжирование кандидатов более мощной моделью.
  • Faithfulness — степень соответствия ответа извлечённым фрагментам.
  • Citation@k — доля ответов, в которых присутствуют цитаты на источники из top-k.
  • Top-k — число фрагментов, отобранных для генерации ответа.
  • Query expansion — переформулировка/расширение запроса для лучшего извлечения.

См. также

Task Runner