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

Эталонные вопросы

TL;DR

Оценка поиска строится на эталонном наборе: вопросы, для каждого указан документ и фрагмент, где лежит правильный ответ. Без такого набора любое улучшение остаётся на уровне впечатлений.

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

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

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

Прототип, на котором удобно прогонять такой набор, описан в материале RAG Python: минимальный прототип и тест цитат. А подготовка самого корпуса, от которой зависит качество поиска, разобрана в статье RAG данные: подготовка корпуса и обновление.

Что измерять

Метрик в литературе много, но для практики хватает нескольких простых отметок. Их ставят по каждому вопросу вручную или полуавтоматически, а потом считают долю по набору.

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

ОтметкаВопрос к результатуЧто показывает
Найден ли источникЕсть ли нужный фрагмент среди возвращённыхБазовую полноту поиска
ПозицияНа каком месте оказался нужный фрагментКачество сортировки
Чистота выдачиСколько возвращённых фрагментов относится к делуШум, который попадёт к модели
ПокрытиеДостаточно ли фрагментов для полного ответаПодходит ли число возвращаемых кусков
СвежестьИз действующей ли версии взят фрагментСостояние корпуса, модель тут ни при чём

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

Нулевая выдача

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

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

  • Порог сходства: слишком мягкий пропускает случайные фрагменты, слишком строгий режет верные.
  • Лексика вопроса: сотрудник использует жаргон, а в документах формальные термины, и векторы расходятся.
  • Пробел в корпусе: ответа действительно нет, и система обязана признать это.
  • Ошибка разбиения: нужная мысль разрезана на две части, и ни одна половина на вопрос непохожа.
  • Несовпадение языков: вопрос на одном языке, документ на другом, а модель эмбеддингов слаба в обоих.

Пустая выдача иногда оказывается правильным результатом, и приучить систему честно молчать так же важно, как научить её находить. Для каждого вопроса с нулевой выдачей записывайте причину из этого списка. Через неделю накопится статистика, и станет видно, что чинить в первую очередь: порог, словарь синонимов, разбиение или сам корпус. Для вопросов, на которые ответа в корпусе нет, правильной реакцией считается честное «в документах ответа найти нельзя».

Корректировка индекса

Исправление поиска идёт по одной гипотезе за раз. Менять сразу модель, порог и размер фрагмента значит потерять понимание того, что помогло.

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

Фиксируйте кроме отметок ещё и конкретные примеры сбоев: вопрос, что вернул поиск, что ожидалось. Такие примеры убедительнее любой таблицы, когда нужно объяснить руководству, зачем тратить время на доработку, и пригодятся как тесты для будущих версий системы.

Выбор модели эмбеддингов тоже проверяется этим способом: пример сравнения для русскоязычных документов описан в статье Qwen3 Embedding: поиск по корпоративным документам, а гибридный поиск и другие приёмы собраны в материале про LangChain RAG.

● Discovery · 1 час · бесплатно

Есть ли у вас набор вопросов для измерения качества поиска?

Прийти на Discovery →

Контроль после изменений

Поиск портится тихо: корпус растёт, документы обновляются, модель эмбеддингов меняется. Без регулярной проверки вы узнаёте об этом по жалобам пользователей, цифр у вас нет.

// условие допуска

Любое изменение корпуса, модели или параметров поиска проходит через прогон эталонного набора. Если отметки ухудшились, изменение откатывается или дорабатывается до выхода к пользователям.

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

  • Эталонный набор живёт рядом с кодом и меняется через ревью.
  • Новые типичные вопросы пользователей, на которых система ошиблась, добавляются в набор.
  • Результаты каждого прогона хранятся по датам, чтобы была видна динамика.
  • За набор отвечает назначенный человек, коллективная ответственность тут размывается.

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

Частые вопросы

Почему поиск в RAG оценивают отдельно от ответа?
Если нужный фрагмент пропущен, ответ модели исправить невозможно, а если найден, причина плохого ответа в другом месте. Раздельная оценка показывает, где ломается цепочка.
Что такое эталонный набор вопросов?
Список реальных вопросов, для каждого из которых указан документ и фрагмент с правильным ответом. Он служит и для первой проверки, и для контроля после изменений.
Что делать при нулевой выдаче?
Записать причину: порог сходства, лексика вопроса, пробел в корпусе, ошибка разбиения или язык. По накопленной статистике выбрать, что чинить первым.
Как исправлять поиск, если оценка показала сбои?
Менять по одной гипотезе за раз, пересобирать затронутую часть индекса и сравнивать результат тем же набором вопросов по тем же отметкам.
Как часто проверять качество поиска?
После любого изменения корпуса, модели или параметров, а также по расписанию, потому что корпус растёт и качество тихо падает.