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

Релевантность ответа (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]

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

  1. Определение намерения (Intent Inference) -- анализирует вопрос пользователя, чтобы понять его истинное намерение. Например, вопрос "Как сбросить пароль?" подразумевает, что пользователь хочет получить пошаговую инструкцию.
  2. Извлечение утверждений (Statement Extraction) -- разбивает ответ на атомарные, проверяемые утверждения. Каждое утверждение -- это отдельный факт или инструкция.
  3. Генерация вердиктов (Verdict Generation) -- оценивает каждое утверждение на предмет соответствия определённому намерению пользователя по 5-уровневой шкале.
  4. Агрегация оценок (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 на одну оценку:

  1. Определение намерения пользователя
  2. Извлечение атомарных утверждений
  3. Генерация вердиктов
  4. Объяснение оценки

Примеры сценариев

Высокий балл (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."
)
# Одно утверждение отвечает на вопрос, два -- нет

В этом случае только одно из трёх утверждений (инструкция по установке) релевантно вопросу, что приведёт к среднему баллу.