Примеры тестов
В этом разделе собраны три примера для агента поддержки интернет-магазина. Агент отвечает на вопросы о доставке, оплате, возврате и статусе заказа. Примеры показывают весь процесс: как собрать датасет, настроить тест, разобрать результат и исправить агента. Вы можете взять эти кейсы за образец и подставить в них свои вопросы и эталоны. Как собрать датасет под свои задачи, читайте в разделе Как собрать хороший датасет.
Цифры и обоснования судьи в примерах условные — они показывают, как выглядит результат и как его понимать.
Для всех примеров понадобятся:
- LLM, подключенная в проекте, — она будет моделью-судьей;
- сохраненная версия проекта — на ней вы запустите тест.
Проверить, не сломала ли правка промпта ответы
Задача. Вы сокращаете промпт агента, чтобы он отвечал быстрее и тратил меньше токенов. Нужно убедиться, что агент по-прежнему правильно отвечает на частые вопросы клиентов.
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.getStatusreturns.create | Проверяет ли агент заказ и оформляет ли возврат. |
| 4815 История переписки: клиент спросил «Где мой заказ?», агент попросил назвать номер | orders.getStatus | Вызывает ли агент функцию, когда номер заказа пришел отдельным сообщением. |
Функции добавляются в поле Ожидаемые вызовы туллов по одной на строку. Чтобы не ошибиться в имени, выбирайте функцию в списке Туллы проекта под полем.
2. Создайте тест
Создайте тест «Действия с заказом» на основе этого датасета.
- Проверки. Проверка Вызов инструментов покажет, какие из функций кейса вызвал агент. Добавьте Релевантность ответа: она проверит, что агент не только вызвал функцию, но и ответил клиенту по существу.
- Порог. По умолчанию Вызов инструментов засчитывает ответ, только если агент вызвал все функции из кейса. В этих кейсах нужна каждая функция, поэтому порог менять не нужно.
- Повторы. Задайте три повтора: агент может пропускать вызов не каждый раз.
3. Запустите тест и найдите пропущенные вызовы
Запустите тест на текущей версии проекта и раскройте запуск. Допустим, кейс «Хочу вернуть заказ 4815, товар не подошел» не прошел проверку Вызов инструментов во всех повторах: агент вызвал одну функцию из двух.
Откройте прогон. В блоке Ожидаемое поведение у orders.getStatus написано вызван агентом «Агент», а у returns.create — не вызван.
Ответ агента: «Возврат оформлен, деньги придут в течение 10 дней». Агент пообещал возврат, но не оформил его.
Чтобы понять, что агент делал вместо вызова, посмотрите журнал выполнения в блоке События на панели прогона.
4. Исправьте и проверьте исправление
Проверьте, понятно ли из описания функции returns.create, когда ее вызывать.
Добавьте в промпт агента правило: сообщать клиенту об оформленном возврате только после вызова returns.create.
Сохраните проект, перепрогоните кейс на новой версии, а затем запустите тест целиком.