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