Освоение обработки форм в Rasa: подробное руководство

Обработка форм — важнейший компонент создания эффективных чат-ботов с использованием 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, вы сможете создавать надежные и интерактивные диалоговые возможности для своих пользователей.