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

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

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

prev_customers = [kevin, ...]

пример (stories.md)

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

Попробуйте проверить все слоты, даже если они уже установлены, прежде чем переходить к следующему required_slot?

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

person Franz lom    schedule 09.05.2019    source источник
comment
Я не уверен, что это путь вперед, но я думал добавить дополнительную проверку, если (имя) заполнено до проверки формы, и поэтому form_action не нужно заботиться о установленном слоте   -  person Franz lom    schedule 10.05.2019
comment
Хотелось бы, чтобы на эти вопросы был дан реальный ответ от разработчиков rasa ...   -  person Nicholas Hamilton    schedule 07.06.2019


Ответы (1)


вот Rasa Dev :-) Вы можете перезаписать 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

person Tobias    schedule 18.06.2019