本文继续围绕工业级业务对话平台和框架Rasa,对Rasa项目实战之电商零售Customer Service智能业务对话机器人业务功能的微服务如何结合数据库使用进行解析,并通过Rasa Interactive的调试来定位问题并找到解决问题的方法。
一、Rasa对话机器人Debugging项目实战之电商零售对话机器人微服务使用数据库解析与问题调试演示
- 项目使用的SQLite3数据库的数据结构分析
在这个项目中使用SQLite3数据库,以下是数据库文件存放位置:
可以从官网下载数据库客户端(https://sqlitebrowser.org/dl/),下面是数据库结构,包含了本项目使用的两张表:
-inventory:
商品库存表,包含以下字段数据:
-orders:
商品订单表,包含以下字段数据:
2. 订单状态查询微服务数据库使用解析及Rasa Interactive问题调试
下面具体介绍在查询订单状态时,对话机器人如何根据用户输入信息通过微服务调用后台数据库进行查询,以及在对话中发现问题时如何定位问题。
首先运行命令rasa run actions –debug以调试模式启动action server:
运行命令rasa interactive进入交互式对话模式:
输入信息:HI:
确认继续执行:
确认继续执行提示的action:
输入Yes确认,之后对话机器人给出以下选项供用户选择:
选择1查询订单状态:
这时会提示是否继续执行order_status_form:
为了完成订单状态查询,对话机器人需要先运行form来收集用户信息,选择继续执行:
这时可以看到当前需要收集用户的email信息,输入email信息:
可以看到slot “email”已经填充了刚才输入的email信息:
按照提示输入Yes继续执行:
信息收集完成,所以现在对话机器人提示用户是否需要进行订单查询,确认执行,返回结果如下:
Hmm, seems like we don't have an order associated with that email
检查action server输出日志,发现后台微服务确实收到了执行请求,并且输出了email:exmaple1@gmail.com
首先检查微服务代码,在run方法中会执行这条SQL语句:
cursor.execute("SELECT * FROM orders WHERE order_email=?", order_email)
然后从cursor中获取结果。
在数据库中执行SQL:
结果表明订单表中不存在这个email地址。
检查表中数据:
这次选择me@gmail.com来查询订单状态:
确认继续执行:
但是从输出信息看,slot的值仍然为”example1@gmail.com”,这是因为在上次订单查询结束时并没有做清除这个slot值的操作,所以现在重启对话后再输入查询信息:
确认继续执行:
可以看到slot “email”的值为None了,继续执行提示的action:
运行form收集信息,输入email:
确认继续执行:
这时slot email已经被正确填充,继续执行:
执行微服务进行订单状态查询:
返回结果为:
Based on the latest order from me@gmail.com, it looks like your order is currently delivered.
检查action server输出日志信息:
再次检查数据库订单表,查看me@gmail.com对应的订单状态确实为delivered。
Rasa 3.x 源码高手之路:系统架构、内核算法、源码实现详解:
Rasa 3.x 源码高手之路:基于Transformer的对话机器人RasaPolice:
星空NLP对话机器人论文班:NLP领域10篇最高质量的对话机器人经典论文解密:
Rasa 3.X 智能对话机器人案例开发硬核实战高手之路 (7大项目Expert版本):
Advanced Python硬核实力高手实战之路:架构、算法、源码、案例(81讲):
NLP on Transformers 高手之路137课Pro版: