Почему ИИ находит похожие документы, но не тот, который нужен
НУЖНОЕ
Человек спрашивает помощника: «Я оплатил годовую подписку, но через неделю решил отказаться. При каких условиях можно вернуть деньги?»
Поиск приносит три документа: инструкцию по отключению автопродления, правила возврата за месячный тариф и условия возврата за годовой. Во всех встречаются подписка, оплата и отмена. Но только один отвечает на заданный вопрос.
Это учебный пример вымышленного сервиса. Документы и условия ниже придуманы для объяснения поиска и не описывают правила BebrGPT.
Если первым в контекст попадёт документ об автопродлении, помощник может посоветовать отключить будущие списания. Ответ получится связным, но человек спрашивал о деньгах, которые уже заплатил. Даже сильная модель может ошибиться, если ей дали неподходящий источник.
Как поиск собирает похожие документы
В системах поиска по документам текст часто заранее делят на фрагменты. Для каждого фрагмента модель вычисляет эмбеддинг — вектор, то есть набор чисел, представляющий особенности его содержания. Запрос пользователя тоже превращается в вектор в совместимом пространстве.
Поисковый индекс позволяет быстро найти близкие векторы. Поэтому вопрос «как вернуть оплату» может привести к тексту о «возмещении стоимости», хотя слова различаются. Такой принцип описан в руководстве Sentence Transformers по семантическому поиску.
На первом этапе важно собрать кандидатов — фрагменты, среди которых может оказаться ответ. Но близость по смыслу не гарантирует соответствия конкретному вопросу. Годовая и месячная подписки похожи по теме, а правила возврата у них могут различаться.
Поиск по словам тоже полезен. Точное название тарифа, артикул товара или номер договора иногда важнее общего смысла. Полнотекстовый поиск учитывает совпадения слов; для строгого совпадения идентификатора можно дополнительно использовать фильтр по отдельному полю.
Векторный и полнотекстовый поиск можно объединять: каждый собирает кандидатов, затем результаты сводят в общую выдачу. Это называют гибридным поиском. Один из вариантов такого подхода показан в документации turbopuffer.
Что делает реранкер
Реранкер получает запрос и уже найденные фрагменты, оценивает их соответствие вопросу и меняет порядок выдачи. Он работает с ограниченным набором кандидатов.
Распространённый вариант — модель типа cross-encoder: она рассматривает вопрос и фрагмент вместе и выдаёт оценку релевантности. Так можно учитывать связь между конкретной формулировкой вопроса и содержанием текста. Этот подход описан в руководстве Sentence Transformers «Retrieve & Re-Rank».
Вернёмся к нашему примеру. Допустим, поиск расположил документы в таком порядке:
| Документ и его содержание | До | После | Что важно для вопроса |
|---|---|---|---|
| Отключение автопродления: как остановить следующее списание | 1 | 3 | Помогает управлять подпиской, но не объясняет возврат уже внесённой оплаты. |
| Возврат за месячный тариф: обращение в течение трёх дней | 2 | 2 | Описывает возврат денег, но относится к другому тарифу. |
| Возврат за годовой тариф: обращение в течение четырнадцати дней при отсутствии использования | 3 | 1 | Совпадают тип подписки и действие; есть срок и дополнительное условие. |
Документ о годовой подписке должен подняться выше, потому что отвечает сразу на несколько частей вопроса: какой тариф оплачен, что хочет сделать человек и когда он обратился.
Теперь у модели есть материал для полезного ответа: «В правилах указаны четырнадцать дней и отсутствие использования. Неделя укладывается в срок, но нужно уточнить, пользовались ли вы сервисом». Она может показать источник и задать недостающий вопрос.
Реранкер не пишет этот ответ и не подтверждает право на возврат. Его задача — помочь выбрать материал. Он тоже может ошибиться: желаемый порядок нужно проверять на реальных вопросах.
Где в этой схеме turbopuffer
turbopuffer — база для векторного и полнотекстового поиска, а не синоним реранкера. Она хранит и индексирует данные, чтобы находить кандидатов; её поисковые возможности перечислены в официальной документации.
Типовая схема ответа по документам выглядит так:
В такой схеме turbopuffer может обеспечивать поиск кандидатов. Для следующего этапа нужна оценка их соответствия вопросу. В актуальном API turbopuffer есть и встроенный вызов моделей реранкинга: сервис передаёт им кандидатов и возвращает переупорядоченные результаты. Поэтому два логических этапа могут выполняться через один API.
Здесь показан общий способ построения поиска, а не подтверждённая архитектура BebrGPT. Базовый принцип генерации с опорой на найденные материалы мы разобрали в статье «Что такое RAG — на примере папки с документами».
Сколько стоит более точный отбор
Дополнительная оценка требует вычислений: реранкинг добавляет задержку и стоимость обработки. Они зависят от модели, числа кандидатов и длины фрагментов; эти факторы отмечены и в ограничениях реранкинга turbopuffer.
Чем больше кандидатов, тем больше работы у реранкера. Зато слишком узкая первоначальная выдача может вообще не содержать ответа. Баланс приходится подбирать под свои документы и допустимое время ожидания.
Не каждому запросу нужен отдельный реранкинг. Если человек указал уникальный номер договора и поиск сразу нашёл нужный пункт, дополнительная оценка может почти ничего не изменить. При вопросах с несколькими условиями и похожими документами польза потенциально выше. Это гипотеза для проверки на ваших данных.
Какие ошибки перестановка не исправит
Если нужный документ вообще не попал в кандидаты, реранкер его не вернёт. Он может изменить порядок только тех фрагментов, которые получил. Это ограничение прямо описано в документации turbopuffer по реранкингу.
В нашем примере правила годовой подписки могли оказаться за пределами первоначальной выдачи. Тогда нужно разбирать первый этап: состав индекса, запрос, способ поиска и количество кандидатов.
Другие причины тоже требуют отдельных решений:
- Неудачное разбиение. Срок «четырнадцать дней» остался в одном фрагменте, а условие «при отсутствии использования» — в другом. Нужно сохранять связанные условия вместе или добавлять соседний контекст.
- Устаревшие данные. Поиск нашёл прошлую редакцию правил. Нужны обновление индекса и явный выбор действующей версии.
- Права доступа. Подходящий по смыслу документ может быть закрыт для пользователя. Доступ проверяют отдельно и ограничивают набор кандидатов до передачи текста реранкеру и модели.
- Неверный вывод. Правильный фрагмент передали, но генератор пропустил ограничение. Здесь нужно проверять сам ответ и его соответствие источнику.
Как понять, нужен ли реранкинг вашему поиску
Возьмите набор реальных вопросов: частые обращения, неоднозначные формулировки и случаи, где поиск уже ошибался. Добавьте вопросы, на которые в документах нет ответа. Для каждого заранее отметьте нужный фрагмент, действующую версию документа и обязательные условия правильного ответа.
Затем сравните две версии на одинаковых данных. В первой используйте исходный порядок кандидатов, во второй — порядок после реранкинга. Сохраните одинаковыми набор кандидатов, число фрагментов для генератора, модель и инструкцию к ней. Так будет проще увидеть эффект именно перестановки.
Проверяйте три вещи:
- Нужный фрагмент среди первых результатов. Заранее выберите глубину проверки — например, первые пять, если столько фрагментов получает модель. Отдельно отмечайте, был ли нужный текст вообще среди кандидатов: это позволяет отличить пропуск поиска от ошибки порядка.
- Правильность итогового ответа. Для вопроса о подписке проверьте тариф, срок, условие использования и ссылку на источник. Красивый текст без одного из этих пунктов не решает задачу. При отсутствии данных полезен честный ответ о нехватке информации.
- Время и стоимость всего ответа. Измеряйте путь от вопроса до готового ответа и учитывайте поиск, реранкинг и генерацию. Смотрите не только среднее время, но и медленные случаи.
Разбирайте и улучшения, и ухудшения: реранкер может опустить полезный фрагмент. Если вы подбирали настройки на одном наборе вопросов, проверьте результат на другом, который не участвовал в подборе.
Реранкинг имеет смысл, когда помогает чаще получать правильные ответы, а дополнительное ожидание и расходы приемлемы для вашей задачи. Если нужные документы регулярно отсутствуют среди кандидатов, начните с исправления поиска.
Качество ответа зависит не только от модели, которая пишет текст, но и от того, какие материалы ей нашли. Для следующей проверки возьмите один неудачный ответ своего помощника и посмотрите на переданные ему фрагменты: был ли там текст, из которого вообще можно было ответить правильно?