Retriever — компонент извлечения в RAG: что это, какие бывают и как настраивать

Retriever — это компонент системы поиска/RAG, который по входному запросу возвращает набор релевантных фрагментов (чанков) из базы знаний. Ретривер не формирует ответ; его задача — быстро и максимально полно собрать контекст, который затем использует генеративная модель (reader).

Retriever — компонент извлечения в RAG: что это, какие бывают и как настраивать

Связанные термины: векторный индекс, контекстное окно, evals/метрики, top-k, top-p.

Роль в RAG-пайплайне (коротко)

  1. Запрос токенизируется и кодируется в вектор(ы) эмбеддинга.
  2. Ретривер обращается к индексу, отбирает top-k кандидатов и (опционально) применяет MMR/фильтры.
  3. Кандидаты передаются в модуль переранжирования (cross-encoder) и далее в LLM для генерации ответа.
  4. Качество ответа напрямую зависит от recall ретривера и «чистоты» собранного контекста.

Типы ретриверов

Класс Идея Плюсы Когда уместен
Keyword/символьные (BM25, boolean) Точное совпадение слов/фраз Отлично ловят коды, даты, тикеры; быстрые Регламенты, лог-коды, точные запросы
Dense (bi-encoder) Семантическая близость по эмбеддингам Находит перефразирования; хорошая полнота Обзоры, вопросы на естественном языке
Multi-vector (ColBERT-подход) Несколько векторов на документ/терм Выше recall на «мелких фактах» Тонкие ответы, FAQ, справки
Гибрид (keyword + dense) Комбинация сигналов/слияние рангов Лучший общий баланс Универсальные ассистенты/порталы
Специализированные Ретриверы для кода/таблиц/графов Доменные преимущества Код-базы, схемы БД, каталоги

Техническая опора для dense/multi-vector — векторные индексы: HNSW, IVF, PQ/OPQ, DiskANN и др.

Метрики качества (что мерить)

  • Recall@k — доля «истинно релевантных» фрагментов среди top-k кандидатов.
  • Precision@k — доля релевантных в отобранных.
  • MRR / NDCG — ранговые метрики (важно, где именно в списке находится релевант).
  • Latency p50/p95/p99 — стабильность времени ответа.
  • Для связки с генерацией добавляют faithfulness/citation-precision (см. evals).

Чанкинг и подготовка базы

Качество ретрива начинается до индексации:

  • Чанки 400–1200 токенов с перекрытием 50–150: баланс полноты и шума.
  • Убирайте дубликаты, навигационные блоки, «воду» — иначе падают recall и разнообразие.
  • Нормализуйте заголовки, добавляйте метаданные (язык, дата, тип), чтобы потом фильтровать результаты.
  • Для кода/таблиц — отдельная схема нарезки: по функциям/классам, по строкам с примерами.

Тюнинг ретривера: основные ручки

Параметр Что делает Подсказки
top-k Сколько кандидатов вернуть Начните с 20–50; для тонких фактов поднимайте до 100 с последующим переранжированием
MMR Уменьшает дубли, повышает разнообразие Полезен при «водянистых» коллекциях; держите λ в 0.3–0.7
Фильтры Сужают область поиска (метаданные) Язык, дата, раздел; ускоряет и повышает precision
Query expansion Расширяет запрос синонимами/починкой опечаток Только если не распухает шум; храните логи влияния
Re-rank Кросс-энкодер для топ-L кандидатов L=50–200; ускоряет p95, если LLM потом читает лишь 5–10 чанков

Для dense-поиска важны настройки индекса (см. vector index): ef_search/M (HNSW), nlist/nprobe (IVF), параметры PQ.

Гибридный поиск: как «свести» сигналы

  • RRF (Reciprocal Rank Fusion): объединение рангов keyword и dense.
  • Взвешивание скорингов: нормализовать и суммировать с весами (подбираются на dev-наборе).
  • Двухступенчатый маршрут: keyword-фильтр → dense-ретривер на уменьшенном пуле → переранжирование.

Гибрид — дефолт для ассистентов: keyword ловит коды/даты, dense — смысловые перефразы.

Как ретривер влияет на генерацию

  • Чем выше recall, тем меньше модель «додумывает» — ниже риск галлюцинаций.
  • Меньший шум = меньше токенов контекста, экономнее KV-кэш и надёжнее цитирование.
  • Ретривер должен давать «короткие и чистые» фрагменты (без мусора), иначе LLM тратит окно впустую (см. контекстное окно).

Эксплуатация и жизненный цикл

  • Версионирование эмбеддингов: сменили модель эмбеддингов — строите новый индекс (не «доваривать» в старый).
  • Upsert/удаления: планируйте *тумбстоуны* и периодическую компакцию/пересборку.
  • Кэширование префикса: общие инструкции/шаблоны — через prefill cache, чтобы разгрузить префилл.
  • Мониторинг: Recall@k, p95, доля дублей, «дрейф» качества после релизов контента/эмбеддингов.
  • Конфигурации по доменам: для разных разделов — разные ретриверы/индексы и свои гиперпараметры.

Частые ошибки (анти-паттерны)

  • «Один индекс на всё» — фильтры ломают latency, качество пляшет. Делите по коллекциям/неймспейсам.
  • «Гоним только dense» — теряете точные совпадения (тикеры, артикулы). Делайте гибрид.
  • «top-k=5 и всё» — низкий recall → LLM выдумывает. Сначала высокий top-k, потом re-rank.
  • «Смешиваем эмбеддинги разных моделей» — топология рушится; используйте отдельные индексы/версии.
  • «Нет дедупликации» — выдача однотипных чанков, падает MMR/разнообразие.
  • «Переранжирование читает сотни чанков» — съедите бюджет задержки; ограничивайте L и обрезайте «воду» заранее.

Мини-плейбук настройки

  1. Соберите golden-набор запросов с релевантами; договоритесь о метриках (Recall@k, MRR, p95).
  2. Выберите схему чанкинга и уберите дубликаты/шум.
  3. Постройте HNSW с базовыми параметрами; добейтесь Recall@10 ≥ 0.9.
  4. Включите MMR и гибрид с keyword для точных атрибутов.
  5. Добавьте re-rank на топ-L; замерьте выигрыш.
  6. Настройте фильтры по метаданным и A/B-схему top-k/L.
  7. Введите версионирование индекса и регламент пересборок.
  8. Согласуйте с генерацией ограничения по длине и формат цитирования источников.

Специальные случаи

  • Код: ретривер по функциям/символам + dense по комментариям; гибрид обязателен.
  • Таблицы: храните заголовки и единицы измерения в метаданных; ретривер учитывает колонки.
  • Мультимодальность: для изображений/аудио — свой эмбеддинг и индекс; гибрид с текстовыми описаниями.

FAQ

Ретривер и переранжировщик — это одно и то же?

Нет. Ретривер быстро собирает кандидатов, переранжировщик (cross-encoder) точно сортирует верхушку списка. Они дополняют друг друга.

Как выбрать top-k?

Отталкивайтесь от recall на dev-сете и бюджета задержки. Чаще: k=20–50 на ретривере и L=50–200 на переранжировании с выдачей 5–10 финальных чанков.

Зачем гибрид, если dense уже «понимает смысл»?

Dense плохо ловит жёсткие идентификаторы (даты, артикулы, хэши). Гибрид сокращает промахи и повышает доверие.

Расти ли до multi-vector (ColBERT)?

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

Поможет ли поднять top-k против галлюцинаций LLM?

Опосредованно. Выше recall → больше нужных фактов в контексте → ниже риск галлюцинаций. Но фактичность ещё зависит от промпта и политики ответа.

См. также

Task Runner