RAG Метрики¶
Eval AI Library предоставляет полный набор метрик для оценки систем Retrieval-Augmented Generation (RAG). Эти метрики позволяют объективно измерить качество различных аспектов RAG-пайплайна -- от релевантности ответов до фактологической достоверности и качества поиска.
RAG-система состоит из двух ключевых компонентов: ретривер (поисковый модуль, который находит релевантные фрагменты из базы знаний) и генератор (языковая модель, которая формирует ответ на основе найденного контекста). Каждый из этих компонентов может работать некорректно, и задача метрик -- выявить слабые места на каждом этапе.
Доступные метрики¶
| Метрика | Что измеряет | Вызовы LLM | Порог по умолчанию |
|---|---|---|---|
| Релевантность ответа | Насколько ответ соответствует намерению пользователя | 4 | 0.6 |
| Точность ответа | Насколько точно ответ совпадает с эталонным | 0 | 0.6 |
| Фактологичность | Фактическая согласованность с контекстом поиска | 3 | 0.7 |
| Релевантность контекста | Насколько найденный контекст поддерживает вопрос | 3 | 0.6 |
| Точность контекста | Точность ранжирования найденных фрагментов | N на чанк | 0.7 |
| Полнота контекста | Покрытие эталонного ответа найденным контекстом | 2 | 0.7 |
| Детекция предвзятости | Предвзятость и дискриминация в ответах AI | 1 | 0.8 |
| Детекция токсичности | Уровень токсичности в ответах AI | 1 | 0.7 |
Как работает оценка RAG¶
Каждая метрика оценивает определённый аспект RAG-пайплайна. На диаграмме ниже показано, какие метрики применяются к каким компонентам системы:
graph TD
Q["Вопрос (input)"] --> R[Ретривер]
R --> C["Контекст (retrieval_context)"]
C --> G[Генератор LLM]
Q --> G
G --> A["Ответ (actual_output)"]
subgraph retriever_metrics ["Метрики ретривера"]
M1[Contextual Relevancy]
M2[Contextual Precision]
M3[Contextual Recall]
end
subgraph answer_metrics ["Метрики ответа"]
M4[Answer Relevancy]
M5[Faithfulness]
M6[Answer Precision]
end
subgraph safety_metrics ["Метрики безопасности"]
M7[Bias]
M8[Toxicity]
end
C -.-> M1
C -.-> M2
C -.-> M3
A -.-> M4
A -.-> M5
A -.-> M6
A -.-> M7
A -.-> M8 Как видно из диаграммы, метрики можно разделить на три группы:
- Метрики ретривера (Contextual Relevancy, Contextual Precision, Contextual Recall) -- оценивают качество поискового модуля, то есть насколько хорошо система находит нужную информацию.
- Метрики генератора (Answer Relevancy, Answer Precision, Faithfulness) -- оценивают качество ответа, сгенерированного языковой моделью.
- Метрики безопасности (Bias, Toxicity) -- оценивают безопасность и этичность сгенерированного контента.
Выбор метрик¶
Для оценки качества поиска¶
Используйте Contextual Relevancy, Contextual Precision и Contextual Recall для оценки того, насколько хорошо ваш ретривер находит нужную информацию.
- Contextual Relevancy покажет, есть ли среди найденных документов нерелевантный шум.
- Contextual Precision покажет, правильно ли ранжированы результаты (релевантные выше нерелевантных).
- Contextual Recall покажет, не пропущены ли важные фрагменты информации.
Для оценки качества ответа¶
Используйте Answer Relevancy и Answer Precision для оценки того, насколько хорошо сгенерированный ответ отвечает на вопрос пользователя.
- Answer Relevancy оценивает ответ с точки зрения намерения пользователя (не требует эталонного ответа).
- Answer Precision сравнивает ответ с эталонным (требует
expected_output).
Для оценки фактической точности¶
Используйте Faithfulness для проверки того, что ответ основан на найденном контексте и не содержит галлюцинаций. Это критически важно для систем, работающих с юридическими, медицинскими или финансовыми данными.
Для оценки безопасности¶
Используйте Bias и Toxicity для проверки того, что ответы безопасны и не содержат предвзятости или токсичного контента. Особенно важно для чат-ботов, работающих с широкой аудиторией.
Система вердиктов¶
Большинство RAG-метрик используют 5-уровневую систему вердиктов для детализированной оценки. Каждое атомарное утверждение в ответе получает один из пяти вердиктов:
| Вердикт | Вес | Значение |
|---|---|---|
fully | 1.0 | Критерий полностью удовлетворён |
mostly | 0.9 | В основном удовлетворён, незначительные пробелы |
partial | 0.7 | Частично удовлетворён |
minor | 0.3 | Минимально затронут |
none | 0.0 | Совсем не удовлетворён |
Вердикты агрегируются с помощью Temperature-Controlled Score Aggregation для получения итогового балла от 0.0 до 1.0. Параметр temperature позволяет управлять строгостью оценки: низкая температура (0.1) сурово наказывает за любые плохие вердикты, а высокая (1.0) -- более лояльна.
Быстрый пример¶
Ниже приведён полный пример запуска оценки RAG-системы с использованием четырёх ключевых метрик:
import asyncio
from eval_lib import (
evaluate,
EvalTestCase,
AnswerRelevancyMetric,
FaithfulnessMetric,
ContextualRelevancyMetric,
ContextualRecallMetric,
)
test_case = EvalTestCase(
input="What causes climate change?",
actual_output="Climate change is primarily caused by greenhouse gas emissions from burning fossil fuels.",
expected_output="The main cause of climate change is the emission of greenhouse gases, particularly from fossil fuel combustion.",
retrieval_context=[
"Burning fossil fuels releases carbon dioxide and other greenhouse gases into the atmosphere.",
"These greenhouse gases trap heat, leading to global warming and climate change.",
]
)
metrics = [
AnswerRelevancyMetric(model="gpt-4o", threshold=0.7),
FaithfulnessMetric(model="gpt-4o", threshold=0.7),
ContextualRelevancyMetric(model="gpt-4o", threshold=0.6),
ContextualRecallMetric(model="gpt-4o", threshold=0.7),
]
results = asyncio.run(evaluate([test_case], metrics))
В этом примере:
input-- вопрос пользователя.actual_output-- ответ, сгенерированный вашей RAG-системой.expected_output-- эталонный ответ (нужен для Contextual Recall и Answer Precision).retrieval_context-- список фрагментов, найденных ретривером.
Результат содержит оценки по каждой метрике, вердикты и текстовые пояснения.
Практические рекомендации¶
- Начните с минимального набора метрик. Для первой оценки достаточно Answer Relevancy + Faithfulness. Добавляйте остальные по мере необходимости.
- Настройте пороги под вашу задачу. Для критичных приложений (медицина, финансы) повышайте пороги; для разговорных ботов можно снизить.
- Используйте Answer Precision для детерминированных тестов. Эта метрика не требует LLM и работает мгновенно -- отлично подходит для регрессионного тестирования.
- Запускайте метрики параллельно. Функция
evaluate()автоматически выполняет все метрики параллельно для каждого тест-кейса.