Rasa Chatbot:处理重复场景
Rasa Chatbot: Handling repeated scenario
我在后续机器人中工作,每个用户都有很多任务,当用户询问 his/her 任务时,机器人将使用 API 获取任务,然后机器人将通过一个然后询问用户 he/she 今天是否能够完成它。如果用户说是,任务将标记为已完成,如果没有,机器人将询问用户完成日期。
我在 Action 中通过迭代任务和分派模板厌倦了很多解决方案,但分派循环停止后再也不会返回。
class ActionRequestTasks(Action):
def name(self):
return "action_request_tasks"
@staticmethod
def json2obj(data):
return json.loads(data, object_hook=lambda d: namedtuple('X', d.keys())(*d.values()))
def run(self, dispatcher, tracker: DialogueStateTracker, domain):
response = requests.get('url', headers=headers)
tasks_wrapper = self.json2obj(response.text)
data = tasks_wrapper.Data
first_message = "You have {} delayed tasks, I will help you to go through all of them".format(len(data))
dispatcher.utter_message(first_message)
for task in data:
task_message = "Task Title {}\nComplete percentage {}\nStart Date {}\nFinish Date{}".format(task.Title,
task.PercentComplete,
task.StartDate,
task.FinishDate)
dispatcher.utter_message(task_message)
dispatcher.utter_template("utter_able_to_finish", tracker)
return []
这听起来像是 Form
的完美应用。您可以在 required_slots()
方法中调用 API,然后根据用户的响应使用 validation 填充槽。表单将 运行 直到所有槽都填满,然后您可以决定如何处理 submit()
方法中的槽(例如,通过另一个请求更新每个槽的任务状态)。
我建议阅读 docs on Form setup and also checking out the code for formbot 以查看有效的实现
我在后续机器人中工作,每个用户都有很多任务,当用户询问 his/her 任务时,机器人将使用 API 获取任务,然后机器人将通过一个然后询问用户 he/she 今天是否能够完成它。如果用户说是,任务将标记为已完成,如果没有,机器人将询问用户完成日期。
我在 Action 中通过迭代任务和分派模板厌倦了很多解决方案,但分派循环停止后再也不会返回。
class ActionRequestTasks(Action):
def name(self):
return "action_request_tasks"
@staticmethod
def json2obj(data):
return json.loads(data, object_hook=lambda d: namedtuple('X', d.keys())(*d.values()))
def run(self, dispatcher, tracker: DialogueStateTracker, domain):
response = requests.get('url', headers=headers)
tasks_wrapper = self.json2obj(response.text)
data = tasks_wrapper.Data
first_message = "You have {} delayed tasks, I will help you to go through all of them".format(len(data))
dispatcher.utter_message(first_message)
for task in data:
task_message = "Task Title {}\nComplete percentage {}\nStart Date {}\nFinish Date{}".format(task.Title,
task.PercentComplete,
task.StartDate,
task.FinishDate)
dispatcher.utter_message(task_message)
dispatcher.utter_template("utter_able_to_finish", tracker)
return []
这听起来像是 Form
的完美应用。您可以在 required_slots()
方法中调用 API,然后根据用户的响应使用 validation 填充槽。表单将 运行 直到所有槽都填满,然后您可以决定如何处理 submit()
方法中的槽(例如,通过另一个请求更新每个槽的任务状态)。
我建议阅读 docs on Form setup and also checking out the code for formbot 以查看有效的实现