Релевантность ответа (Answer Relevancy)¶
Метрика Answer Relevancy оценивает, насколько хорошо ответ чат-бота или AI-системы соответствует намерению и вопросу пользователя. Это одна из ключевых метрик для оценки качества RAG-систем, поскольку она проверяет самое важное -- отвечает ли система на заданный вопрос.
В отличие от метрики Answer Precision, которая сравнивает ответ с эталонным, Answer Relevancy анализирует ответ с точки зрения намерения пользователя. Это означает, что метрика не требует эталонного ответа и может оценить, насколько полезен ответ для пользователя, даже если он сформулирован иначе.
Как это работает¶
graph TD
A[Input Question] --> B[1. Infer User Intent]
A --> C[Actual Output]
C --> D[2. Extract Atomic Statements]
D --> E[3. Generate Verdicts per Statement]
B --> E
E --> F[4. Aggregate Scores via Softmax]
F --> G[Final Score 0.0-1.0] Алгоритм работает в четыре этапа:
- Определение намерения (Intent Inference) -- анализирует вопрос пользователя, чтобы понять его истинное намерение. Например, вопрос "Как сбросить пароль?" подразумевает, что пользователь хочет получить пошаговую инструкцию.
- Извлечение утверждений (Statement Extraction) -- разбивает ответ на атомарные, проверяемые утверждения. Каждое утверждение -- это отдельный факт или инструкция.
- Генерация вердиктов (Verdict Generation) -- оценивает каждое утверждение на предмет соответствия определённому намерению пользователя по 5-уровневой шкале.
- Агрегация оценок (Score Aggregation) -- объединяет все вердикты с помощью temperature-controlled softmax в итоговый балл от 0.0 до 1.0.
Параметры¶
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
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 | Строгость агрегации (0.1=строгий, 1.0=лояльный) |
Параметр temperature заслуживает особого внимания. Он управляет тем, как отдельные вердикты объединяются в итоговый балл:
- При низкой температуре (0.1) даже одно нерелевантное утверждение существенно снижает итоговую оценку.
- При средней температуре (0.5) оценка приблизительно равна среднему арифметическому весов вердиктов.
- При высокой температуре (1.0) оценка более снисходительна -- если большинство утверждений релевантны, отдельные нерелевантные не сильно влияют на результат.
Обязательные поля¶
| Поле | Обязательно |
|---|---|
input | Да |
actual_output | Да |
expected_output | Нет |
retrieval_context | Нет |
Обратите внимание, что expected_output и retrieval_context не обязательны. Это делает метрику удобной для ситуаций, когда у вас нет эталонного ответа.
Использование¶
from eval_lib import AnswerRelevancyMetric, EvalTestCase, evaluate
import asyncio
test_case = EvalTestCase(
input="How do I reset my password?",
actual_output="To reset your password, go to Settings > Security > Change Password. Enter your current password and then your new password twice. Click Save to confirm."
)
metric = AnswerRelevancyMetric(
model="gpt-4o",
threshold=0.7,
temperature=0.5
)
results = asyncio.run(evaluate([test_case], [metric]))
Детали оценки¶
Метрика использует стандартную систему вердиктов:
| Вердикт | Вес | Пример |
|---|---|---|
fully | 1.0 | Утверждение напрямую отвечает на вопрос |
mostly | 0.9 | Утверждение высоко релевантно с незначительными пробелами |
partial | 0.7 | Утверждение частично релевантно |
minor | 0.3 | Утверждение лишь слегка касается темы |
none | 0.0 | Утверждение полностью не по теме |
Влияние температуры¶
- t=0.1 (строгий режим): одно нерелевантное утверждение может существенно снизить балл
- t=0.5 (сбалансированный): балл отражает среднее арифметическое весов вердиктов
- t=1.0 (лояльный): балл снисходителен, если большинство утверждений релевантны
Выбирайте температуру в зависимости от вашего сценария:
- Для критичных приложений (медицина, юридические консультации) используйте низкую температуру, чтобы любое нерелевантное утверждение сразу выявлялось.
- Для разговорных ботов и общих задач подходит средняя температура.
- Для творческих задач, где небольшие отклонения допустимы, используйте высокую температуру.
Стоимость¶
4 вызова LLM API на одну оценку:
- Определение намерения пользователя
- Извлечение атомарных утверждений
- Генерация вердиктов
- Объяснение оценки
Примеры сценариев¶
Высокий балл (0.95+)¶
EvalTestCase(
input="What is the capital of France?",
actual_output="The capital of France is Paris. It is located in northern France along the Seine River."
)
# Все утверждения напрямую отвечают на вопрос
В этом примере оба утверждения ("столица Франции -- Париж" и "расположен на севере Франции вдоль реки Сена") непосредственно связаны с вопросом о столице Франции.
Низкий балл (< 0.5)¶
EvalTestCase(
input="What is the capital of France?",
actual_output="France is a beautiful country with great food. The Eiffel Tower is a popular tourist attraction. French wine is world-renowned."
)
# Утверждения о Франции, но не отвечают на вопрос
Здесь все три утверждения связаны с Францией, но ни одно из них не отвечает на конкретный вопрос пользователя о столице. Метрика справедливо назначит низкий балл, потому что намерение пользователя (узнать столицу) не удовлетворено.
Смешанный балл (0.5-0.7)¶
Типичный пример частично релевантного ответа:
EvalTestCase(
input="How do I install Python on Windows?",
actual_output="Python is a versatile programming language created by Guido van Rossum. To install it on Windows, download the installer from python.org and run it. Python supports multiple paradigms including object-oriented and functional programming."
)
# Одно утверждение отвечает на вопрос, два -- нет
В этом случае только одно из трёх утверждений (инструкция по установке) релевантно вопросу, что приведёт к среднему баллу.