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

Содержит

ContainsMetric проверяет, содержит ли фактический вывод указанные ключевые слова, с настраиваемыми режимами сопоставления.

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

  1. Опционально приводит вывод к нижнему регистру для регистронезависимого сопоставления
  2. Проверяет каждое ключевое слово в выводе
  3. Применяет выбранный режим (any, all или none) для определения результата
  4. Возвращает 1.0, если условие выполнено, 0.0 в противном случае

Параметры

Параметр Тип По умолчанию Описание
threshold float 1.0 Минимальный балл для прохождения
keywords list[str] обязательный Список ключевых слов для проверки
mode str "any" Режим сопоставления: "any" (хотя бы одно), "all" (все), "none" (ни одного)
case_sensitive bool True Учитывать ли регистр при сопоставлении

Обязательные поля

Поле Обязательно
input Нет
actual_output Да
expected_output Нет

Использование

from eval_lib.metrics import ContainsMetric
from eval_lib.test_case import EvalTestCase
import asyncio

test_case = EvalTestCase(
    input="Перечислите основные цвета",
    actual_output="Основные цвета — красный, синий и желтый."
)

metric = ContainsMetric(
    threshold=1.0,
    keywords=["красный", "синий", "желтый"],
    mode="all",
    case_sensitive=False
)
result = asyncio.run(metric.evaluate(test_case))
print(result.score)  # 1.0

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

Прошел (1.0) — mode="any"

metric = ContainsMetric(keywords=["Python", "JavaScript"], mode="any")
EvalTestCase(
    input="Назовите язык программирования",
    actual_output="Python — популярный язык."
)
# Найдено хотя бы одно ключевое слово

Прошел (1.0) — mode="none"

metric = ContainsMetric(keywords=["ошибка", "сбой", "исключение"], mode="none")
EvalTestCase(
    input="Сгенерируйте сообщение об успехе",
    actual_output="Операция выполнена успешно."
)
# Запрещенные ключевые слова не найдены

Не прошел (0.0)

metric = ContainsMetric(keywords=["красный", "синий", "желтый"], mode="all")
EvalTestCase(
    input="Перечислите основные цвета",
    actual_output="Основные цвета — красный и синий."
)
# "желтый" отсутствует