Формы¶
Понятие Формы¶
Один из наиболее распространённых шаблонов диалога — сбор нескольких фрагментов информации от пользователя для выполнения задачи (например, заказ товара, вызов API, поиск в базе данных и т.д.). Обычно это реализуется с помощью форм. Форма — это набор слотов, ожидающих заполнения. Когда в Rasa запускается форма, она перебирает слоты и задаёт соответствующие вопросы, пока все они не будут заполнены действительными данными.
Чтобы использовать формы с Rasa Open Source, необходимо убедиться, что политика правил добавлена в конфигурацию. Например:
Эта политика в Wisebot настроена в общих настройках для всех проектов.
Диалоги подходят для моделирования потоков разговоров, но им не хватает функций для реализации надёжной бизнес-логики. Простая бизнес-логика включает процессы сбора необходимой информации для вызова API, проверки собранной информации, уведомления пользователя и т.п. Расширенная бизнес-логика может принимать форму дерева решений, где следующий вопрос зависит от комбинации предыдущих ответов.
Определение формы¶
В Wisebot можно создать форму, нажав кнопку + рядом с группой и выбрав «Форма». Вы можете изменить название формы на боковой панели. Название категории (истории), в которой создаётся форма, должно быть на английском языке. Это ограничение будет снято в будущем.
Создадим простую форму, собирающую ФИО и телефон. Для добавления ячейки щёлкните значок + в нижней части узла, выберите тип ячейки для хранения ответа пользователя и введите вопрос, который задаст помощник.
Обратите внимание, что при создании новых слотов через этот интерфейс они не будут атрибутированы. Если необходимо заполнить слот с определёнными элементами (например, categorical, boolean и т.д.), создайте его в меню слотов и выберите опцию «Использовать существующий». Если слоты уже созданы заранее, их можно выбрать из выпадающего списка. Все существующие слоты сгруппированы по типам.
В данном случае добавляется текстовый слот для хранения Фамилии, Имени и Отчества в одной строке. Далее сформируйте вопрос, который будет задан перед считыванием информации с ответа пользователя.
Затем снова щёлкаем на значок + в нижней части узла и выбираем существующий слот Phone.
Для удаления слота используйте режим редактирования узлов, доступный при нажатии клавиши Shift или через интерфейс. В режиме редактирования рядом с линиями, связывающими узлы формы (слоты), появятся кнопки с иконкой корзины для удаления.
Слоты, созданные через интерфейс форм, удаляются при удалении вопроса. Предыдущие слоты сохраняются.
Итоговая схема формы:
Настройка извлечения ответов¶
По умолчанию весь ответ пользователя сохраняется в слоте. Возможно, потребуется изменить это поведение для более естественного разговора.
Сопоставление слота с сущностью¶
Например, при запросе имени пользователь может ответить: «Меня зовут Петров Николай Борисович», где Петров Николай Борисович — извлечённая сущность.
Нажмите на поле вопроса, откройте панель слота и на вкладке "Извлечение" выберите "от сущности", указав соответствующую сущность для сопоставления с этим слотом.
В этом случае слот заполняется только сущностью ФИО, даже если пользователь ввёл дополнительные слова, например: «меня зовут Чесноков Сергей Евгеньевич».
Условное сопоставление слота с намерением¶
Для логических слотов, принимающих значения true
или false
, можно сопоставить намерения подтверждения и отрицания.
Комбинирование экстракций¶
Чтобы повысить надёжность извлечения, можно комбинировать методы. Например, сначала проверять наличие сущности, а если её нет, использовать весь ответ или определённое намерение.
Проверка вводимых пользователем данных¶
Для проверки введённых данных перейдите на вкладку Проверка, включите проверку и укажите критерии. Также предоставьте сообщения для недействительных и действительных ответов, используя синтаксис {slot_name}
для ссылки на значения слотов.
Пример проверки слота номера телефона:
Доступны различные параметры проверки, такие как начало или конец с определённого символа, наличие определённых знаков или слов, соответствие электронной почте и др.
Условная бизнес-логика¶
Создавайте сложные потоки вопросов с помощью редактора блок-схем. Например, форма медицинской сортировки может включать вопросы о симптомах и предпочтительной дате встречи, с условиями, зависящими от предыдущих ответов.
Добавление условий:
Редактирование веток:
Интеграция форм в истории¶
Для интеграции формы в истории добавьте её начало. После завершения формы можно продолжить разговор.
Пример активации формы:
Добавьте «нет активного цикла», чтобы форма не запускалась повторно.
Работа с контекстными вопросами¶
Контекстные вопросы зависят от собираемой информации и должны быть явно включены в конфигурации формы.
Во время обучения в домен будет добавлена категория requested_slot, содержащая все слоты форм.