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

Как составить кейс

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

Входные данные​

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

Вопрос​

В поле Вопрос напишите сообщение так, как его написал бы пользователь. Например: «Сколько стоит доставка?» или «Можно вернуть товар без чека?».

История диалога​

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

  1. В группе История переписки нажмите Реплика, выберите автора Пользователь и введите «Где мой заказ?».

  2. Снова нажмите Реплика, выберите автора Агент и введите «Назовите, пожалуйста, номер заказа»:

    История переписки из двух реплик в группе «Вход» карточки кейса

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

Дополнительные данные​

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

Например, агент называет стоимость доставки по городу клиента. Чтобы проверить ответ на вопрос «Сколько стоит доставка?» для Казани:

  1. В группе Свои поля входа нажмите Поле входа.

  2. В поле ключ введите city, в поле значение — «Казань»:

    Поле входа city со значением «Казань» в группе «Свои поля входа» карточки кейса

Город придет в процесс вместе с вопросом, в объекте data.customData запроса. Чтобы ответ агента зависел от города, используйте это значение в процессе:

  • в промпте агента или в параметрах блока — подстановкой {{ request.data.customData.city }}. Например, добавьте в промпт строку Город клиента: {{ request.data.customData.city }};
  • в блоках Код и Условие — выражением Context.getRawRequest().data.customData.city. Функция getRawRequest из коллекции Context возвращает полные данные запроса.

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

Данные для всех кейсов​

Если процессу во всех кейсах нужны одни и те же данные, задайте их один раз для всего датасета, а не в каждом кейсе. Например, агент отвечает по-разному в зависимости от тарифа клиента, а датасет проверяет ответы для тарифа premium.

В группе Вход всего датасета в поле Настройки канала (JSON) укажите {"tariff": "premium"}:

Поле «Настройки канала (JSON)» в группе «Вход всего датасета» с тарифом premium

Процесс будет получать тариф вместе с каждым вопросом. В промпт агента его подставит выражение {{ request.data.customData.tariff }}, так же как дополнительные данные из кейса.

Значение из кейса приоритетнее общего. Например, чтобы в одном кейсе проверить ответ для тарифа basic, добавьте в него поле входа tariff со значением «basic». Процесс получит basic в этом кейсе и premium — в остальных.

Ожидаемый результат​

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

Правильный ответ​

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

  • Текст ответа — если правильный ответ можно написать заранее, например стоимость или срок. В поле Эталонный ответ напишите его: «Доставка по Казани стоит 300 рублей, курьер привезет заказ на следующий день». Судья сверяет с эталоном смысл ответа, а не формулировку: ответ «Курьер привезет заказ завтра, доставка по Казани — 300 рублей» он тоже засчитает.
  • Инструкция — если правильный ответ нельзя написать заранее и важно поведение агента. В поле Инструкция судье опишите, что судья должен проверить в ответе: «Агент объясняет, что вернуть товар можно в течение 14 дней по номеру заказа, и не требует чек».

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

Эталон обязателен только для проверки Выполнение задачи: по ней судья сравнивает ответ агента с эталоном. Кейсы без эталона по этой проверке не оцениваются.

По проверкам Релевантность ответа и Достоверность ответа судья оценит ответ и без эталона. Если эталон задан, он поможет судье:

  • по Релевантности — понять, чего ждет вопрос;
  • по Достоверности — сверить факты в ответе: ответ, который противоречит эталону, получит низкий балл.

Проверки вы выбираете, когда создаете тест.

Структура ответа​

Если процесс передает ответ агента в другую систему, например в CRM, ответ должен быть JSON-объектом с нужными полями. Чтобы проверить формат ответа, опишите его JSON-схемой:

  1. В группе Критерии оценки нажмите JSON-схема:

    Кнопка «JSON-схема» в группе «Критерии оценки» карточки кейса
  2. В поле 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. Кейсы без схемы по этой проверке не оцениваются.

Вызовы инструментов​

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

  1. В группе Критерии оценки нажмите Ожидаемые вызовы туллов:

    Кнопка «Ожидаемые вызовы туллов» в группе «Критерии оценки» карточки кейса
  2. В поле Ожидаемые вызовы туллов перечислите функции по одной на строку в формате коллекция.функция, например orders.getStatus. Под полем, в списке Туллы проекта, перечислены функции, которые подключены к агентам проекта как инструменты. Нажмите на функцию, чтобы добавить ее в поле.

Чтобы проверить, вызвал ли агент эти функции, добавьте в тест проверку Вызов инструментов. Результатом будет доля функций из списка, которые агент вызвал, а порядок вызовов и аргументы не учитываются. Кейсы без списка по этой проверке не оцениваются.

Пример датасета​

Агент поддержки интернет-магазина отвечает на вопросы о доставке, возврате и статусе заказа. Датасет «Доставка и возврат» для него может выглядеть так:

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