Rasa3触发意图时会触发三次Action

我在使用Rasa3时,触发了自己设定的意图:

- regex: user_input_name
  examples: |
    - (?<=查)[a-zA-Z0-9\u4e00-\u9fa5]{2,5}(?=的)

- intent: info_input_name
  examples: |
    - 请帮我查[张三](user_input_name)的性别
    - 帮我查[张三](user_input_name)的性别
    - 查[张三](user_input_name)的性别
    - 我想查[张三](user_input_name)的性别

该意图绑定的action为:

class ActionGetSexByName(Action):

    def name(self):

        return 'action_getSexByName'

    def run(self, dispatcher, tracker, domain):
        usex = "男"
        vall = tracker.get_slot("user_input_name")
        print("slot:")
        print(vall)
        # curcor = Conn.getConn("")
        # mysql = Database()
        sql = "select usex from tuser where uname = '%s'"%vall
        cursor = conn.cursor()

        try:
            cursor.execute(sql)
            resul = cursor.fetchall()
            usex=resul[0][0]
            print("resul")
            print(resul)

            return [SlotSet("db_get_sex",usex)]
            
        except Exception as e:
            print("Exception:")
            print(e)
            conn.rollback
            return [SlotSet("db_get_sex",usex)]
        finally:
            cursor.close()

但是每次触发该意图时都会触发三次Action 导致了我的运行速度极其缓慢,每次触发这个意图都要经过三次Action,访问三次数据库。

img

img

因为在触发插槽时触发了一次,在roles里又触发了两次 导致性能过差,第一次的Action还接收不到数据,建议使用FormValidationAction,Action结合使用 FormValidationAction不能返回slot值 Action可以返回slot。使用FormValidationAction的extract方法进入类,使用Action的run方法进行返回数据。具体的我等下会出一篇文章