本文继续围绕工业级业务对话平台和框架Rasa,对Rasa项目实战之电商零售Customer Service智能业务对话机器人主要业务功能所使用的微服务进行解析,并通过Rasa Interactive的调试来帮助理解其背后的逻辑。
一、Rasa对话机器人项目实战之电商零售对话机器人业务功能微服务解析与调试演示
- 取消订单流程解析及Rasa Interactive调试
首先运行rasa visualize命令查看可视化流程图:
运行完成后自动弹出可视化页面,下面的局部流程图显示了如何取消一个订单,可以看到有两条路径:
-START->cancel my order->cancel_form->action_cancel_order->END
-START->cancel_form->action_cancel_order->END
首先检查stories文件中关于取消订单的训练数据,下面列出的是当激活cancel_form时,用户可以选择退出:
由于通常是使用rule来控制form行为的,所以也需要检查rules文件,下面找到了跟取消订单相关的rules的配置信息:
-第1部分,从配置看需要使用cancel_form来收集需要取消订单的用户email
检查domain中关于form的定义,确实看到了这个form唯一要收集的信息就是用户email:
-第2部分,提交cancel_form,然后调用微服务执行订单取消操作,不需要提交survey的情况(因为之前已经完成了)
-第3部分,提交cancel_form,然后调用微服务执行订单取消操作,接下来需要提交survey(因为从未提交过survey)
接下来运行命令rasa run actions –debug以调试模式启动action server:
运行命令rasa interactive进入交互式对话模式:
输入信息:I want to cancel my order:
确认意图识别正确(这里可以看到order_cancel的预测confidence值为0.96,说明是通过机器学习模型预测获得的),继续执行:
确认继续执行提示的action:
可以看到提示是否运行cancel_form,这与上面介绍的第1部分rule定义的步骤完全一致:
继续执行cancel_form,完成后获得以下反馈信息:
Sorry to hear you want to cancel! To help find your order, can you please provide your email address?
并且可以看到当前运行的form需要向用户收集email信息:
输入Yes确认,之后输入email:
可以看到正确提取了email信息,所以继续执行:
继续执行form:
这时slot “email”已经填充了值,并且当前运行的cancel_form已经完成信息收集,所以active_loop被设置为null,继续执行微服务action_cancel_order:
检查action server的输出日志,发现已经执行对应的微服务:
实际返回的结果是:
Hmm, seems like we don't have an order associated with that email
说明没有找到上面输入的email example@gmail.com所对应的订单,我们先按照流程继续执行survey_form:
确认继续执行,选择选项3:
Slot “rating”已填充值,所以继续运行form:
提供反馈信息,值得注意的是这里把no识别为intent “deny”:
输入Yes继续执行:
继续运行form:
然后运行微服务action_survey_submit:
微服务执行完成:
上面提到输入的email没有找到对应的订单,那么检查一下订单表,看一下哪些emails有订单信息:
这次使用me@rasa.com来执行订单取消操作,输入对话信息:
Can you cancel my order?
确认继续执行:
继续运行提示的action:
继续运行cancel_form收集信息:
从上面可以看到这次并没有要求用户再次输入email,这是因为slot “email”已经填充了值,而代码逻辑设计时并没有在微服务完成后清除这个slot的值,所以按照现有逻辑,我们需要重启一个新的对话:
确认继续执行,输入取消订单信息:
确认继续执行:
这时可以看到form需要向用户收集email:
输入之前查看的有订单信息的email:
确认继续执行,这时slot “email”已经正确填充了从实体提取的值:
继续运行form:
按照提示执行微服务action_cancel_order,微服务执行成功,返回结果如下:
Ok, I've cancelled the order for me@rasa.com. If you'd like to reorder, please visit your recent orders in your account history.
检查action server输出日志:
再次检查数据库订单表,可以看到email为me@rasa.com的订单状态(status)已经变为cancelled:
2. 取消订单微服务代码解析
首先检查domain,发现注册了这个微服务:
这是微服务类CancelOrder,它继承自Rasa SDK的Action,主要包括两个方法name()和run():
这是name方法,返回在domain中注册的微服务的action name:
这是run方法:
连接到SQLite3数据库,取cursor,从tracker中获取email信息,传入SQL查询订单信息:
-如果有订单记录,则把status值”cancelled”以及email这两个参数值同时传入SQL update语句对相关订单的状态进行更新,完成后再调用模板action输出结果给用户
-如果没有找到订单记录,则直接调用模板action输出提示信息给用户
这是domain中关于两个模板化actions的定义:
Rasa 3.x 源码高手之路:系统架构、内核算法、源码实现详解:
Rasa 3.x 源码高手之路:基于Transformer的对话机器人RasaPolice:
星空NLP对话机器人论文班:NLP领域10篇最高质量的对话机器人经典论文解密:
Rasa 3.X 智能对话机器人案例开发硬核实战高手之路 (7大项目Expert版本):
Advanced Python硬核实力高手实战之路:架构、算法、源码、案例(81讲):
NLP on Transformers 高手之路137课Pro版: