Градиент.

RAG, который не врёт: гибридный поиск и переранжирование

Классический RAG из туториала — «нарезать на чанки, положить в векторную базу, взять top-5» — уверенно ломается на запросах с номерами, артикулами и аббревиатурами. Причина простая: эмбеддинг сглаживает редкие токены, и «ст. 14.2» перестаёт отличаться от «ст. 14.3».

Три шага, которые дали эффект

  1. Гибрид. Параллельно идём векторным поиском и BM25, затем сливаем результаты по Reciprocal Rank Fusion. Точные термины ловит BM25, смысловые совпадения — вектор.
  2. Переранжирование. Top-50 из гибрида прогоняем через кросс-энкодер и оставляем 6. Это самая дорогая часть по латентности и самая полезная по качеству.
  3. Отказ от ответа. Если переранжировщик не дал достаточного отрыва, модель обязана ответить «в найденных документах этого нет». Пустой ответ дешевле уверенной выдумки.

Замер

На наборе из 240 вопросов с известными ответами доля выдумок упала с 19% до 4%, а точность попадания источника выросла с 61% до 84%. Латентность выросла на 380 мс — это цена, которую я считаю оправданной.

Отдельно помогает хранение исходной структуры документа: заголовки разделов, нумерация, ссылки между частями. Чанк, вырванный из контекста заголовка, почти всегда отвечает не на тот вопрос.

Кирилл Астахов

ML-инженер, собираю и гоняю модели в проде. Пишу о том, что проверил руками: инференс, обучение, оценка качества. Замечания и вопросы — на hello@p.my01.ru.