System_shy 2023-06-03 10:43 采纳率: 55.6%
浏览 6
已结题

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

  • 写回答

1条回答 默认 最新

  • System_shy 2023-06-08 15:42
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月16日
  • 已采纳回答 6月8日
  • 创建了问题 6月3日

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器