RAG-pipeline: архитектура, этапы и продакшн-паттерны извлечения знаний для LLM

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

RAG-pipeline: архитектура, этапы и продакшн-паттерны извлечения знаний для LLM

RAG-pipeline — не одна библиотека, а совокупность этапов: сбор и подготовка данных, разбиение на фрагменты, вычисление векторов, индексация, извлечение кандидатов, гибридный поиск, переранжирование, сжатие выдержек, формирование подсказки, генерация, пост-валидация, логирование и наблюдаемость. В роли генератора выступает LLM, а факты подаются «извне» через хранилища и индексы.

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

Картина целиком: какие этапы включает RAG-pipeline (Retrieval-Augmented Generation: сквозная архитектура)

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

  1. Ингест и очистка: сбор документов из источников, дедупликация, нормализация форматов.
  2. Разбиение (chunking): делим документы на фрагменты удобного размера.
  3. Векторизация: считаем эмбеддинги для фрагментов.
  4. Индексация: записываем (vector, id, metadata) в векторное хранилище; настраиваем индексы и фильтры.
  5. Извлечение (retrieval): по запросу находим кандидатов (vector/BM25), объединяем, применяем переранжирование.
  6. Сжатие выдержек: конденсируем кандидатов до фактов, релевантных запросу.
  7. Сборка подсказки: формируем промт для модели с цитатами/ограничениями.
  8. Генерация: выдаём ответ; стриминг и контроль декодирования.
  9. Пост-валидация: вера в источники (faithfulness), соответствие схеме/политикам.
  10. Наблюдаемость: метрики, трассировки, стоимость, управление версиями.

Часть этапов выполняется офлайн (ингест, индексация), часть — онлайн в критическом пути (retrieval → генерация → валидация).

Ингест, нормализация и контроль качества корпуса

Цель — превратить «сырой мир» документов в предсказуемый поток артефактов для индекса. Важные практики:

  • Дедупликация: по хэшу тела и нормализованных заголовков; near-duplicate-поиск для слайдов и PDF.
  • Нормализация: единый текстовый формат; сохранение структурных маркеров (заголовки, списки, таблицы).
  • Версионность/свежесть: для каждого документа — source_id, version, ts, язык, права доступа (ACL).
  • Каталоги/качество: отчёты о доле пустых/битых объектов, «черных списках» источников.

Анти-паттерны: индексация «всего подряд»; смешение приватного и публичного без ACL; хранение HTML-артефактов (баннеры, навигация) внутри чанков.

Разбиение (chunking): компромисс контекста и точности

Chunking определяет баланс между точностью поиска и целостностью фактов.

  • Фиксированный размер: 500–1200 токенов; перекрытие 10–20% для сохранения связности.
  • Структурный: режем по заголовкам/секциям/параграфам; хорошо для мануалов и политик.
  • Семантический: динамические границы по тематическим «изломам»; требует доп. вычислений.

Рекомендация: старт с 700–900 токенов + 15% перекрытия; далее — A/B по Recall@k и стоимости.

Таблица: выбор стратегии chunking

Корпус Реком. стратегия Плюсы Риски
Тех. документация Структурный + перекрытие Легко цитировать Потеря фактов между разделами
Статьи/новости Фиксированный Простой пайплайн Дублирование при большом overlap
Справочники/нормы Семантический Высокая точность Цена подготовки, контроль качества

Векторизация и метаданные

Для каждого чанка считаем эмбеддинг, фиксируем метаданные и язык. Практики:

  • Единая модель эмбеддингов для индекса и поиска; L2-нормализация векторов.
  • Метаданные: source, lang, section, ts, version, acl, «тип» (таблица/код/текст).
  • Кэш: повторно используйте векторы для версионных правок (minor edits).

Об основных решениях по векторизации см. «Эмбеддинги».

Индексация: структура хранения и фильтры

Индекс — это не только ANN-структура, но и политики фильтрации. Минимум — фильтры по языку, разделу, свежести и ACL. На больших корпусах полезно шардирование (по доменам/языкам/версиям), репликация для чтения и TTL/soft-delete для устаревших фрагментов. Обзор индексов (HNSW, IVF, PQ) — в «Векторной БД».

Извлечение (retrieval): гибрид всегда устойчивее

Базовые варианты:

  • Векторный поиск: семантика и устойчивость к перефразировкам.
  • Keyword (BM25): точные имена собственные, артикуля, коды.
  • Гибрид: слияние (fusion) результатов; повышает «живучесть» к формулировкам запроса.

Далее — переранжирование компактной моделью или LLM-судьёй: сокращаем «ложноположительные» совпадения и улучшаем top-k. Практический старт: гибрид (веса 0.5/0.5), k_candidates = 50, rerank → top_k = 5.

Таблица: быстрые профили поиска

Профиль Что делаем Когда Комментарии
Семантический ANN по эмбеддингам Свободные формулировки Риск по rare-terms
Keyword-центричный BM25 + фильтры Нормативы/коды Быстро и дёшево
Гибрид ANN + BM25 + fusion Большинство задач Стабильность к формулировкам
С rerank + компактный ранкер Длинные документы ↑ P95, но ↑ точность top-k

Сжатие выдержек: меньше токенов — ниже цена

Даже лучший top-k часто избыточен. Цель — превратить кандидатов в список фактов: короткие цитаты, поля и таблицы, которые покрывают вопрос. Способы:

  • Heuristics: выделение предложений, где встречаются ключевые сущности.
  • LLM-сжатие: из каждого чанка извлечь N фактов; объединить без повтора.
  • Контекст-пересборка: «кластеризовать» факты по подпросятам (если вопрос сложный).

Сжатие уменьшает контекст и снижает вероятность «размывания» ответа.

Сборка подсказки (prompt assembly)

Подсказка — это контракт: формат ответа, стиль, список цитат с идентификаторами источников, запрет «выдумывать за пределами источников», условия молчания («если нет фактов — ответьте, что недостает данных»). Для структурированных задач задайте JSON-схему.

Минимальная заготовка:

  • Инструкции и тон.
  • Список выдержек вида [id: …, source: …, snippet: …].
  • Требование ссылаться на id и не вводить новых фактов.
  • Ограничение длины ответа.

Генерация и декодирование

Режимы декодирования (greedy/beam/top-p/top-k) влияют на стиль и риск «галлюцинаций». Для фактов — консервативные режимы. Экономить токены помогают KV-кэш и маршрутизация по сложности. Нюансы исполнения и оптимизации — см. стек инференса LLM и статью про инференс.

Пост-валидация, политика и безопасность

После генерации — автоматическая проверка:

  • Faithfulness/Attribution: содержит ли ответ факты из цитируемых фрагментов; нет ли новых утверждений.
  • Схема: соответствие JSON/табличному формату.
  • Политики: фильтры тематики/тональности, запрет PII, защита от prompt-injection из документов.
  • Ретраи/дополнительный шаг: при провале — запустить исправление (добавочный retrieval или уплотнение цитат).

Наблюдаемость, версии и стоимость

RAG-pipeline без наблюдаемости быстро деградирует. Обязательные артефакты:

  • Трейсинг: сквозной trace_id, логи кандидатов, параметры андер-индексов и декодера.
  • Версии: модель эмбеддингов, индекс, конфиги retrieval и формат подсказки.
  • Стоимость: цена/1k токенов ввода/вывода, доля кэша, P50/P95 по шагам.
  • Качество: Recall@k/NDCG@k, faithfulness, Citation@k, доля «безцитатных» ответов.

Таблица: ключевые метрики RAG-pipeline

Этап Метрики Цель
Поиск Recall@k, NDCG@k, MRR Найти релевантные фрагменты
Сжатие Δтокенов, покрытие фактов Экономить контекст без потерь
Генерация TTFT, токенов/сек, P95 UX и SLA
Верность Faithfulness, Citation@k Проверяемость ответа
Стоимость $/эпизод, $/1k токенов Держать бюджет
Стабильность Ошибки/ретраи, алерты Инцидент-менеджмент

12. Стоимость и производительность: где экономить

Рычаги экономии:

  • Chunking и фильтры: меньше «мусора» на вход ANN.
  • Гибрид: keyword как pre-filter уменьшает кандидатов.
  • Rerank: точнее top-k → меньше контекста.
  • Сжатие: короткие факты вместо длинных выдержек.
  • Маршрутизация: компактная модель по умолчанию, тяжёлая — по сигналам сложности.
  • Квантование: INT8/INT4 веса/кэш; особенно выгодно на длинных диалогах.

Таблица: влияние оптимизаций на стоимость (ориентиры)

Оптимизация Экономия токенов Влияние на P95 Риск
Pre-filter keyword 10–40% Потеря редких синонимов
Rerank top-50→top-5 20–60% ↑ умеренно Цена ранкера
Сжатие выдержек 30–70% Потеря нюансов
Маршрутизация моделей 20–50% Сложность оркестрации
Квантование ↓/≈ Точность на «краях»

Масштабирование и эксплуатация

  • Шардирование индексов: по языкам/домейнам/версиям; маршрутизация запроса к профилю.
  • Replica-read: чтение с реплик, отдельные профили для экспериментов.
  • Двойной индекс при миграции эмбеддингов; атомарное переключение конфигов.
  • Бэкапы и катастрофоустойчивость: горячие снимки индекса, резерв конфигов.
  • A/B и регресс-наборы: слепые сравнения перед выкладкой.

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

  • Источники: санкционированные реестры; лицензии и права использования.
  • ACL-фильтры: на уровне индекса, а не пост-фактум.
  • Prompt-injection: разделение инструкций и данных; строгий шаблон подсказки; «запрет на исполнение команд» из корпуса.
  • PII/секреты: анонимизация, гео-локальные требования, журналы доступа.

Чек-лист внедрения RAG-pipeline

  • Определите узкий сценарий и KPI (faithfulness, цена/эпизод, P95).
  • Соберите и очистите корпус, зафиксируйте схемы и права.
  • Настройте chunking и вычислите эмбеддинги; занесите метаданные.
  • Постройте индекс с фильтрами и шардированием; измерьте Recall@k/NDCG@k.
  • Включите гибрид (BM25+ANN) и переранжирование; зафиксируйте top-k=3–8.
  • Введите сжатие выдержек и строгий шаблон подсказки с цитатами/id.
  • Настройте декодирование и кэш; проверьте TTFT и токены/сек.
  • Реализуйте пост-валидацию (faithfulness/схема/политики) и ретраи.
  • Постройте наблюдаемость: трейсы, стоимость, алерты, отчёты.
  • Проведите A/B и готовьте план отката конфигов/индексов.

Анти-паттерны и как их избегать

Анти-паттерн Симптом Что делать
«Вектор — и точка» (без keyword) Падают редкие термины Включить гибрид и fusion
Одинаковый k=20 «на всё» Дорогой контекст, шум Жёсткий лимит k=3–8 + rerank
«Толстые» чанки Релевантность падает 700–900 ток., 15% overlap, A/B
Без цитирования Непроверяемые ответы Обязательные id-ссылки и атрибуция
Нет версионности Невоспроизводимость Логировать версии моделей/индексов
Один общий индекс Перемешивание доменов Шарды/профили и фильтры

Примеры интерфейсов между шагами

Откуда → Куда Вход Выход
Ингест → Индексация {doc_id, text, lang, ts, acl, meta} {chunk_id, text, meta}
Индексация → Retrieval {query_vec, filters, k} [(chunk_id, score, meta)]
Retrieval → Prompt {question, top_k} {prompt, [(id, source, snippet)]}
Генерация → Валидация {answer, citations} {ok, issues, fixed?}
Валидация → Ответ {answer*, citations} {final_answer}

Звёздочка * — ответ после возможного исправления.

Расширенные варианты RAG

  • Многошаговый RAG: последовательные уточнения, «детектив» по корпусу; полезно для сложных аналитических задач.
  • Ре-источники: при противоречиях — запросить дополнительные фрагменты и выдать сравнительную таблицу.
  • Доменные профили: отдельные индексы и веса для разных линий бизнеса; маршрутизация по языку/региону.
  • Инструментальный RAG: помимо выдержек, запуск внешних инструментов (таблицы/конвертеры) по контрактам.

FAQ

Зачем вообще RAG, если можно обучить большую модель? Потому что знания меняются, а бюджет не бесконечен. RAG обновляется данными, а не переобучением, и делает ответы проверяемыми.

Нужна ли всегда переранжировка? Если документы длинные и похожие — почти всегда. Rerank повышает точность top-k и экономит токены.

Каким должен быть размер k? Чаще 3–8. Выше — растёт шум и стоимость, ниже — рискуете упустить факт. Ищите баланс на A/B.

Как бороться с «галлюцинациями»? Требовать цитирования, жёстко ограничивать к выход за контекст, применять валидацию и ретраи с добавочным retrieval.

Как понять, что пайплайн стал хуже? Смотрите на Recall@k/NDCG@k, faithfulness, долю «безцитатных» ответов и P95. Внесите изменения — проверяйте A/B и регресс-набором.

Можно ли обойтись без keyword-поиска? Технически — да, но гибрид почти всегда стабильнее, особенно для терминов/артикулов.

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

  • Retrieval — извлечение релевантных фрагментов из индекса.
  • Chunking — разбиение документов на фрагменты перед индексацией.
  • Эмбеддинг — векторное представление фрагмента/запроса.
  • ANN-индекс — структура для быстрого приблизительного поиска соседей.
  • Гибридный поиск — объединение keyword и векторного поиска.
  • Переранжирование (rerank) — уточняющий ранжировщик для top-N кандидатов.
  • Сжатие выдержек — конденсация кандидатов до фактов.
  • Faithfulness/Attribution — верность ответов источникам и наличие цитат.
  • TTFT — время до первого токена в стриминге.
  • A/B-тест — онлайн-сравнение вариантов пайплайна.

См. также

Task Runner