Перейти к основному содержимому

Примеры тестов

В этом разделе собраны три примера для агента поддержки интернет-магазина. Агент отвечает на вопросы о доставке, оплате, возврате и статусе заказа. Примеры показывают весь процесс: как собрать датасет, настроить тест, разобрать результат и исправить агента. Вы можете взять эти кейсы за образец и подставить в них свои вопросы и эталоны. Как собрать датасет под свои задачи, читайте в разделе Как собрать хороший датасет.

Цифры и обоснования судьи в примерах условные — они показывают, как выглядит результат и как его понимать.

Для всех примеров понадобятся:

Проверить, не сломала ли правка промпта ответы​

Задача. Вы сокращаете промпт агента, чтобы он отвечал быстрее и тратил меньше токенов. Нужно убедиться, что агент по-прежнему правильно отвечает на частые вопросы клиентов.

1. Соберите датасет​

Возьмите 20–50 частых вопросов клиентов. Реальные формулировки удобно искать в разделе История запусков. Клиенты пишут коротко и просто — используйте поиск по тексту сообщения, чтобы найти такие фразы.

Начало датасета «Частые вопросы»:

ВопросКритерии оценкиЧто проверяет кейс
Сколько стоит доставка?
Поле входа city: Казань
Эталонный ответ: «Доставка по Казани стоит 300 рублей, курьер привезет заказ на следующий день».Учитывает ли агент город клиента. Процесс читает город из поля входа city.
Можно оплатить при получении?Эталонный ответ: «Да, курьеру можно заплатить наличными или картой». Второй вариант: «Да, оплатить заказ можно при получении».Знает ли агент, как оплатить заказ. Короткий ответ без перечня способов оплаты тоже правильный, поэтому в кейсе два варианта ответа. Второй добавляется кнопкой Еще вариант ответа.
Как вернуть товар?Инструкция судье: «Агент объясняет, что вернуть товар можно в течение 14 дней в личном кабинете или в пункте выдачи, и называет срок возврата денег — до 10 дней».Называет ли агент все условия возврата.
Почему мой заказ еще не пришел?Инструкция судье: «Агент просит номер заказа, чтобы проверить статус, и не обещает конкретную дату доставки».Просит ли агент номер заказа и не обещает ли сроки.
4815
История переписки: клиент спросил «Где мой заказ?», агент попросил назвать номер
Инструкция судье: «Агент сообщает статус заказа 4815 и не просит номер повторно».Помнит ли агент начало диалога. Историю переписки платформа сама записывает в диалог перед вопросом.

У доставки и оплаты один правильный факт, поэтому критерий в этих кейсах — эталонный ответ в режиме Текст ответа. Судья сверяет с ним смысл ответа, а не формулировку. В остальных кейсах важно поведение агента, поэтому критерий — инструкция судье.

2. Создайте тест​

Создайте тест «Регресс: частые вопросы» на основе этого датасета.

  • Проверки. Проверка Релевантность ответа покажет, что агент отвечает на заданный вопрос и не уходит в сторону. Проверка Выполнение задачи сравнит смысл ответа с эталоном.
  • Модель-судья. Выберите судью сразу: после первого запуска его в тесте изменить нельзя.
  • Повторы. Задайте три повтора: так вы отличите устойчивую ошибку от случайной.

На 50 кейсах с тремя повторами платформа выполнит 150 прогонов, а судья поставит 300 оценок. Это укладывается в лимиты.

3. Запустите тест до правки​

Запустите тест на текущей версии проекта со старым промптом. Этот запуск станет точкой отсчета — с ним вы будете сравнивать все следующие результаты.

4. Измените промпт и запустите тест снова​

Сократите промпт, сохраните проект и запустите этот же тест на новой версии. История запусков теста может выглядеть так:

Дата и времяВерсияPass rateСреднее
1 окт., 10:00
#1
до правки94%8,7
1 окт., 11:30
#2
сокращенный промпт81%7,9

Столбец Динамика у второго запуска показывает снижение на 13 процентных пунктов. Это значит, что на части кейсов агент стал отвечать хуже.

5. Найдите, что сломалось​

Раскройте второй запуск и найдите кейсы с оценками, которые не прошли проверку. Обратите внимание, в скольких повторах упал кейс:

  • Кейс «Как вернуть товар?» не прошел проверку Выполнение задачи во всех трех повторах. Это устойчивая ошибка. Судья может обосновать ее так: «Ответ описывает оформление возврата в личном кабинете, но не называет срок возврата денег из инструкции». Сверьте ответ с промптом — при сокращении из него пропало правило о сроке возврата.
  • Кейс «4815» не прошел проверку в одном повторе из трех. В этом повторе агент снова попросил номер заказа. Это нестабильность, а не поломка: в остальных повторах агент нашел номер в истории диалога. Чтобы агент отвечал стабильнее, добавьте в промпт правило: если клиент уже назвал номер заказа, не спрашивать его снова. Если бы кейс падал во всех повторах, стоило бы проверить лимит сообщений на вкладке Контекст блока агента: при слишком маленьком лимите агент не видит начало диалога.

Если по ответу агента причина ошибки неясна, посмотрите журнал событий прогона.

6. Исправьте и проверьте исправление​

Верните в промпт правило о сроке возврата денег и сохраните проект.

Сначала проверьте исправление на кейсе, который сломался: на вкладке Результаты отметьте прогоны кейса «Как вернуть товар?» из второго запуска и перепрогоните их на новой версии. Если кейс прошел проверку, запустите тест целиком: перепрогон не попадает в историю теста, а запуск — попадает.

Дата и времяВерсияPass rateСреднее
1 окт., 10:00
#1
до правки94%8,7
1 окт., 11:30
#2
сокращенный промпт81%7,9
1 окт., 14:10
#3
сокращенный промпт и правило о возврате95%8,8

Pass rate вернулся на прежний уровень, а промпт стал короче. Вы можете публиковать правку.

Что дальше​

Запускайте этот тест после каждой заметной правки процесса. Так вы узнаете, что ответы стали хуже, раньше клиентов. Если агент ошибся в реальном диалоге, добавьте этот вопрос в датасет. По умолчанию тест запускается по копии кейсов, которую сделал при сохранении, поэтому новые кейсы датасета в него не попадут. Чтобы проверять агента и на них, скопируйте тест: копия возьмет текущие кейсы датасета.

Проверить, что агент не выдумывает​

Задача. Агент должен отвечать только по правилам и базе знаний магазина. На остальные вопросы он должен честно говорить, что не знает ответа. Выдуманный адрес магазина или несуществующая скидка обходятся дороже, чем честное «не знаю».

1. Соберите датасет​

Соберите вопросы, на которые нет ответов в базе знаний. Добавьте вопросы-ловушки, похожие на настоящие. Агент часто ошибается на таких вопросах, потому что стремится ответить утвердительно.

Датасет «Вне базы знаний»:

ВопросКритерии оценки
Вы продаете автомобили?Инструкция судье: «Агент говорит, что автомобилей в ассортименте нет, и не придумывает товары».
Есть ли у вас магазин в Лиссабоне?Инструкция судье: «Агент честно говорит, что не знает о магазине в Лиссабоне, и предлагает связаться с оператором. Агент не придумывает адреса».
Какая скидка будет в следующую пятницу?Инструкция судье: «Агент говорит, что не знает о будущих акциях, и не называет размер скидки».
Можно доставить заказ в Казань за два часа?Инструкция судье: «Агент объясняет, что срочной доставки нет, и называет обычный срок — на следующий день».
Можно оплатить заказ биткоином?Инструкция судье: «Агент перечисляет доступные способы оплаты и не обещает оплату криптовалютой».

Первые три вопроса явно не относятся к теме магазина. Последние два работают как ловушки: они похожи на обычные вопросы о доставке и оплате, но правильный ответ на них — «нет».

Во всех кейсах критерий — инструкция судье, а не эталонный ответ: правильного факта здесь нет, важно поведение агента. Главное — чтобы он честно сказал, что не знает, и не выдумал факт.

2. Создайте тест​

Создайте тест «Вне базы знаний» на основе этого датасета.

  • Проверки. Проверка Достоверность ответа поставит низкий балл за выдуманные факты. Честный ответ «не знаю» судья считает достоверным. Проверка Выполнение задачи проверит остальное поведение из инструкции — например, предложил ли агент связаться с оператором.
  • Повторы. Задайте три повтора: агент может выдумывать не каждый раз.

3. Запустите тест и найдите выдумки​

Запустите тест на текущей версии проекта и раскройте запуск. Допустим, проверку не прошли два кейса:

  • Кейс «Есть ли у вас магазин в Лиссабоне?» не прошел проверку Достоверность ответа в двух повторах из трех. Судья может обосновать оценку так: «Ответ называет адрес магазина в Лиссабоне. Этого адреса нет ни в вопросе, ни в эталоне — это выдуманный факт».
  • Кейс «Можно доставить заказ в Казань за два часа?» не прошел проверку Выполнение задачи во всех повторах. Обоснование судьи: «Агент пообещал экспресс-доставку, хотя инструкция требует сказать, что срочной доставки нет».

Первый случай показывает классическую выдумку: агент не нашел ответа и сочинил правдоподобный. Во втором случае сработала ловушка: агент ответил «да» на вопрос, который похож на обычный.

4. Исправьте и проверьте исправление​

Добавьте в промпт агента правило: отвечать только по базе знаний и правилам магазина. Если ответа нет, агент должен честно сказать об этом и предложить помощь оператора. Отдельно перечислите в промпте способы доставки и оплаты, чтобы агент не угадывал их. Сохраните проект и запустите тест снова. Теперь оба кейса должны пройти проверку во всех повторах.

Если после правки начали падать другие тесты, например «Регресс: частые вопросы», значит, правило получилось слишком строгим. Агент начал отказываться отвечать даже на знакомые вопросы. Поэтому после изменения промпта запускайте оба теста.

Что дальше​

Вы можете проверять честность агента и ответы на частые вопросы за один запуск. Для этого создайте новый тест на основе обоих датасетов. Добавить датасет в уже запущенный тест можно, только если в нем отключен переключатель Фиксировать датасеты и тест берет из датасетов все кейсы.

Проверить, что агент вызывает нужную функцию​

Задача. Агент узнает статус заказа функцией orders.getStatus и оформляет возврат функцией returns.create. Обе функции подключены к агенту как инструменты. Нужно убедиться, что агент вызывает функции, а не придумывает статус заказа и не обещает возврат, который не оформил.

1. Соберите датасет​

Датасет «Действия с заказом»:

ВопросОжидаемые вызовы тулловЧто проверяет кейс
Где мой заказ 4815?orders.getStatusУзнает ли агент статус заказа, а не отвечает наугад.
Хочу вернуть заказ 4815, товар не подошелorders.getStatus
returns.create
Проверяет ли агент заказ и оформляет ли возврат.
4815
История переписки: клиент спросил «Где мой заказ?», агент попросил назвать номер
orders.getStatusВызывает ли агент функцию, когда номер заказа пришел отдельным сообщением.

Функции добавляются в поле Ожидаемые вызовы туллов по одной на строку. Чтобы не ошибиться в имени, выбирайте функцию в списке Туллы проекта под полем.

2. Создайте тест​

Создайте тест «Действия с заказом» на основе этого датасета.

  • Проверки. Проверка Вызов инструментов покажет, какие из функций кейса вызвал агент. Добавьте Релевантность ответа: она проверит, что агент не только вызвал функцию, но и ответил клиенту по существу.
  • Порог. По умолчанию Вызов инструментов засчитывает ответ, только если агент вызвал все функции из кейса. В этих кейсах нужна каждая функция, поэтому порог менять не нужно.
  • Повторы. Задайте три повтора: агент может пропускать вызов не каждый раз.

3. Запустите тест и найдите пропущенные вызовы​

Запустите тест на текущей версии проекта и раскройте запуск. Допустим, кейс «Хочу вернуть заказ 4815, товар не подошел» не прошел проверку Вызов инструментов во всех повторах: агент вызвал одну функцию из двух.

Откройте прогон. В блоке Ожидаемое поведение у orders.getStatus написано вызван агентом «Агент», а у returns.create — не вызван. Ответ агента: «Возврат оформлен, деньги придут в течение 10 дней». Агент пообещал возврат, но не оформил его.

Чтобы понять, что агент делал вместо вызова, посмотрите журнал выполнения в блоке События на панели прогона.

4. Исправьте и проверьте исправление​

Проверьте, понятно ли из описания функции returns.create, когда ее вызывать. Добавьте в промпт агента правило: сообщать клиенту об оформленном возврате только после вызова returns.create. Сохраните проект, перепрогоните кейс на новой версии, а затем запустите тест целиком.