Полнота контекста (Contextual Recall)¶
Метрика Contextual Recall оценивает, какая доля утверждений из эталонного ответа подтверждается найденным контекстом. Она измеряет полноту поиска -- все ли необходимые данные были найдены ретривером.
Если Contextual Relevancy и Contextual Precision оценивают "качество" найденных фрагментов, то Contextual Recall отвечает на вопрос: "Не упущено ли что-то важное?" Даже если все найденные фрагменты релевантны (высокая Precision), но они покрывают лишь половину нужной информации, Recall будет низким.
Как это работает¶
Алгоритм работает в три этапа:
- Извлечение утверждений (Claim Extraction) -- извлекает отдельные утверждения из эталонного ответа (
expected_output). Каждое утверждение -- это один проверяемый факт. - Проверка поддержки (Support Check) -- для каждого утверждения определяет, поддерживается ли оно найденным контекстом.
- Расчёт полноты (Recall Calculation) -- вычисляет долю поддержанных утверждений:
supported_claims / total_claims.
Формула проста и интуитивна: если эталонный ответ содержит 4 утверждения, а контекст подтверждает 3 из них, Recall = 3/4 = 0.75.
Параметры¶
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
model | str | обязательный | Любая модель: "gpt-4o", "anthropic:claude-3-5-sonnet-latest", "google:gemini-2.0-flash", "ollama:llama3" или CustomLLMClient |
threshold | float | 0.7 | Минимальный балл для прохождения теста |
Обязательные поля¶
| Поле | Обязательно |
|---|---|
input | Да |
expected_output | Да |
retrieval_context | Да |
Использование¶
from eval_lib import ContextualRecallMetric, EvalTestCase, evaluate
import asyncio
test_case = EvalTestCase(
input="What are the benefits of exercise?",
actual_output="Exercise improves cardiovascular health and reduces stress.",
expected_output="Exercise improves cardiovascular health, strengthens muscles, reduces stress, and boosts mental health.",
retrieval_context=[
"Regular exercise strengthens the heart and improves cardiovascular health.",
"Physical activity is known to reduce stress hormones like cortisol.",
"Exercise releases endorphins, which help improve mood and mental well-being."
]
)
metric = ContextualRecallMetric(model="gpt-4o", threshold=0.7)
results = asyncio.run(evaluate([test_case], [metric]))
В этом примере эталонный ответ содержит 4 утверждения:
- "Улучшает сердечно-сосудистое здоровье" -- подтверждается 1-м фрагментом.
- "Укрепляет мышцы" -- не подтверждается ни одним фрагментом.
- "Снижает стресс" -- подтверждается 2-м фрагментом.
- "Улучшает психическое здоровье" -- подтверждается 3-м фрагментом.
Итого: 3 из 4 утверждений подтверждены, Recall = 0.75.
Интерпретация результатов¶
| Балл | Интерпретация |
|---|---|
| 1.0 | Все утверждения эталонного ответа подтверждены контекстом |
| 0.75 | 3 из 4 утверждений подтверждены |
| 0.5 | Только половина необходимой информации найдена |
| 0.0 | Контекст не подтверждает ни одного утверждения |
Стоимость¶
2 вызова LLM API на одну оценку.
Когда использовать¶
- Оценка полноты поиска -- находит ли ретривер всю необходимую информацию.
- Проверка базы знаний -- содержит ли ваша база знаний все данные, необходимые для ответа на типовые вопросы.
- Выявление пробелов в контексте -- какие аспекты вопроса не покрыты найденными документами.
Практические советы¶
- Низкий Recall при высокой Precision означает, что ретривер находит только часть нужной информации. Попробуйте увеличить
top_kили снизить порог сходства. - Используйте совместно с Contextual Precision для полной картины: Precision показывает точность, Recall -- полноту. Идеальный ретривер имеет высокие значения обеих метрик.
- Низкий Recall может указывать на пробелы в базе знаний, а не на проблемы с ретривером. Проверьте, содержит ли база знаний информацию по всем утверждениям эталонного ответа.
- Качество эталонного ответа критически важно. Если
expected_outputнеполный или неточный, метрика будет давать искажённые результаты.