Урок курса
Метрики качества RAG: Recall, MRR и Faithfulness
Vector DB & RAG DeveloperRAG состоит минимум из поиска и генерации, поэтому одна субъективная оценка ответа не показывает причину сбоя. Сначала проверяют retrieval: попал ли релевантный документ в top-k. Recall@k измеряет долю нужных документов, найденных среди k результатов; Precision@k — долю релевантных среди выданных.
MRR учитывает позицию первого релевантного результата: чем он выше, тем лучше. Для вопросов с несколькими полезными фрагментами применяют nDCG или полноту по наборам evidence. Метрика требует размеченных запросов и релевантных документов, причём разметка должна учитывать права и актуальную версию данных.
Если нужного evidence нет в top-k, промпт генератора обычно не исправит систему.
Оценка ответа
Answer relevance показывает, отвечает ли текст на вопрос. Faithfulness или groundedness — подтверждаются ли утверждения переданным контекстом. Correctness сравнивает ответ с эталоном, а качество цитирования — ведут ли ссылки к фрагментам, которые действительно поддерживают тезис.
Эти свойства различаются: ответ может быть релевантным, но выдуманным; верным по общим знаниям, но не подтверждённым внутренними документами; faithful к устаревшему источнику, но неверным для текущей версии продукта.
Автоматический LLM-as-a-judge масштабирует оценку, но сам является моделью. Фиксируйте rubric, версию judge, примеры крайних случаев и регулярно сверяйте с людьми. Не позволяйте генератору оценивать самого себя без независимого контроля.
Полезный eval-набор
Соберите реальные вопросы из поиска, поддержки и аналитики, добавьте expected evidence и критерии ответа. Включите вопросы без ответа, неоднозначные запросы, разные формулировки, свежие документы и попытки выйти за права доступа. Делите набор на development и нетронутый test, чтобы не оптимизироваться под одни примеры.
При эксперименте меняйте один слой и сохраняйте разложение: retrieval metrics, generation metrics, latency, стоимость и abstention rate. Среднее скрывает провалы, поэтому режьте результаты по типу вопроса, источнику, языку и длине.
Production feedback дополняет offline eval, но клики не равны истинности. Хорошая RAG-система умеет корректно отказаться, если подтверждений нет; такой отказ может снизить apparent answer rate и одновременно повысить надёжность.
Recall@k, Precision@k и reciprocal rank на одном запросе
Для запроса размечены два релевантных документа A и C. Поиск вернул B, C, D. В top-3 найден один из двух нужных: Recall@3=0,5. Из трёх найденных релевантен один: Precision@3=1/3. Первый релевантный стоит вторым, поэтому reciprocal rank этого запроса равен 1/2.
relevant = {"A", "C"}
retrieved = ["B", "C", "D"]
hits = len(relevant.intersection(retrieved))
recall = hits/len(relevant)
precision = hits/len(retrieved)
first_rank = next((i for i,d in enumerate(retrieved,1) if d in relevant), None)
rr = 0 if first_rank is None else 1/first_rank
print(recall, round(precision, 3), rr)
assert recall == rr == 0.5
MRR получается усреднением reciprocal rank по запросам, а не по документам. Для запроса без релевантных документов Recall по этой формуле не определён: такие сценарии оценивают отдельно, например по корректности отказа. Если evidence найден, но ответ выдумывает условие, retrieval-метрики могут быть хорошими — нужно отдельно проверить генерацию и цитирование.
Продолжите разбор: Что такое RAG и как устроена RAG-система.
Задача 1
Какая метрика показывает, оказался ли нужный документ среди top-k результатов?
Продолжить с сохранением прогресса
Перейдите к уроку в учебном кабинете.
