Gavin老师Transformer直播课感悟 - Rasa项目实战之电商零售Customer Service智能业务对话机器人微服务代码解析及基于Rasa Interactive的对话试验(四十八)

84 篇文章 16 订阅

     本文继续围绕工业级业务对话平台和框架Rasa,对Rasa项目实战之电商零售Customer Service智能业务对话机器人微服务代码进行解析,并且使用Rasa Interactive进行对话试验。在微服务中会进行数据库操作,并把结果返回给Rasa server来完成业务对话流程。

一、Rasa项目实战之电商零售Customer Service智能业务对话机器人微服务代码逐行解密及基于Rasa Interactive的对话试验

  1. Customer Service案例使用的SQLite3数据库中数据分析

在微服务中使用了SQLite3数据库:

可以从sqlite官网(https://sqlitebrowser.org/dl/)下载客户端:

这个项目使用的数据库包括2个表格:

-inventory:

商品库存表,包含以下字段数据:

-orders:

商品订单表,包含以下字段数据:

 2.  增加了数据库的内容但在测试的时候却没有起作用原因及解决方案

运行以下命令启动微服务,在实际生产环境中,使用微服务的动态部署是非常重要的:

运行rasa shell –debug,输入对话信息查询订单状态:

继续运行form “order_status_form”:

根据对话要求输入email信息:

这时可以看到slot “email”已经被正确填充:

确认运行form “order_status_form”,然后执行action “action_order_status”来查询订单状态,这时可以看到对话机器人反馈说没有找到这个email的订单信息:

但是从数据库表orders中可以看到,实际上是存在这个email的订单信息的。为了定位问题,可以在下面的代码里加入打印email的信息来检查是否能从数据库中取得email:

为了使上述action的代码修改生效,需要重启action server:

继续输入查询订单状态信息:

确认运行form “order_status_form”,然后执行action “action_order_status”来查询订单状态,这时可以看到对话机器人反馈说没有找到这个email的订单信息:

检查action server输出的信息,发现已经打印出从数据库中获取的email信息:

这时检查目录actions,发现多了一个后缀为”-journal”的文件:

这说明数据库中的数据没有同步到磁盘文件里,所以可以关闭数据库客户端保存数据,再检查actions目录:

这时已经没有后缀为”-journal”的文件了。重新输入查询订单状态信息:

确认运行form “order_status_form”,然后执行action “action_order_status”来查询订单状态,这时可以看到对话机器人反馈找到这个email的订单信息,订单状态为pending:

再次查询表orders,可以发现这个email关联订单的状态是pending:

 3.  action_order_status代码逐行解析及Rasa Interactive试验解密

OrderStatus用于查询订单状态,它继承自Action,在name方法里返回action name:

下面是run方法,首先连接到SQLite3数据库:

从tracker中获取slot “email”的值,然后把这个email传入SQL语句的参数中,再通过cursor执行查询,并通过cursor返回一条数据:

如果存在返回数据,则转换为list,并且通过index为5获取对应表orders的字段”status”的值,然后调用dispatcher的utter_message方法生成response返回给Rasa server:

这里使用了domain.yml文件里配置的response模板action:

如果没有返回数据,则调用对应的response模板action:

 4.  action_cancel_order代码逐行解析及Rasa Interactive试验解密

CancelOrder用于取消订单,它继承自Action,在name方法里返回action name:

方法run首先连接到SQLite3数据库:

从tracker中获取email,然后传入SQL语句的参数里,通过cursor执行查询并返回一条数据:

如果查询到订单,则把status和email同时传入SQL语句的对应参数里,通过cursor执行更新订单状态的操作:

输入取消订单信息:

需要运行form “cancel_form”来收集信息:

执行action “action_cancel_order”来更新订单状态为取消的状态:

这时检查数据库记录,发现这个订单的状态已更新:

 5.  action_return代码逐行解析及Rasa Interactive试验解密

ReturnOrder用于退货订单,它继承自Action,在name方法里返回action name

方法run首先连接到SQLite3数据库:

从tracker中获取slot “email”的值,然后把这个email传入SQL语句的参数中,再通过cursor执行查询,并通过cursor返回一条数据

如果查询到订单,则把status和email同时传入SQL语句的对应参数里,通过cursor执行更新订单状态的操作:

输入更新订单状态信息:

运行”return_form”收集信息,然后执行action “action_return”:

这时检查数据库记录,发现这个订单的状态已更新:

 6.  action_product_search代码逐行解析及Rasa Interactive试验解密

ActionProductSearch用于查询库存产品,它继承自Action,在name方法里返回action name:

方法run首先连接到SQLite3数据库:

从tracker中获取color和size的值,传入SQL语句的参数里,通过cursor执行查询并返回一条数据:

如果取得数据,则调用response模板action ”utter_in_stock”输出查询结果信息,否则调用response模板action ”utter_no_stock”输出没有查询到结果的信息。注意在方法返回时会使用SlotSet事件来清空slot “size”和”color”的值:

输入查询商品库存信息:

接下来会运行”action_deactive_loop”防止进入其它的loop:

运行form “product_stock_form”之后会提示输入color信息:

运行action “action_product_search”,返回了查询结果:

 7.  action_survey_submit代码解析:

SurveySubmit会触发SlotSet事件来设置slot “survey_complete”的值为True,并调用相关的response模板actions:

 8.  chitchat和faq背后的ResponseSelector解密

关于chitchat和faq相关action是通过定义在config.yml中的pipeline里的ResponseSelector来触发的:

在domain.yml文件里会定义chitchat和faq的intents,当识别到这些intents时,ResponseSelector会根据向量相似度的计算来根据用户输入选择匹配的response输出给用户:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值