TL;DR
SIT-Eval — это способ проверить разговорного агента не одной общей оценкой, а по ситуациям. Каждое желаемое поведение записывается как правило «если случилась ситуация P, агент обязан сделать Q». Дальше второй LLM играет собеседника и по очереди создаёт ситуации (путается, отвлекается, злится, говорит двусмысленно). Третий LLM-судья проверяет каждую реплику агента только по тем правилам, которые к этой ситуации относятся. Вердикт по каждому правилу бинарный: «соблюдено» или «нарушено».
Главная находка: общий балл скрывает провалы. Модели с почти одинаковой итоговой оценкой сильно расходятся по отдельным правилам. Хуже всего у всех — уточнение при двусмысленности. Когда реплика собеседника неясна, модель чаще всего угадывает смысл и отвечает, а не спрашивает. В среднем правило выполнялось лишь в 11% случаев без явной инструкции, и ни одна модель не вышла выше 47% даже с подробным промптом. Редкие ситуации тоже проваливаются, а в продакшене они случаются тысячи раз в день.
Метод сводится к трём ходам: разложить поведение на проверяемые правила, заставить собеседника равномерно создавать все ситуации, проверять судью на диалогах с заранее известным ответом, прежде чем ему верить.
Схема метода
ШАГ 0: Записать правила → «Если [ситуация] → агент должен [чёткое действие]»
(бинарно: соблюдено / нарушено; у каждого правила есть пример хорошей и плохой реплики)
ШАГ 1: Список действий собеседника (ситуаций) → каждое привязано к своим правилам
ШАГ 2: На каждом ходе выбрать ситуацию РАВНОМЕРНО (не по частоте в жизни)
→ LLM-собеседник по промпту «сыграй эту ситуацию» пишет реплику
ШАГ 3: Агент отвечает
ШАГ 4: LLM-судья получает ТОЛЬКО правила этой ситуации
→ для каждого правила: обоснование → вердикт «соблюдено / нарушено»
ШАГ 5 (до запуска): проверить судью на «золотых» диалогах с известным ответом
(половина реплик агента заведомо хорошие, половина — заведомо плохие)
→ считать точность по каждому правилу, править судью, пока не станет надёжным
ИТОГ: профиль «правило × процент соблюдения» вместо одной оценки
Шаги 2–4 повторяются каждый ход диалога. Шаг 5 делается один раз перед основным запуском. В чате все роли можно выполнять вручную или в нескольких окнах.
Пример применения
Метод сильнее всего там, где поведение можно записать однозначными правилами: поддержка, обучение, онбординг, консультации по продукту. Для вкусовых критериев вроде «звучит дружелюбно» он слабее.
Задача: вы настраиваете бота поддержки маркетплейса уровня Ozon или Wildberries. В среднем диалоге всё нормально, но вы боитесь трёх редких ситуаций: клиент пишет двусмысленно («не пришло»), клиент взбешён, клиент требует вернуть деньги вне правил. Нужно понять, где бот ломается.
Промпт (роль судьи, вставляется вместе с фрагментом диалога):
Ты — строгий судья качества бота поддержки маркетплейса.
Клиент написал двусмысленно: «Не пришло, верните».
Неясно: не пришёл заказ целиком, часть заказа или возврат средств.
R1. Если запрос клиента допускает несколько прочтений, бот ОБЯЗАН задать один
уточняющий вопрос и НЕ предлагать решение, пока смысл не ясен.
Нарушение: бот выбрал одно прочтение и сразу начал решать.
R2. Бот не обещает возврат денег до проверки статуса заказа.
Нарушение: «Мы вернём деньги» без проверки.
R3. Бот обращается на «вы» и не перекладывает вину на клиента.
Клиент: Не пришло, верните.
Сожалеем, что ваш заказ не доставлен! Оформляю возврат 2 490 ₽ на карту,
деньги придут в течение 3 дней.
Для КАЖДОГО правила сначала напиши короткое обоснование (1–2 предложения),
затем вердикт: СОБЛЮДЕНО или НАРУШЕНО. Не оценивай то, чего нет в списке правил.
Результат: модель выдаст по каждому правилу обоснование и бинарный вердикт. Для этой реплики бота ожидаемо нарушение R1 (угадал смысл вместо уточнения) и R2 (пообещал возврат без проверки). Вы увидите конкретное правило, которое ломается, а не «ответ в целом нормальный, 7 из 10».
Почему это работает
Слабость. Общая оценка диалога («хороший ответ / плохой ответ») усредняет всё. Агент может довести клиента до решения и по пути нарушить три правила: раскрыть лишнее, проигнорировать эмоцию, угадать вместо уточнения. Естественные диалоги к тому же почти не содержат редких ситуаций, а они-то и дают сбои в продакшене. Судья без калибровки на тонких критериях ошибается.
Сильная сторона. LLM хорошо классифицирует, когда у неё есть чёткий критерий, пример нарушения и место для обоснования. LLM также хорошо играет заданную ситуацию: «сыграй растерянного клиента» выполняется надёжно.
Как метод использует это. Он превращает расплывчатое «ведёт себя хорошо» в набор мелких бинарных вопросов. Судья проверяет только применимые правила, поэтому его внимание не размывается. Равномерный выбор ситуаций заставляет агента столкнуться с редкими случаями столько же раз, сколько с частыми. Проверка судьи на «золотых» диалогах показывает, где ему можно доверять, а где нет.
Рычаги управления: - Список ситуаций → добавляй свои редкие случаи (агрессия, провокация, оффтоп). Каждая ситуация даёт отдельный срез. - Привязка правил к ситуациям → одно правило может относиться к нескольким ситуациям. Судье подавай только нужные, иначе точность падает. - «Обоснование перед вердиктом» → оставь, судья будет точнее. Уберёшь — получишь быстрее, но грубее. - Описание нарушения в правиле → чем конкретнее («выбрал прочтение и начал решать»), тем меньше спорных вердиктов. - Строгость судьи → в исследовании судья был слишком строгим (ложных «нарушено» в 2,4 раза больше, чем ложных «соблюдено»). Если у вас так же, смягчай формулировки правил или проверяй спорные случаи руками.
Шаблон промпта
Блок 1. Собеседник, создающий ситуацию:
Ты играешь {роль_собеседника} в диалоге с {агент}. Контекст: {контекст}.
Ситуация этого хода: {название_ситуации}.
Как её сыграть: {описание, например «пишешь двусмысленно, не уточняя, что именно не так»}.
Напиши ОДНУ реплику собеседника, которая явно создаёт эту ситуацию.
Не объясняй, что ты делаешь. Только реплика.
Блок 2. Судья:
Ты — строгий судья. Оцени ответ {агент} ТОЛЬКО по правилам ниже.
{описание_ситуации}
R1. Если {ситуация}, агент ОБЯЗАН {поведение}.
Нарушение: {пример нарушения}.
R2. ...
{диалог}
{реплика_агента}
Для КАЖДОГО правила: короткое обоснование, затем СОБЛЮДЕНО или НАРУШЕНО.
Не добавляй правил от себя.
Блок 3. Проверка судьи (один раз перед использованием):
Вот правило: {правило}. Вот ситуация: {ситуация}.
Напиши две реплики {агент}: одну, которая ТОЧНО соблюдает правило,
и одну, которая ТОЧНО нарушает его (но выглядит правдоподобно).
Затем прогони эти реплики через судью. Верных вердиктов должно быть заметно больше половины по каждому правилу. Прогонять нужно вслепую: судья не видит, какая реплика какая.
Что подставлять:
- {агент} — кого проверяете (бот поддержки, репетитор, консультант).
- {название_ситуации} и {описание} — типовые и редкие случаи, 6–10 штук.
- {поведение} и {пример нарушения} — чётко и бинарно, без «должен быть вежливым».
🚀 Быстрый старт — вставь в чат:
Вот шаблон ситуативной проверки агента (собеседник + судья). Адаптируй под мою задачу: [опиши своего агента и где он работает].
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит, какие ситуации вы боитесь не пройти, какие правила поведения у агента, как выглядит чёткое нарушение каждого. Это нужно, чтобы правила получились бинарными, а ситуации привязались к своим правилам. Из шаблона она возьмёт структуру и соберёт готовые блоки под ваш случай.
Ограничения
⚠️ Судья не идеален: даже после проверки он ошибался примерно в каждом седьмом случае. На нечётких правилах (объяснение, раскрытие информации) точность была ниже, около 70–80%. Результат нужно проверять выборочно руками.
⚠️ Судья слишком строгий: ложных «нарушено» было заметно больше, чем ложных «соблюдено». Абсолютные проценты соблюдения занижены, а сравнивать лучше агентов между собой.
⚠️ Бинарность: метод требует правил вида «сделал / не сделал». Для субъективных критериев (стиль, тон, креатив) он слабее.
⚠️ Подробный промпт с правилами помогает не всегда: у одних моделей он поднял соблюдение правил, у GPT-5 общий результат упал (на завершении задачи и отвлечении упал сильно). Подробные правила в системном промпте надо проверять на своей модели, а не верить на слово.
⚠️ Одна предметная область: проверяли на математическом репетиторе (задачи школьного уровня), судья и «золотые» диалоги сделаны одной моделью. Перенос на поддержку и продажи логичен, но авторы его не тестировали.
⚠️ Дообученные «репетиторские» модели: специализированные 7B-модели показали результат заметно хуже современных универсальных. Дообучение под роль не заменяет сильную базу.
Как исследовали
Авторы выбрали математическое репетиторство в сократовском стиле, где поведение можно разложить на правила: не решай за ученика, хвали за верный шаг, уточняй при непонятном ответе. Вместе с профессиональными методистами они составили 12 правил в семи категориях и 9 типов реплик ученика: путается, отвлекается, ошибается, решил задачу, подталкивает ответить за него и другие. В каждом ходе ученика-LLM заставляли играть равновероятно выбранную ситуацию.
Сначала проверили судью. Claude Sonnet 4.5 сгенерировал 500 «золотых» диалогов, где половина реплик репетитора намеренно хорошие, половина намеренно плохие. Трое экспертов вручную проверили 100 диалогов (1 292 реплики), и «шумных» оказалось всего 0,85%. Судья дал 84,4% точности. Идеально он справился с эмоциональным интеллектом (почти 100%), хуже всего с нераскрытием информации и объяснением (около 72–77%).
Затем протестировали 8 моделей на 100 задачах школьной математики (GSM8K): GPT-5, Claude Sonnet 4.5, Gemini 2.5 Pro и несколько меньших. Каждую универсальную модель гоняли с коротким промптом и с полным промптом из всех 12 правил. Самый яркий результат: у Claude соблюдение правила уточнения при двусмысленности выросло с 2% до 47%, но выше он не поднялся. Среднее по всем моделям составило 17%. Ещё одно тихое место: завершение задачи, где в среднем около 49%.
Для проверки надёжности лучшие модели прогнали по 5 раз (разброс небольшой). Чтобы исключить самопредпочтение судьи Claude, диалоги перепроверили судьёй Gemini 2.5 Flash: Claude 84,3% против Gemini 79,0%, разрыв и порядок сохранились. Практический вывод: ошибки видны только в разрезе правил, а полный промпт может помочь одним моделям и повредить другим.
Адаптации и экстраполяции
💡 Адаптация для проверки собственных инструкций агента: возьмите свой системный промпт и превратите каждый его абзац в правило «если ситуация — то действие + пример нарушения». Затем прогоните 8–10 ситуаций по очереди.
Вот системный промпт моего агента: {промпт}. Выпиши из него все правила в формате «Если [ситуация] → агент обязан [действие]; нарушение: [пример]». Затем предложи 10 ситуаций собеседника, включая редкие, и для каждой укажи, какие правила к ней применимы.
🔧 Техника: добавить правило уточнения → проверить его отдельно. Исследование показало, что без явной инструкции модель чаще угадывает. Если агент часто ошибается из-за неясных запросов, добавьте правило вида «если запрос допускает два и более прочтений, сначала задай один уточняющий вопрос». Авторы проверяли подобное правило в составе полного промпта, не отдельной строкой. Поэтому прогоните на своей модели ситуацию «двусмысленная реплика» до и после правки. Даже тогда ждите потолок: до 47% лучшая модель дотянула лишь в этой работе.
Ресурсы
- SIT-Eval: Situation-Based Interactive Turn-by-Turn Evaluation of Conversational Agents
- Авторы: Ravil Mussabayev (AI Research Lab, Satbayev University, Алматы), Saveliy Zavertyaev, Dmitriy Parpulov, Andrey Savchenko (Sber AI Lab, Москва)
- В тексте упомянуты: репозиторий с правилами, промптами действий и результатами (ссылка в приведённом фрагменте отсутствует); приложения A–D с промптами судьи и примерами диалогов; MathTutorBench, MathDial, TutorEval, TutorBench, MRBench; GSM8K; Zheng et al., 2023 (LLM-as-judge).
