Человек спрашивает помощника: «Я оплатил годовую подписку, но через неделю решил отказаться. При каких условиях можно вернуть деньги?»

Поиск приносит три документа: инструкцию по отключению автопродления, правила возврата за месячный тариф и условия возврата за годовой. Во всех встречаются подписка, оплата и отмена. Но только один отвечает на заданный вопрос.

Это учебный пример вымышленного сервиса. Документы и условия ниже придуманы для объяснения поиска и не описывают правила 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 по реранкингу.

В нашем примере правила годовой подписки могли оказаться за пределами первоначальной выдачи. Тогда нужно разбирать первый этап: состав индекса, запрос, способ поиска и количество кандидатов.

Другие причины тоже требуют отдельных решений:

  • Неудачное разбиение. Срок «четырнадцать дней» остался в одном фрагменте, а условие «при отсутствии использования» — в другом. Нужно сохранять связанные условия вместе или добавлять соседний контекст.
  • Устаревшие данные. Поиск нашёл прошлую редакцию правил. Нужны обновление индекса и явный выбор действующей версии.
  • Права доступа. Подходящий по смыслу документ может быть закрыт для пользователя. Доступ проверяют отдельно и ограничивают набор кандидатов до передачи текста реранкеру и модели.
  • Неверный вывод. Правильный фрагмент передали, но генератор пропустил ограничение. Здесь нужно проверять сам ответ и его соответствие источнику.

Как понять, нужен ли реранкинг вашему поиску

Возьмите набор реальных вопросов: частые обращения, неоднозначные формулировки и случаи, где поиск уже ошибался. Добавьте вопросы, на которые в документах нет ответа. Для каждого заранее отметьте нужный фрагмент, действующую версию документа и обязательные условия правильного ответа.

Затем сравните две версии на одинаковых данных. В первой используйте исходный порядок кандидатов, во второй — порядок после реранкинга. Сохраните одинаковыми набор кандидатов, число фрагментов для генератора, модель и инструкцию к ней. Так будет проще увидеть эффект именно перестановки.

Проверяйте три вещи:

  1. Нужный фрагмент среди первых результатов. Заранее выберите глубину проверки — например, первые пять, если столько фрагментов получает модель. Отдельно отмечайте, был ли нужный текст вообще среди кандидатов: это позволяет отличить пропуск поиска от ошибки порядка.
  2. Правильность итогового ответа. Для вопроса о подписке проверьте тариф, срок, условие использования и ссылку на источник. Красивый текст без одного из этих пунктов не решает задачу. При отсутствии данных полезен честный ответ о нехватке информации.
  3. Время и стоимость всего ответа. Измеряйте путь от вопроса до готового ответа и учитывайте поиск, реранкинг и генерацию. Смотрите не только среднее время, но и медленные случаи.

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

Реранкинг имеет смысл, когда помогает чаще получать правильные ответы, а дополнительное ожидание и расходы приемлемы для вашей задачи. Если нужные документы регулярно отсутствуют среди кандидатов, начните с исправления поиска.

Качество ответа зависит не только от модели, которая пишет текст, но и от того, какие материалы ей нашли. Для следующей проверки возьмите один неудачный ответ своего помощника и посмотрите на переданные ему фрагменты: был ли там текст, из которого вообще можно было ответить правильно?

Поделиться материалом
Telegram