一、HelpDesk智能对话机器人创建incident完整业务流程解析
下面是关于domain文件中关于slot “problem_description”的定义,在这里可以使用key “not_intent”指定哪些值不会触发slot的填充,也可以使用intent指定触发slot填充的intent:
重新训练模型:
模型训练完成后通过持久化操作进行保存:
使用交互式对话模式来深入了解对话机器人创建incident的业务流程。首先确认使用docker命令来启动duckling服务:
docker run -p 8000:8000 rasa/duckling
启动后显示:
以debug模式启动Rasa action server:
运行命令”rasa interactive”进入交互式模式:
启动完成后会显示对话流程可视化图的URL:
点击URL可以看到当前对话的状态:
输入信息:I forgot my password
确认intent识别正确后继续执行:
slot “incident_title”的值被设置为“Problem resetting password”,根据提示需要运行form “open_incident_form”来向用户收集信息:
可以看到当前请求的slot是email,继续执行,输入以下email信息:
模型正确提取了Email信息,确认后继续执行:
slot “email”已经填充了刚才用户输入的值,继续按照提示运行form,这时从对话历史信息中可以看到” requested_slot”的值是priority,表明对话机器人当前需要向用户收集关于incident的” priority”:
检查可视化对话流程图,已经相应地进行了动态更新:
继续执行,根据对话机器人输出的button选项选择priority的值:
这里选择创建priority为low的incident,所以选择选项1:
这时slot “priority”的值被设置为”low”,继续根据提示运行form来完成信息收集,从输出可以看到,接下来需要收集的信息是” problem_description”:
输入问题描述:please reset my password
确认继续执行:
这时slot “problem_description”已经填充了刚才输入的信息,继续运行form完成信息收集:
“requested_slot”的值为”confirm”,表示当创建incident的信息收集完成后,需要用户确认是否要提交form:
选择Yes:
继续运行form:
这时可以看到这个form的所有slots都已经收集完成,下面是domain中关于这个form的定义,其中required_slots这个key定义了上面对话机器人需要依次向用户收集的信息:
接下来需要调用微服务action_open_incident,可视化流程图更新如下
二、创建intent的微服务解析
执行微服务action_open_incident,在action server端的日志输出如下:
这时查看可视化流程图,action_open_incident这一步由虚线框变为了实线框,表明已经执行完成:
这是微服务类:
需要实现接口Action中的name方法:
实现接口Action中的run方法:
从tracker中获取前面对话机器人向用户收集的slot信息:
如果用户选择取消创建incident,则调用模板输出消息,并且需要重置所有slot的值:
如果是本地模式,则构建一个message:
如果是调用第三方incident管理系统snow接口,则可以看到需要调用接口方法create_incident来创建incident,调用完成后返回response,再根据response解析出incident number,如果存在有效的incident number,则输出信息提示用户incident创建成功,否则从response中取出error信息返回给用户。
在方法的最后,需要重置当前所有slot的值为空,以便为下一次接受用户创建incident的请求做好准备,同时在这里会通过触发SlotSet事件来把当前email的值赋给另外一个slot “previous_email”,这样可以在某些场景下不需要用户再次输入email。