Какие проверки ответов LLM можно автоматизировать без модели-судьи?
- Как проверять ответы LLM кодом?
Многое проверяется обычным кодом: формат (валидный JSON по схеме, длина ответа), наличие нужных фактов (подстрока, число, дата), отсутствие запрещённого (обещания скидок, контакты конкурентов, персональные данные), вызван ли нужный инструмент с правильными аргументами, ссылки только на переданные источники, язык ответа. Такие проверки дешёвые, быстрые и детерминированные — их ставят первыми, а судью — только туда, где нужна оценка смысла.
- Точное совпадение подходит для классификации и извлечения полей
- Для чисел — сравнение с допуском и после нормализации формата
- Регулярные выражения ловят телефоны, email, номера карт в ответе
А ещё Если проверку можно написать кодом — пишите кодом, а не судьёй
Подробно
Примеры проверок:
def check(answer, case):
assert json.loads(answer.text) # формат
for fact in case["contains"]:
assert fact in answer.text # нужный факт
assert not re.search(r"\+7\d{10}", answer.text) # нет телефонов
assert answer.tool == case.get("tool") # нужный инструмент
Отчёт: доля прошедших примеров по каждой проверке и сценарию. Упавшие примеры показываются с ответом — их разбирают глазами.
Что хотят услышать
- Формат, факты, запреты, инструменты, ссылки.
- Дешевизна и детерминированность.
- Судья — только для смысловой оценки.
Проверьте себя
Несколько верных вариантов. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Валидность JSON и соответствие схеме
- ✓Наличие нужного факта или числа в ответе
- ✓Вызов нужного инструмента с правильными аргументами
- ✗Насколько вежливо и убедительно звучит ответ
Разбор темы
- Оценка качества LLM-продукта
Как собрать набор примеров, какие проверки делать кодом, когда нужен LLM-судья и как мерить качество поиска.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.