Можно ли запустить процесс проверки в формах rasa-core после того, как он задан перед активацией формы? - PullRequest
1 голос
/ 09 мая 2019

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

my action.py настроен на поиск имени, пищи, количества и адресаи работает, если inform пусто или не имеет имени * inform{food:pizza}, к которому относится action_food_form, и заполнит все необходимые нам ячейки в форме и проверит имя на prev_customers

prev_customers = [kevin, ...]

пример (истории.md)

Можем ли мы проверить слот name:kevin и проверить, находится ли он в prev_customers вместо пропуска этого слота без проверки?

Попробуйте проверить все слоты, даже если они уже установлены, прежде чем двигаться вперед в следующем слоте required_

* inform{name: kevin, food:pizza}  // [pizza](food) for [kevin](name)
  - action_food_form
  - form{"name":"action_food_form'}
  - form{"name":null}
   .
   .
   .

1 Ответ

0 голосов
/ 18 июня 2019

вот это Раса Дев :-) Вы можете переписать функцию validate здесь .

Возможно, что-то в этом роде:

    def validate(self, dispatcher, tracker, domain):
        # type: (CollectingDispatcher, Tracker, Dict[Text, Any]) -> List[Dict]
        """Extract and validate value of requested slot.
        If nothing was extracted reject execution of the form action.
        Subclass this method to add custom validation and rejection logic
        """

        # extract other slots that were not requested
        # but set by corresponding entity or trigger intent mapping
        slot_values = self.extract_other_slots(dispatcher, tracker, domain)

        slot_value = slot_values.get("slot_name")
        events = []
        if not_is_valid(slot_value):
           events.append(SlotSet("slot_name", "slot_value"))

        # TODO validate others

        return events

...