本文继续围绕工业级业务对话平台和框架Rasa,对Rasa项目实战之电商零售Customer Service智能业务对话机器人主要业务功能的流程以及所使用的微服务进行解析,并通过Rasa Interactive的调试来帮助理解其背后的逻辑。
一、Rasa对话机器人项目实战之电商零售对话机器人业务功能流程及微服务解析与调试演示
- 订单退货流程解析及使用Rasa Interactive调试
首先运行rasa visualize命令查看可视化流程图:
运行完成后自动弹出可视化页面(页面文件保存路径为\examples\ecommerce-customer-service\graph.html),下面的局部流程图显示了如何进行订单退货操作,可以看到有两条路径:
-START->Which items are available to return->return_form->action_return->END
-START->return_form->action_return->(survey_form)->END
在Rasa框架中,通常会使用核心组件form来收集用户信息,然后使用stories和rules中的训练数据来训练在本文开始展示的DAG图中所配置的相关graph 组件,从而完成具体业务流程。我们首先看一下stories文件中关于订单退货相关的训练数据,在这个文件中只提到了当激活return_form时,用户中途可以选择退出的情况:
接下来看一下rules文件中是否有相关的训练数据,在这个文件中找到了跟订单退货相关的rules的配置信息:
-第1部分,根据识别到的intent “return”激活return_form来收集需要进行订单退货操作的用户的email
检查domain中关于return_form的定义,可以看到这个form唯一要收集的信息就是用户email:
-第2部分,提交return_form,然后调用微服务执行订单退货操作,适用于不需要提交survey的情况(因为之前已经完成了,是否已经提交survey会通过一个slot是否有值来进行判断)
-第3部分,提交return_form,然后调用微服务执行订单退货操作,接下来需要提交survey(因为从未提交过survey,是否已经提交survey会通过一个slot是否有值来进行判断)
下面通过交互式对话模式详细剖析整个业务处理过程。首先运行命令rasa run actions –debug以调试模式启动action server:
运行命令rasa interactive进入交互式对话模式,由于不需要重新训练各个graph组件,所以直接load就可以使用了:
输入信息:Which items are available to return?:
确认意图识别正确,继续执行:
确认继续执行提示的action,输出如下:
可以看到提示是否运行return_form,这与上面介绍的第1部分rule定义的步骤完全一致, 继续执行return_form,完成后获得以下反馈信息:
Let's start that return. To help find your order, can you please provide your email address?
可以看到当前运行的form需要向用户收集email信息
输入Yes确认,之后输入email:
可以看到正确提取了email信息,所以继续执行:
继续执行form:
这时slot “email”已经填充了值,并且当前运行的return_form已经完成信息收集,所以active_loop被设置为null,继续执行微服务action_return:
检查action server的输出日志,发现已经执行对应的微服务:
实际返回的结果是:
Ok, I've kicked off your return. You should be receiving a return label in your inbox. Please send it in the next 14 days!
检查数据库表,发现me@rasa.com所关联的订单状态变为了returning状态:
下面测试一下当运行return_form时,用户要求中止会发生什么情况,输入信息:I want to return my shoes:
确认继续执行:
继续运行form,这时return_form已被激活,当前需要收集email信息:
输入No,这时intent识别为deny,就会触发中止流程,如前面stories中定义的情况:
确认继续执行:
继续执行后提示是否运行utter_start_over:
继续执行后返回结果:
继续执行提示的action_deactivate_loop,这是为了使return_form进入不激活状态,停止向用户收集信息:
执行完成后可以看到active_loop重新设置为null,并且requested_slot也设置为null:
以上整个用户中止订单退货的对话流程与上面stories中定义的训练数据一致。在实际开发中,我们可以根据各种可能遇到的场景来设计如何更好地与用户进行交互。
2. 订单退货微服务代码解析
首先检查domain,发现注册了这个微服务:
这是微服务类ReturnOrder,它继承自Rasa SDK的Action,主要包括两个方法name()和run():
这是name方法,返回在domain中注册的微服务的action name:
这是run方法:
连接到SQLite3数据库,取cursor,从tracker中获取email信息,传入SQL查询订单信息:
-如果有订单记录,则把status值”returning”以及email这两个参数值同时传入SQL update语句对相关订单的状态进行更新,在实际开发中,需要考虑不同订单状态转换之间的条件,以及与其它功能模块如商品库存等的整合,而不是像这里的代码样例只是简单更新一下订单状态而已。在完成订单状态更新后调用模板action输出结果给用户
-如果没有找到订单记录,则直接调用模板action输出提示信息给用户
Run方法最后返回的是一个空的event list,因为这里只是针对数据库表进行操作,不需要触发什么event。
这是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版: