Перейти к содержанию

Формы

Понятие Формы

Один из наиболее распространённых шаблонов диалога — сбор нескольких фрагментов информации от пользователя для выполнения задачи (например, заказ товара, вызов API, поиск в базе данных и т.д.). Обычно это реализуется с помощью форм. Форма — это набор слотов, ожидающих заполнения. Когда в Rasa запускается форма, она перебирает слоты и задаёт соответствующие вопросы, пока все они не будут заполнены действительными данными.

Чтобы использовать формы с Rasa Open Source, необходимо убедиться, что политика правил добавлена в конфигурацию. Например:

policies:
  - name: RulePolicy

Эта политика в Wisebot настроена в общих настройках для всех проектов.

Image

Диалоги подходят для моделирования потоков разговоров, но им не хватает функций для реализации надёжной бизнес-логики. Простая бизнес-логика включает процессы сбора необходимой информации для вызова API, проверки собранной информации, уведомления пользователя и т.п. Расширенная бизнес-логика может принимать форму дерева решений, где следующий вопрос зависит от комбинации предыдущих ответов.

Определение формы

В Wisebot можно создать форму, нажав кнопку + рядом с группой и выбрав «Форма». Вы можете изменить название формы на боковой панели. Название категории (истории), в которой создаётся форма, должно быть на английском языке. Это ограничение будет снято в будущем.

Image Image

Создадим простую форму, собирающую ФИО и телефон. Для добавления ячейки щёлкните значок + в нижней части узла, выберите тип ячейки для хранения ответа пользователя и введите вопрос, который задаст помощник.

Image

Обратите внимание, что при создании новых слотов через этот интерфейс они не будут атрибутированы. Если необходимо заполнить слот с определёнными элементами (например, categorical, boolean и т.д.), создайте его в меню слотов и выберите опцию «Использовать существующий». Если слоты уже созданы заранее, их можно выбрать из выпадающего списка. Все существующие слоты сгруппированы по типам.

Image

В данном случае добавляется текстовый слот для хранения Фамилии, Имени и Отчества в одной строке. Далее сформируйте вопрос, который будет задан перед считыванием информации с ответа пользователя.

Image

Затем снова щёлкаем на значок + в нижней части узла и выбираем существующий слот Phone.

Image

Для удаления слота используйте режим редактирования узлов, доступный при нажатии клавиши Shift или через интерфейс. В режиме редактирования рядом с линиями, связывающими узлы формы (слоты), появятся кнопки с иконкой корзины для удаления.

Image

Слоты, созданные через интерфейс форм, удаляются при удалении вопроса. Предыдущие слоты сохраняются.

Итоговая схема формы:

Image

Настройка извлечения ответов

По умолчанию весь ответ пользователя сохраняется в слоте. Возможно, потребуется изменить это поведение для более естественного разговора.

Сопоставление слота с сущностью

Например, при запросе имени пользователь может ответить: «Меня зовут Петров Николай Борисович», где Петров Николай Борисович — извлечённая сущность.

Image

Нажмите на поле вопроса, откройте панель слота и на вкладке "Извлечение" выберите "от сущности", указав соответствующую сущность для сопоставления с этим слотом.

Image

В этом случае слот заполняется только сущностью ФИО, даже если пользователь ввёл дополнительные слова, например: «меня зовут Чесноков Сергей Евгеньевич».

Условное сопоставление слота с намерением

Для логических слотов, принимающих значения true или false, можно сопоставить намерения подтверждения и отрицания.

Image

Комбинирование экстракций

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

Image

Проверка вводимых пользователем данных

Для проверки введённых данных перейдите на вкладку Проверка, включите проверку и укажите критерии. Также предоставьте сообщения для недействительных и действительных ответов, используя синтаксис {slot_name} для ссылки на значения слотов.

Пример проверки слота номера телефона:

Image

Доступны различные параметры проверки, такие как начало или конец с определённого символа, наличие определённых знаков или слов, соответствие электронной почте и др.

Условная бизнес-логика

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

Добавление условий:

Image Image

Редактирование веток:

Image Image

Интеграция форм в истории

Для интеграции формы в истории добавьте её начало. После завершения формы можно продолжить разговор.

Пример активации формы:

Image

Добавьте «нет активного цикла», чтобы форма не запускалась повторно.

Image

Работа с контекстными вопросами

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

Image

Во время обучения в домен будет добавлена категория requested_slot, содержащая все слоты форм.