Обработка форм — важнейший компонент создания эффективных чат-ботов с использованием Rasa — платформы с открытым исходным кодом для диалогового искусственного интеллекта. В этой статье блога мы рассмотрим различные методы обработки форм в Rasa, используя разговорный язык и практические примеры кода. Независимо от того, являетесь ли вы новичком или опытным разработчиком, это руководство предоставит вам ценную информацию по расширению возможностей вашего чат-бота.
Метод 1: использование класса FormAction
Rasa предоставляет встроенный класс FormAction
, который упрощает обработку форм. Вы можете определить форму с необходимыми слотами, правилами проверки и действиями отправки. Вот пример простого класса формы:
from typing import Dict, Text, Any, List, Union
from rasa_sdk import Action, Tracker
from rasa_sdk.events import SlotSet
from rasa_sdk.executor import CollectingDispatcher
class MyFormAction(Action):
def name(self) -> Text:
return "my_form_action"
def run(self, dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
# Retrieve slot values
name = tracker.get_slot("name")
email = tracker.get_slot("email")
# Perform form validation and submission logic
if not name:
dispatcher.utter_message(text="Please provide your name.")
return [SlotSet("name", None)]
if not email:
dispatcher.utter_message(text="Please provide your email.")
return [SlotSet("email", None)]
# Perform other actions or API calls
# Submit the form
dispatcher.utter_message(text="Form submitted successfully!")
return []
Метод 2: прямая обработка слотов и объектов
В некоторых случаях вам может потребоваться обрабатывать заполнение слотов формы вручную без использования класса FormAction
. Вы можете извлекать значения слотов непосредственно из сообщений пользователя, используя возможности Rasa NLU. Вот пример:
from typing import Dict, Text, Any, List, Union
from rasa_sdk import Action, Tracker
from rasa_sdk.events import SlotSet
from rasa_sdk.executor import CollectingDispatcher
class MySlotFillingAction(Action):
def name(self) -> Text:
return "my_slot_filling_action"
def run(self, dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
# Retrieve entities
name_entity = next(tracker.get_latest_entity_values("name"), None)
email_entity = next(tracker.get_latest_entity_values("email"), None)
# Fill slots based on entities
if name_entity:
return [SlotSet("name", name_entity)]
if email_entity:
return [SlotSet("email", email_entity)]
# Ask for missing slots
dispatcher.utter_message(text="Please provide the missing information.")
return []
Метод 3: использование настраиваемых действий и событий
Вы также можете обрабатывать заполнение форм с помощью настраиваемых действий и событий. Такой подход обеспечивает большую гибкость и контроль над процессом обработки форм. Вот пример:
from typing import Dict, Text, Any, List, Union
from rasa_sdk import Action, Tracker
from rasa_sdk.events import SlotSet, Form
from rasa_sdk.executor import CollectingDispatcher
class CustomFormAction(Action):
def name(self) -> Text:
return "custom_form_action"
def run(self, dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
# Retrieve slot values
name = tracker.get_slot("name")
email = tracker.get_slot("email")
# Perform form validation and submission logic
if not name:
dispatcher.utter_message(text="Please provide your name.")
return [SlotSet("name", None), Form("my_form")]
if not email:
dispatcher.utter_message(text="Please provide your email.")
return [SlotSet("email", None), Form("my_form")]
# Perform other actions or API calls
# Submit the form
dispatcher.utter_message(text="Form submitted successfully!")
return []
В этой статье мы рассмотрели несколько методов обработки форм в чат-ботах Rasa. Вы можете использовать встроенный класс FormAction
, напрямую обрабатывать слоты и сущности или создавать собственные действия и события. Каждый подход предлагает свои преимущества в зависимости от ваших конкретных требований. Освоив обработку форм в Rasa, вы сможете создавать надежные и интерактивные диалоговые возможности для своих пользователей.