Реализация нескольких форм в Rasa с примерами кода

В Rasa вы можете создать две формы, используя функцию Rasa Forms. Формы позволяют вам собирать структурированную информацию от пользователей в управляемом виде. Вот несколько способов реализации двух форм в Rasa, а также примеры кода:

Метод 1. Использование requested_slotв специальных действиях

from typing import Any, Text, Dict, List
from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher
from rasa_sdk.events import SlotSet
class Form1(Action):
    def name(self) -> Text:
        return "action_form1"
    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
        # Logic to execute for Form1
        return []
class Form2(Action):
    def name(self) -> Text:
        return "action_form2"
    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
        # Logic to execute for Form2
        return []
class ActionSubmit(Action):
    def name(self) -> Text:
        return "action_submit"
    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
        # Logic to handle form submission
        return []

Метод 2: использование FormAction

from rasa_sdk import Tracker, FormValidationAction
from rasa_sdk.executor import CollectingDispatcher
from rasa_sdk.types import DomainDict
class Form1(FormValidationAction):
    def name(self) -> Text:
        return "validate_form1"
    def validate_slot_name(self, slot_value: Any, dispatcher: CollectingDispatcher, tracker: Tracker, domain: DomainDict) -> Dict[Text, Any]:
        # Validate and extract values for slot_name in Form1
        return {"slot_name": slot_value}
    def extract_slot_name(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: DomainDict) -> Dict[Text, Any]:
        # Extract slot_name value for Form1
        return {"slot_name": tracker.latest_message.get("text")}
class Form2(FormValidationAction):
    def name(self) -> Text:
        return "validate_form2"
    def validate_slot_name(self, slot_value: Any, dispatcher: CollectingDispatcher, tracker: Tracker, domain: DomainDict) -> Dict[Text, Any]:
        # Validate and extract values for slot_name in Form2
        return {"slot_name": slot_value}
    def extract_slot_name(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: DomainDict) -> Dict[Text, Any]:
        # Extract slot_name value for Form2
        return {"slot_name": tracker.latest_message.get("text")}

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