Retriever — это компонент системы поиска/RAG, который по входному запросу возвращает набор релевантных фрагментов (чанков) из базы знаний. Ретривер не формирует ответ; его задача — быстро и максимально полно собрать контекст, который затем использует генеративная модель (reader).
Связанные термины: векторный индекс, контекстное окно, evals/метрики, top-k, top-p.
Роль в RAG-пайплайне (коротко)
- Запрос токенизируется и кодируется в вектор(ы) эмбеддинга.
- Ретривер обращается к индексу, отбирает top-k кандидатов и (опционально) применяет MMR/фильтры.
- Кандидаты передаются в модуль переранжирования (cross-encoder) и далее в LLM для генерации ответа.
- Качество ответа напрямую зависит от 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 и обрезайте «воду» заранее.
Мини-плейбук настройки
- Соберите golden-набор запросов с релевантами; договоритесь о метриках (Recall@k, MRR, p95).
- Выберите схему чанкинга и уберите дубликаты/шум.
- Постройте HNSW с базовыми параметрами; добейтесь Recall@10 ≥ 0.9.
- Включите MMR и гибрид с keyword для точных атрибутов.
- Добавьте re-rank на топ-L; замерьте выигрыш.
- Настройте фильтры по метаданным и A/B-схему top-k/L.
- Введите версионирование индекса и регламент пересборок.
- Согласуйте с генерацией ограничения по длине и формат цитирования источников.
Специальные случаи
- Код: ретривер по функциям/символам + 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 → больше нужных фактов в контексте → ниже риск галлюцинаций. Но фактичность ещё зависит от промпта и политики ответа.
