Релевантность контекста (Contextual Relevancy)¶
Метрика Contextual Relevancy оценивает, насколько хорошо найденный контекст поддерживает вопрос и намерение пользователя. В отличие от метрик Contextual Precision и Contextual Recall, которые сравнивают контекст с эталонным ответом, эта метрика фокусируется на соответствии между вопросом и найденным контекстом.
Это метрика для диагностики ретривера. Если оценка Contextual Relevancy низкая, значит поисковый модуль возвращает нерелевантные или шумные фрагменты. Даже самая мощная языковая модель не сможет дать хороший ответ, если контекст не содержит нужной информации.
Как это работает¶
Алгоритм работает в три этапа:
- Определение намерения (Intent Inference) -- анализирует вопрос пользователя, чтобы понять его истинное намерение. Это позволяет оценивать контекст не по поверхностному совпадению слов, а по смысловой связи с вопросом.
- Оценка контекста (Context Evaluation) -- генерирует вердикты для каждого фрагмента контекста по степени его релевантности определённому намерению.
- Агрегация (Score Aggregation) -- объединяет вердикты с помощью temperature-controlled softmax.
Параметры¶
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
model | str | обязательный | Любая модель: "gpt-4o", "anthropic:claude-3-5-sonnet-latest", "google:gemini-2.0-flash", "ollama:llama3" или CustomLLMClient |
threshold | float | 0.6 | Минимальный балл для прохождения теста |
temperature | float | 0.5 | Строгость агрегации |
Обязательные поля¶
| Поле | Обязательно |
|---|---|
input | Да |
actual_output | Да |
retrieval_context | Да |
Использование¶
from eval_lib import ContextualRelevancyMetric, EvalTestCase, evaluate
import asyncio
test_case = EvalTestCase(
input="How do I configure CORS in FastAPI?",
actual_output="Use CORSMiddleware from fastapi.middleware.cors.",
retrieval_context=[
"FastAPI provides CORSMiddleware for handling Cross-Origin Resource Sharing. Import it from fastapi.middleware.cors and add it to your app.",
"CORS allows web applications running at one origin to access resources from a different origin.",
"Django REST Framework uses django-cors-headers package for CORS configuration."
]
)
metric = ContextualRelevancyMetric(model="gpt-4o", threshold=0.6)
results = asyncio.run(evaluate([test_case], [metric]))
В этом примере три фрагмента контекста имеют разную степень релевантности:
- Первый фрагмент -- высоко релевантен: напрямую описывает, как настроить CORS в FastAPI.
- Второй фрагмент -- частично релевантен: объясняет, что такое CORS, но не отвечает на вопрос "как настроить".
- Третий фрагмент -- нерелевантен: описывает настройку CORS в Django, а не в FastAPI.
Стоимость¶
3 вызова LLM API на одну оценку.
Когда использовать¶
- Оценка качества ретривера независимо от генерации. Если Contextual Relevancy низкая, проблема в поисковом модуле, а не в языковой модели.
- Выявление шумных фрагментов в результатах поиска. Метрика поможет понять, какие фрагменты засоряют контекст.
- Настройка параметров поиска -- размер чанков (chunk size), количество результатов (top-k), порог сходства (similarity threshold). Запускайте метрику после каждого изменения, чтобы отслеживать улучшения.
- Сравнение ретриверов -- если вы выбираете между различными поисковыми стратегиями (BM25, vector search, hybrid), Contextual Relevancy поможет объективно сравнить их.
Практические советы¶
- Если балл низкий, не спешите менять LLM. Скорее всего, проблема в ретривере: неправильная сегментация документов, неподходящие эмбеддинги или слишком высокий top-k.
- Используйте совместно с Contextual Precision и Contextual Recall для полной картины качества поиска: Relevancy показывает шум, Precision -- ранжирование, Recall -- полноту.
- Низкий порог (0.4-0.5) допустим, если ваш ретривер намеренно возвращает широкий контекст для повышения полноты.