Как составить кейс
Кейс описывает одну ситуацию: что пользователь пишет агенту и какой ответ вы от агента ждете. Кейсы вы составляете в редакторе датасета. Обязателен только вопрос. Остальное добавьте, если от этого зависит ответ агента или его проверка.
Входные данные
В группе Вход карточки кейса вы задаете, что платформа отправит в процесс в этом кейсе: вопрос, историю диалога и дополнительные данные. Данные, общие для всех кейсов, задаются для всего датасета.
Вопрос
В поле Вопрос напишите сообщение так, как его написал бы пользователь. Например: «Сколько стоит доставка?» или «Можно вернуть товар без чека?».
История диалога
Некоторые сообщения понятны агенту только в контексте диалога. Например, клиент спросил, где его заказ, агент попросил назвать номер, и клиент присылает «4815». Чтобы проверить ответ на такое сообщение, укажите «4815» в поле Вопрос и добавьте в кейс историю переписки:
-
В группе История переписки нажмите Реплика, выберите автора Пользователь и введите «Где мой заказ?».
-
Снова нажмите Реплика, выберите автора Агент и введите «Назовите, пожалуйста, номер заказа»:
Платформа записывает историю переписки в диалог как есть, включая реплики агента, а затем отправляет вопрос. Процесс выполняется один раз — в ответ на сам вопрос, но агент видит историю так, будто этот диалог уже был. Учтите, что агент помнит не весь диалог, а только последние сообщения: их число задается на вкладке Контекст в настройках блока Агент. Если история в кейсе длиннее, ее начало агент не увидит.
Дополнительные данные
Процесс может отвечать по-разному в зависимости от данных, которые приходят вместе с сообщением: города, тарифа, номера договора. Чтобы проверить такие ответы, передайте данные в кейсе в группе Свои поля входа.
Например, агент называет стоимость доставки по городу клиента. Чтобы проверить ответ на вопрос «Сколько стоит доставка?» для Казани:
-
В группе Свои поля входа нажмите Поле входа.
-
В поле ключ введите
city, в поле значение — «Казань»:
Город придет в процесс вместе с вопросом, в объекте data.customData запроса. Чтобы ответ агента зависел от города, используйте это значение в процессе:
- в промпте агента или в параметрах блока — подстановкой
{{ request.data.customData.city }}. Например, добавьте в промпт строкуГород клиента: {{ request.data.customData.city }}; - в блоках Код и Условие — выражением
Context.getRawRequest().data.customData.city. ФункцияgetRawRequestиз коллекции Context возвращает полные данные запроса.
Чтобы проверить ответы для нескольких городов, добавьте по кейсу на каждый город: удобнее всего скопировать готовый кейс кнопкой Копировать кейс и поменять значение.
Данные для всех кейсов
Если процессу во всех кейсах нужны одни и те же данные, задайте их один раз для всего датасета, а не в каждом кейсе. Например, агент отвечает по-разному в зависимости от тарифа клиента, а датасет проверяет ответы для тарифа premium.
В группе Вход всего датасета в поле Настройки канала (JSON) укажите {"tariff": "premium"}:
Процесс будет получать тариф вместе с каждым вопросом. В промпт агента его подставит выражение {{ request.data.customData.tariff }}, так же как дополнительные данные из кейса.
Значение из кейса приоритетнее общего. Например, чтобы в одном кейсе проверить ответ для тарифа basic, добавьте в него поле входа tariff со значением «basic». Процесс получит basic в этом кейсе и premium — в остальных.
Ожидаемый результат
В группе Критерии оценки карточки кейса вы описываете, каким должен быть ответ агента: что в нем сказано, какая у него структура и какие функции агент вызовет.
Правильный ответ
Эталон — это правильный ответ или инструкция для судьи. Задайте его, если вам важно, что именно ответит агент. Выберите режим:
- Текст ответа — если правильный ответ можно написать заранее, например стоимость или срок. В поле Эталонный ответ напишите его: «Доставка по Казани стоит 300 рублей, курьер привезет заказ на следующий день». Судья сверяет с эталоном смысл ответа, а не формулировку: ответ «Курьер привезет заказ завтра, доставка по Казани — 300 рублей» он тоже засчитает.
- Инструкция — если правильный ответ нельзя написать заранее и важно поведение агента. В поле Инструкция судье опишите, что судья должен проверить в ответе: «Агент объясняет, что вернуть товар можно в течение 14 дней по номеру заказа, и не требует чек».
Если правильных ответов несколько и они различаются по содержанию, добавьте каждый кнопкой Еще вариант ответа. Судья сравнит ответ со всеми вариантами сразу. Обычно достаточно совпасть с одним из них, но судья может немного снизить балл за то, чего нет в других вариантах.
Эталон обязателен только для проверки Выполнение задачи: по ней судья сравнивает ответ агента с эталоном. Кейсы без эталона по этой проверке не оцениваются.
По проверкам Релевантность ответа и Достоверность ответа судья оценит ответ и без эталона. Если эталон задан, он поможет судье:
- по Релевантности — понять, чего ждет вопрос;
- по Достоверности — сверить факты в ответе: ответ, который противоречит эталону, получит низкий балл.
Проверки вы выбираете, когда создаете тест.
Структура ответа
Если процесс передает ответ агента в другую систему, например в CRM, ответ должен быть JSON-объектом с нужными полями. Чтобы проверить формат ответа, опишите его JSON-схемой:
-
В группе Критерии оценки нажмите JSON-схема:
-
В поле JSON-схема ответа укажите схему в формате JSON Schema. Например, ответ должен содержать тему обращения и признак срочности:
{
"type": "object",
"required": ["topic", "urgent"],
"properties": {
"topic": { "enum": ["delivery", "payment", "return"] },
"urgent": { "type": "boolean" }
}
}В этой схеме:
"type": "object"— ответ должен быть JSON-объектом;required— поля, без которых ответ не пройдет проверку:topicиurgent;properties— какие значения допустимы в полях: вtopic— одно из значенийdelivery,paymentилиreturn, вurgent—trueилиfalse.
Если в поле не JSON или не схема, датасет не сохранится.
Чтобы ответы сверялись со схемой, добавьте в тест проверку Соответствие JSON Schema. Кейсы без схемы по этой проверке не оцениваются.
Вызовы инструментов
Агент выполняет действия через инструменты: например, проверяет статус заказа или оформляет возврат. Чтобы проверить, что агент вызвал нужные функции:
-
В группе Критерии оценки нажмите Ожидаемые вызовы туллов:
-
В поле Ожидаемые вызовы туллов перечислите функции по одной на строку в формате
коллекция.функция, напримерorders.getStatus. Под полем, в списке Туллы проекта, перечислены функции, которые подключены к агентам проекта как инструменты. Нажмите на функцию, чтобы добавить ее в поле.
Чтобы проверить, вызвал ли агент эти функции, добавьте в тест проверку Вызов инструментов. Результатом будет доля функций из списка, которые агент вызвал, а порядок вызовов и аргументы не учитываются. Кейсы без списка по этой проверке не оцениваются.
Пример датасета
Агент поддержки интернет-магазина отвечает на вопросы о доставке, возврате и статусе заказа. Датасет «Доставка и возврат» для него может выглядеть так:
| Вопрос | Что еще есть в кейсе | Какой ответ правильный |
|---|---|---|
| Сколько стоит доставка? | Поле входа city со значением «Казань» | Эталонный ответ: «Доставка по Казани стоит 300 рублей, курьер привезет заказ на следующий день». |
| Можно вернуть товар без чека? | — | Инструкция судье: «Агент объясняет, что вернуть товар можно в течение 14 дней по номеру заказа, и не требует чек». |
| 4815 | История переписки: клиент спросил, где его заказ, а агент попросил назвать номер | Инструкция судье: «Агент сообщает статус заказа 4815 и не просит номер повторно». |