中文翻译暂不可用,显示俄语原文。

Как вы оцениваете качество генерации в RAG? Назовите 3 ключевые метрики.

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

Оценка качества генерации в RAG — это многомерная задача, потому что плохой ответ может быть следствием разных проблем: LLM могла нагаллюцинировать (выдумать факты), могла ответить не на вопрос (мимо цели) или могла получить плохой контекст (retrieval принёс мусор). Три ключевые метрики закрывают каждую из этих проблем: Faithfulness (достоверность — нет галлюцинаций), Answer Relevance (релевантность ответа — ответ по вопросу) и Context Relevance (релевантность контекста]] — retrieval хороший). Инструменты вроде RAGAS автоматизируют подсчёт этих метрик, используя LLM-судью (обычно GPT-4 или другую модель).

Ключевая идея Нельзя полагаться на одну метрику. Высокая Answer Relevance при низкой Faithfulness — это плохо (модель уверенно врёт). Высокая Faithfulness при низкой Answer Relevance — тоже плохо (модель честно говорит не то, что спросили).


1. Термин: Генерация в RAG

Что это Финальный этап RAG, когда LLM получает на вход:

  • Контекст (retrieved documents — найденные документы)
  • Вопрос пользователя (query)
  • Инструкцию (prompt, например: "Ответь на вопрос, используя только контекст")

И генерирует ответ.

Проблемы, которые могут возникнуть

ПроблемаПримерКакая метрика падает
ГаллюцинацияLLM добавляет факты, которых нет в контекстеFaithfulness
Не по вопросуLLM отвечает на другой вопрос или уходит в сторонуAnswer Relevance
Плохой контекстRetrieval принёс нерелевантные документыContext Relevance

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


2. Метрика 1: Faithfulness (достоверность, отсутствие галлюцинаций)

Что это Доля утверждений в ответе LLM, которые можно подтвердить информацией из контекста (retrieved documents). Это самая важная метрика в RAG, потому что галлюцинации подрывают доверие пользователей.

Термин «Галлюцинация» (Hallucination LLM генерирует факты, которых нет в контексте. Например, контекст не содержит информацию о цене, но LLM пишет «Цена 1000 рублей».

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

# Шаг 1: Разбить ответ на отдельные утверждения (statements)
response = "Компания была основана в 2010 году. У неё 5000 сотрудников. Она находится в Москве."
statements = [
    "Компания была основана в 2010 году",
    "У неё 5000 сотрудников",
    "Она находится в Москве"
]

# Шаг 2: Для каждого утверждения проверить, можно ли его подтвердить из контекста
context = "Компания была основана в 2010 году. Основатель — Иван Иванов."

# Утверждение 1: подтверждается ✅
# Утверждение 2: НЕТ в контексте ❌
# Утверждение 3: НЕТ в контексте ❌

# Шаг 3: Подсчёт
faithfulness = (1 подтверждённое) / (3 всего) = 0.33 (33%)

Формула

Faithfulness = (количество подтверждённых утверждений) / (общее количество утверждений в ответе)

Интерпретация

ЗначениеИнтерпретация
0.95+Отлично (почти нет галлюцинаций)
0.85-0.95Хорошо
0.70-0.85Средне (есть проблемы)
<0.70Плохо (много галлюцинаций, система ненадёжна)

Как это делает RAGAS (автоматически

from ragas.metrics import faithfulness
from ragas import evaluate

result = evaluate(dataset, metrics=[faithfulness])
# RAGAS внутри использует LLM для разбиения на утверждения и проверки

Термин «NLI (Natural Language Inference)» Некоторые реализации faithfulness используют NLI-модель (например, DeBERTa-NLI), которая определяет, следует ли утверждение из контекста (entailment), противоречит ли (contradiction) или нейтрально (neutral).


3. Метрика 2: Answer Relevance (релевантность ответа)

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

Пример низкой Answer Relevance

Вопрос: "Сколько стоит iPhone 15?"
Ответ: "iPhone 15 был выпущен в сентябре 2024 года." (верно, но не отвечает на вопрос о цене)

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

# Шаг 1: Из ответа генерируем гипотетические вопросы
question = "Сколько стоит iPhone 15?"
answer = "iPhone 15 стоит от 799 долларов в США."

# LLM генерирует N (например, 3) вопросов, на которые этот ответ подходит:
generated_questions = [
    "Какова цена iPhone 15?",
    "В каком ценовом диапазоне находится iPhone 15?",
    "Сколько долларов стоит iPhone 15?"
]

# Шаг 2: Вычисляем семантическое сходство между исходным вопросом и сгенерированными
similarities = [
    cosine_similarity(embed(question), embed(q)) 
    for q in generated_questions
]

# Шаг 3: Answer relevance = среднее арифметическое similarities
answer_relevance = sum(similarities) / len(similarities)

Формула (RAGAS

Answer Relevance = (1/N) * Σ cos_sim(emb(question), emb(generated_question_i))

где generated_question_i — вопросы, сгенерированные LLM из ответа.

Интерпретация

ЗначениеИнтерпретация
0.95+Отлично (ответ точно по вопросу)
0.85-0.95Хорошо
0.70-0.85Средне (ответ немного не в тему)
<0.70Плохо (ответ не по вопросу)

Важный нюанс Answer Relevance ничего не говорит о правильности ответа. Она измеряет только смысловое пересечение вопроса и ответа.


4. Метрика 3: Context Relevance (релевантность контекста)

Что это Насколько найденные retrieval'ем документы (контекст) релевантны запросу пользователя. Это метрика качества retrieval, а не LLM, но она критична для RAG, потому что плохой контекст = плохой ответ (мусор на входе — мусор на выходе).

Пример низкой Context Relevance

Вопрос: "Какая цена iPhone 15?"
Retrieved context: ["iPhone 15 имеет 48-мегапиксельную камеру", 
                   "iPhone 15 работает на процессоре A17"]
→ Ни один документ не говорит о цене

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

# Шаг 1: Разбить retrieved context на предложения
context = ["iPhone 15 стоит от 799 долларов.", 
           "iPhone 15 имеет 48-МП камеру.", 
           "Доставка осуществляется бесплатно."]
sentences = [
    "iPhone 15 стоит от 799 долларов.",
    "iPhone 15 имеет 48-МП камеру.",
    "Доставка осуществляется бесплатно."
]

# Шаг 2: Для каждого предложения оценить, нужно ли оно для ответа на вопрос
question = "Сколько стоит iPhone 15?"

# LLM оценивает каждое предложение:
# - S1 (цена) → полезно (relevance=1)
# - S2 (камера) → не полезно (relevance=0)
# - S3 (доставка) → не полезно (relevance=0)

# Шаг 3: Context relevance = доля полезных предложений
context_relevance = 1 / 3 = 0.33 (33%)

Формула

Context Relevance = (количество предложений в контексте, полезных для ответа) / (общее количество предложений в контексте)

Интерпретация

ЗначениеИнтерпретация
0.90+Отлично (контекст чистый, нет мусора)
0.70-0.90Хорошо
0.50-0.70Средне (много шума)
<0.50Плохо (retrieval приносит много мусора)

Когда низкая Context Relevance

  • Плохая embedding-модель
  • Плохой chunking (слишком большие чанки с мусором)
  • Неправильный top-k (слишком много чанков)
  • Отсутствие reranking

5. Три метрики вместе: что они показывают

СценарийFaithfulnessAnswer RelevanceContext RelevanceДиагноз
Идеальная система0.950.950.95Всё отлично
LLM галлюцинирует0.600.900.90LLM добавляет своё — нужен better prompting или fine-tuning
LLM отвечает не на вопрос0.900.600.90Prompt плохой — перепишите инструкцию
Retrieval плохой0.900.900.40Проблема в поиске — лучше embedding, chunking
Retrieval плохой + LLM галлюцинирует0.600.900.40Комбинированная проблема
Retrieval хороший, но LLM не использует контекст0.700.850.90LLM игнорирует контекст — fine-tuning

6. Инструменты для расчёта метрик

6.1 RAGAS (RAG Assessment)

Что это Open-source фреймворк для автоматической оценки RAG-систем.

Установка

pip install ragas

Использование

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

# Данные: вопросы, ответы LLM, контекст (retrieved chunks)
data = {
    "question": ["Сколько стоит iPhone 15?", "Какая камера у iPhone 15?"],
    "answer": ["iPhone 15 стоит от 799 долларов.", "48 мегапикселей"],
    "contexts": [
        ["iPhone 15 стоит 799 долларов", "iPhone 15 имеет A17 процессор"],
        ["iPhone 15 имеет 48-МП камеру", "iPhone 15 весит 180 грамм"]
    ]
}

dataset = Dataset.from_dict(data)
result = evaluate(dataset, metrics=[faithfulness, answer_relevancy, context_relevancy])

print(result)
# {'faithfulness': 0.95, 'answer_relevancy': 0.92, 'context_relevancy': 0.88}

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


6.2 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("Сколько стоит iPhone 15?")

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


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

Задача Оценить свою RAG-систему по трём метрикам с помощью RAGAS.

Инструменты Python, RAGAS, любой LLM (можно локальный, например, Ollama)

Шаги

  1. Подготовить датасет из 50-100 примеров (вопрос, ответ, retrieved context)
  2. Запустить RAGAS с метриками faithfulness, answer_relevancy, context_relevancy
  3. Проанализировать, где метрики низкие:
    • Низкий context_relevancy → проблемы с retrieval
    • Низкий faithfulness → LLM галлюцинирует
    • Низкий answer_relevancy → LLM отвечает не на вопрос
  4. Улучшить систему:
  5. Запустить оценку снова, увидеть улучшение

Ожидаемый результат Вы получите численные метрики для своей RAG-системы и поймёте, куда направить усилия по оптимизации.


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

ВопросТема
5Оценка retrieval (дополняет context relevance)
7Оптимизация latency (метрики помогают не ухудшить качество)
17Уменьшение галлюцинаций (faithfulness)
131-140LLM-as-Judge подробно (bias, калибровка)
134Faithfulness в production (RAGAS)

16. Как вы оцениваете качество генерации в RAG. Назовите 3 ключевые метрики.|16. Как вы оцениваете качество генерации в RAG. Назовите 3 ключевые метрики.|16. Как вы оцениваете качество генерации в RAG. Назовите 3 ключевые метрики.|16 полностью разобран. Переходим к вопросу 17, когда будете готовы|Вопрос 16 полностью разобран. Переходим к вопросу 17, когда будете готовы]]


Навигация