RAG, который не врёт: гибридный поиск и переранжирование
Классический RAG из туториала — «нарезать на чанки, положить в векторную базу, взять top-5» — уверенно ломается на запросах с номерами, артикулами и аббревиатурами. Причина простая: эмбеддинг сглаживает редкие токены, и «ст. 14.2» перестаёт отличаться от «ст. 14.3».
Три шага, которые дали эффект
- Гибрид. Параллельно идём векторным поиском и BM25, затем сливаем результаты по Reciprocal Rank Fusion. Точные термины ловит BM25, смысловые совпадения — вектор.
- Переранжирование. Top-50 из гибрида прогоняем через кросс-энкодер и оставляем 6. Это самая дорогая часть по латентности и самая полезная по качеству.
- Отказ от ответа. Если переранжировщик не дал достаточного отрыва, модель обязана ответить «в найденных документах этого нет». Пустой ответ дешевле уверенной выдумки.
Замер
На наборе из 240 вопросов с известными ответами доля выдумок упала с 19% до 4%, а точность попадания источника выросла с 61% до 84%. Латентность выросла на 380 мс — это цена, которую я считаю оправданной.
Отдельно помогает хранение исходной структуры документа: заголовки разделов, нумерация, ссылки между частями. Чанк, вырванный из контекста заголовка, почти всегда отвечает не на тот вопрос.