Как вы оцениваете качество retrieval'а в RAG-системе?

Краткий тезис

Оценка качества retrieval в RAG — это многомерная задача. Нельзя полагаться только на одну метрику. Нужно использовать оффлайн-метрики (hit rate, MRR, recall@k, NDCG) для оценки поиска без LLM, и онлайн-метрики (faithfulness, answer relevance, context relevance) для оценки влияния retrieval на финальный ответ. Инструменты вроде RAGAS автоматизируют этот процесс.


1. Термин: Retrieval (поиск)

Что это Этап RAG, когда система ищет в векторной БД документы (чанки), релевантные запросу пользователя.

Почему важно оценивать retrieval

  • Если retrieval нашёл плохие документы → LLM не сможет дать хороший ответ (мусор на входе — мусор на выходе)
  • Если retrieval работает плохо, никакой LLM не спасёт
  • Оценка retrieval помогает понять, где узкое место: поиск или генерация

Термин «Gold standard» (золотой стандарт Вручную размеченный датасет, где для каждого запроса известны правильные (релевантные) документы. Нужен для оффлайн-метрик.


Часть 1: Оффлайн-метрики (без LLM)

Что это Метрики, которые считаются без вызова LLM, только на основе retrieval результатов и gold standard.

Зачем Быстро, дешево, позволяет итерироваться по retrieval без дорогих LLM-вызовов.

Термин «Оффлайн-метрики» (Offline metrics Считаются на статическом датасете, без реальных пользователей.


1.1 Hit Rate (HR@k)

Что это Доля запросов, для которых retrieval нашёл хотя бы один релевантный документ среди top-k результатов.

Формула

HR@k = (количество запросов с хотя бы одним релевантным документом в top-k) / (общее количество запросов)

Пример:

  • 100 запросов
  • Для 80 запросов в top-5 есть хотя бы один релевантный документ
  • HR@5 = 80 / 100 = 0.8 (80%)
ПорогИнтерпретация
0.9+Отлично (почти всегда есть релевантный документ)
0.7-0.9Хорошо (можно улучшать)
<0.7Плохо (retrieval часто не находит ничего)

Термин «Релевантный документ» Документ, который действительно отвечает на запрос пользователя (по мнению человека-аннотатора).

Когда использовать Первая метрика для проверки, что retrieval вообще что-то находит. Если HR низкий → проблемы с индексацией или эмбеддингами.


1.2 MRR (Mean Reciprocal Rank)

Что это Среднее арифметическое обратных рангов первого релевантного документа.

Формула

RR (Reciprocal Rank) для одного запроса = 1 / (позиция первого релевантного документа)

MRR = (сумма RR по всем запросам) / (количество запросов)

Пример:

ЗапросПозиция первого релевантногоReciprocal Rank
Запрос 11 место1/1 = 1.0
Запрос 23 место1/3 ≈ 0.333
Запрос 3не найден0

MRR = (1.0 + 0.333 + 0) / 3 ≈ 0.444

Термин «Обратный ранг» (Reciprocal Rank Если релевантный документ на первом месте → 1, на втором → 1/2 = 0.5, на третьем → 0.333, на десятом → 0.1.

ЗначениеИнтерпретация
0.8+Отлично (релевантный документ почти всегда на 1-2 месте)
0.5-0.8Хорошо
<0.5Плохо (релевантный документ глубоко в выдаче)

Когда использовать Когда важно не просто наличие релевантного документа, а его позиция. Пользователь вряд ли долистает до 10-го результата.


1.3 Recall@k

Что это Доля всех релевантных документов, попавших в top-k результатов.

Формула

Recall@k = (количество релевантных документов в top-k) / (общее количество релевантных документов в БД)

Пример:

  • На запрос в БД есть 5 релевантных документов
  • В top-10 нашлось 3 из них
  • Recall@10 = 3 / 5 = 0.6 (60%)

Важное отличие от Hit Rate

  • Hit Rate: хотя бы один релевантный документ нашёлся?
  • Recall@k: сколько из всех релевантных нашлось?
ЗначениеИнтерпретация
0.9+Отлично (нашли почти все релевантные)
0.7-0.9Хорошо
<0.7Много релевантных документов потеряно

Термин «Множественные релевантные документы» На один запрос может быть несколько правильных ответов. Например, "какие документы мне нужны для визы?" → 5 разных документов.

Когда использовать Когда на один запрос может быть несколько правильных ответов. RAG с несколькими источниками (например, юридические документы, научные статьи).


1.4 NDCG (Normalized Discounted Cumulative Gain)

Что это Метрика, которая учитывает порядок релевантности. Релевантный документ на 1-м месте лучше, чем на 10-м. Релевантные документы бывают разной степени важности (можно 3, 2, 1).

Термин «Graded relevance» (градированная релевантность Не просто "релевантно/не релевантно", а степень: 3 — очень релевантно, 2 — средне, 1 — слабо, 0 — не релевантно.

Формула (упрощённо

DCG@k = Σ (relevance_i / log2(i+1))
      i=1..k

NDCG@k = DCG@k / IDCG@k

где IDCG — идеальный DCG (если бы все релевантные документы стояли в правильном порядке).

Пример:

ПозицияРелевантностьВклад в DCG
133 / log2(2)= 3 / 1 = 3.0
222 / log2(3)= 2 / 1.585 = 1.26
311 / log2(4)= 1 / 2 = 0.5
400
522 / log2(6)= 2 / 2.585 = 0.77

DCG@5 = 3.0 + 1.26 + 0.5 + 0 + 0.77 = 5.53

Термин «Дисконтирование» (Discounting Чем дальше позиция, тем меньше вклад. Делим на log2(i+1), чтобы уменьшить важность низких позиций.

Значение NDCGИнтерпретация
0.9+Отлично (порядок почти идеальный)
0.7-0.9Хорошо
<0.7Проблемы с ранжированием

Когда использовать Когда нужно оценить качество ранжирования (порядок документов). Для RAG: если кросс-энкодер ранжирует результаты — NDCG покажет, насколько хорошо.


Сравнение оффлайн-метрик

МетрикаЧто измеряетНужен ли gold standardУчитывает порядокНужна graded relevance
Hit Rate@kНашёлся хоть один?ДаНетНет
MRRПозиция первого релевантногоДаДа (только первого)Нет
Recall@kСколько всех релевантных нашлосьДаНетНет
NDCG@kКачество порядка с учётом весовДаДаДа

Что использовать в production

  • Быстрая проверка Hit Rate@5 (легко интерпретировать)
  • Оценка ранжирования MRR@10
  • Множественные ответы Recall@10
  • Детальная оценка порядка NDCG@10

Часть 2: Онлайн-метрики (с LLM)

Что это Метрики, которые оценивают финальный ответ LLM, а не только retrieval. Нужен LLM (обычно GPT-4 или другая модель-судья) для оценки.

Зачем Можно иметь идеальный retrieval, но LLM может проигнорировать контекст или галлюцинировать.

Термин «LLM-as-a-judge» Использование одной LLM (например, GPT-4) для оценки ответов другой LLM.


2.1 Faithfulness (достоверность)

Что это Насколько ответ LLM соответствует информации из найденных документов. Ответ не должен содержать галлюцинаций (выдуманных фактов).

Как измеряется (RAGAS

  1. Разбить ответ LLM на отдельные утверждения (statements)
  2. Для каждого утверждения проверить, можно ли его подтвердить из retrieved context
  3. Доля подтверждённых утверждений = faithfulness

Пример:

Контекст (retrieved): "Компания была основана в 2010 году."
Ответ LLM: "Компания была основана в 2010 году. У неё 5000 сотрудников."

Утверждение 1: "Компания основана в 2010" → ✅ можно подтвердить
Утверждение 2: "У неё 5000 сотрудников" → ❌ не в контексте

Faithfulness = 1/2 = 0.5 (50%)

Термин «Галлюцинация» (Hallucination LLM выдумывает факты, которых нет в контексте.

ЗначениеИнтерпретация
0.9+Отлично (почти нет галлюцинаций)
0.7-0.9Хорошо
<0.7Много галлюцинаций

Когда использовать Всегда для production RAG Это самая важная метрика для доверия к системе.


2.2 Answer Relevance (релевантность ответа)

Что это Насколько ответ отвечает на заданный вопрос (не уходит в сторону, не отвечает на другой вопрос).

Как измеряется (RAGAS

  1. Сгенерировать N гипотетических вопросов из ответа (через LLM)
  2. Посчитать, насколько эти вопросы похожи на исходный вопрос (косинусное расстояние эмбеддингов)
  3. Усреднить similarity

Пример:

Вопрос: "Когда была основана компания?"
Ответ: "Компания производит программное обеспечение."

Гипотетические вопросы из ответа:
- "Что производит компания?" (эмбеддинг далёк от исходного)

Answer relevance = 0.2 (низкая)

Термин «Гипотетические вопросы» LLM генерирует, на какие вопросы мог бы отвечать данный ответ.

ЗначениеИнтерпретация
0.9+Отлично (ответ прямо по вопросу)
0.7-0.9Хорошо
<0.7Ответ не по существу

Когда использовать Для чат-ботов и поддержки. Важно, чтобы модель не уходила в сторону.


2.3 Context Relevance (релевантность контекста)

Что это Насколько найденные retrieval'ем документы релевантны запросу (без учёта ответа LLM).

Как измеряется (RAGAS

  1. Разбить каждый retrieved chunk на предложения
  2. Для каждого предложения проверить, нужно ли оно для ответа на вопрос
  3. Доля релевантных предложений во всех чанках = context relevance

Пример:

Вопрос: "Цена товара X?"
Retrieved chunk: "Товар X имеет красный цвет. Цена 1000 рублей. Доставка бесплатная."

Предложение 1: "Товар X красный" → ❌ не нужно для цены
Предложение 2: "Цена 1000 рублей" → ✅ нужно
Предложение 3: "Доставка бесплатная" → ❌ не нужно

Context relevance = 1/3 ≈ 0.33 (33%)
ЗначениеИнтерпретация
0.8+Отлично (контекст чистый, без мусора)
0.5-0.8Хорошо
<0.5Много шума в контексте

Когда использовать Для диагностики retrieval. Низкая context relevance → проблема в retrieval, даже если LLM хорошо отвечает.


Сравнение онлайн-метрик

МетрикаЧто измеряетНужен ли LLM-судьяКогда падает
FaithfulnessГаллюцинации?ДаМодель выдумывает
Answer RelevanceОтвет по делу?ДаМодель отвечает на другой вопрос
Context RelevanceКонтекст чист?ДаRetrieval принёс мусор

Часть 3: Инструменты для автоматической оценки

RAGAS (RAG Assessment)

Что это Open-source фреймворк для автоматической оценки RAG-систем. Использует LLM-as-a-judge.

Как использовать

from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevancy, context_relevancy

result = evaluate(
    dataset=dataset,  # вопросы + ответы + контекст
    metrics=[faithfulness, answer_relevancy, context_relevancy]
)
print(result)

Плюсы Бесплатно, open-source, поддерживает русский язык (через BGE-m3). Минусы Нужен свой LLM для оценки (или OpenAI API).

Термин «LLM-as-a-judge» Использование одной LLM для оценки другой. RAGAS использует этот подход.


TruLens

Что это Платформа для оценки и мониторинга LLM-приложений (от Truera).

Как использовать

from trulens_eval import TruChain, Feedback
from trulens_eval.feedback import Groundedness

grounded = Groundedness()
f_faithfulness = Feedback(grounded.groundedness_measure_with_cot_reasons)

tru = TruChain(rag_chain, feedbacks=[f_faithfulness])
tru.invoke("вопрос")

Плюсы Глубокий анализ галлюцинаций, интеграция с LangChain. Минусы Бесплатная версия ограничена, есть paid.


DeepEval

Что это Open-source фреймворк для оценки LLM (аналог Pytest для LLM).

Как использовать

from deepeval import evaluate
from deepeval.metrics import AnswerRelevancyMetric, FaithfulnessMetric

metric = AnswerRelevancyMetric(threshold=0.7)
test_cases = [...]
evaluate(test_cases, [metric])

Плюсы Похож на unit-тесты, CI/CD интеграция. Минусы Меньше RAG-специфичных метрик.


Сравнение инструментов

ИнструментOpen-sourceRAG-специфичныйПоддержка русскогоCI/CDСложность
RAGAS✅ Да✅ Да✅ (BGE-m3)Низкая
TruLens❌ Частично✅ ДаСредняя
DeepEval✅ Да❌ (общий)Низкая

Рекомендация Начинать с RAGAS (бесплатно, просто, подходит для русского).


Полный пайплайн оценки RAG

# 1. Подготовка gold standard (вручную или синтетически)
gold_dataset = [
    {
        "question": "Когда основана компания?",
        "ground_truth": ["2010 год"],  # правильный ответ
        "relevant_docs": ["doc1.pdf", "doc5.pdf"]  # ID релевантных документов
    }
]

# 2. Запуск RAG на тестовых вопросах
answers = []
retrieved_chunks = []
for q in gold_dataset:
    chunks = vectorstore.similarity_search(q.question, k=5)
    answer = llm.invoke(prompt.format(context=chunks, question=q.question))
    answers.append(answer)
    retrieved_chunks.append([chunk.metadata["id"] for chunk in chunks])

# 3. Оффлайн-метрики (нужны gold стандарт)
mrr = calculate_mrr(relevant_docs, retrieved_chunks)
recall = calculate_recall_at_k(relevant_docs, retrieved_chunks, k=5)

# 4. Онлайн-метрики (RAGAS)
from ragas import evaluate
dataset = Dataset.from_dict({
    "question": [q["question"] for q in gold_dataset],
    "answer": answers,
    "contexts": retrieved_chunks  # тексты, а не ID
})
scores = evaluate(dataset, metrics=[faithfulness, answer_relevancy])

print(f"MRR: {mrr:.3f}, Recall@5: {recall:.3f}")
print(f"Faithfulness: {scores['faithfulness']:.3f}")

Пет-проект для закрепления

Задача Создать оценочный пайплайн для RAG, собрать gold standard, посчитать метрики.

Инструменты Python, Qdrant (из вопроса 4), BGE-m3, Llama-3 (через Ollama), RAGAS

Шаги

  1. Собрать 50 вопросов по вашему домену (юриспруденция/медицина/технологии)
  2. Вручную разметить:
    • Для каждого вопроса — какие документы релевантны (gold standard для retrieval)
    • Какой правильный ответ (gold standard для генерации)
  3. Запустить RAG на этих 50 вопросах, собрать retrieved chunks и ответы
  4. Посчитать оффлайн-метрики (MRR, Recall@5)
  5. Посчитать онлайн-метрики через RAGAS (faithfulness, answer relevance)
  6. Написать отчёт: на каких вопросах система падает, почему

Ожидаемый результат Понимание слабых мест вашего RAG (retrieval не находит редкие документы? LLM галлюцинирует на сложные вопросы?)


Связь с другими вопросами

ВопросТема
1RAG архитектура (retrieval этап)
16Оценка качества генерации (faithfulness, answer relevance)
34Fine-tuning оценка
131-140LLM-as-a-judge подробно (bias, калибровка)
166-180Agentic evaluation (для агентов)
177Model drift (как метрики меняются со временем)

5. Как вы оцениваете качество retrieval'а в RAG-системе|5. Как вы оцениваете качество retrieval'а в RAG-системе|5. Как вы оцениваете качество retrieval'а в RAG-системе|5 полностью разобран. Переходим к вопросу 6, когда будете готовы|Вопрос 5 полностью разобран. Переходим к вопросу 6, когда будете готовы]]


Навигация