Перейти к содержанию

Полнота контекста (Contextual Recall)

Метрика Contextual Recall оценивает, какая доля утверждений из эталонного ответа подтверждается найденным контекстом. Она измеряет полноту поиска -- все ли необходимые данные были найдены ретривером.

Если Contextual Relevancy и Contextual Precision оценивают "качество" найденных фрагментов, то Contextual Recall отвечает на вопрос: "Не упущено ли что-то важное?" Даже если все найденные фрагменты релевантны (высокая Precision), но они покрывают лишь половину нужной информации, Recall будет низким.

Как это работает

Алгоритм работает в три этапа:

  1. Извлечение утверждений (Claim Extraction) -- извлекает отдельные утверждения из эталонного ответа (expected_output). Каждое утверждение -- это один проверяемый факт.
  2. Проверка поддержки (Support Check) -- для каждого утверждения определяет, поддерживается ли оно найденным контекстом.
  3. Расчёт полноты (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. "Улучшает сердечно-сосудистое здоровье" -- подтверждается 1-м фрагментом.
  2. "Укрепляет мышцы" -- не подтверждается ни одним фрагментом.
  3. "Снижает стресс" -- подтверждается 2-м фрагментом.
  4. "Улучшает психическое здоровье" -- подтверждается 3-м фрагментом.

Итого: 3 из 4 утверждений подтверждены, Recall = 0.75.

Интерпретация результатов

Балл Интерпретация
1.0 Все утверждения эталонного ответа подтверждены контекстом
0.75 3 из 4 утверждений подтверждены
0.5 Только половина необходимой информации найдена
0.0 Контекст не подтверждает ни одного утверждения

Стоимость

2 вызова LLM API на одну оценку.

Когда использовать

  • Оценка полноты поиска -- находит ли ретривер всю необходимую информацию.
  • Проверка базы знаний -- содержит ли ваша база знаний все данные, необходимые для ответа на типовые вопросы.
  • Выявление пробелов в контексте -- какие аспекты вопроса не покрыты найденными документами.

Практические советы

  1. Низкий Recall при высокой Precision означает, что ретривер находит только часть нужной информации. Попробуйте увеличить top_k или снизить порог сходства.
  2. Используйте совместно с Contextual Precision для полной картины: Precision показывает точность, Recall -- полноту. Идеальный ретривер имеет высокие значения обеих метрик.
  3. Низкий Recall может указывать на пробелы в базе знаний, а не на проблемы с ретривером. Проверьте, содержит ли база знаний информацию по всем утверждениям эталонного ответа.
  4. Качество эталонного ответа критически важно. Если expected_output неполный или неточный, метрика будет давать искажённые результаты.