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

Совпадение по регулярному выражению

RegexMatchMetric сопоставляет фактический вывод с регулярным выражением.

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

  1. Компилирует предоставленный паттерн регулярного выражения
  2. Применяет полное или частичное сопоставление в зависимости от параметра full_match
  3. Возвращает 1.0 при совпадении паттерна, 0.0 в противном случае

Параметры

Параметр Тип По умолчанию Описание
threshold float 1.0 Минимальный балл для прохождения
pattern str обязательный Паттерн регулярного выражения
full_match bool False Если True, весь вывод должен соответствовать паттерну. Если False, достаточно частичного совпадения (поиск)

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

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

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

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

test_case = EvalTestCase(
    input="Сгенерируйте дату",
    actual_output="2025-12-31"
)

metric = RegexMatchMetric(
    threshold=1.0,
    pattern=r"^\d{4}-\d{2}-\d{2}$",
    full_match=True
)
result = asyncio.run(metric.evaluate(test_case))
print(result.score)  # 1.0

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

Прошел (1.0) — частичное совпадение

metric = RegexMatchMetric(pattern=r"\d+\.\d{2}", full_match=False)
EvalTestCase(
    input="Какова цена?",
    actual_output="Общая стоимость составляет $19.99 включая налог."
)
# Паттерн найден в выводе

Прошел (1.0) — полное совпадение

metric = RegexMatchMetric(pattern=r"[A-Z]{3}-\d{4}", full_match=True)
EvalTestCase(
    input="Сгенерируйте код продукта",
    actual_output="ABC-1234"
)
# Весь вывод соответствует паттерну

Не прошел (0.0)

metric = RegexMatchMetric(pattern=r"^\d+$", full_match=True)
EvalTestCase(
    input="Верните число",
    actual_output="Ответ — 42"
)
# Весь вывод не соответствует паттерну только из цифр