Gavin老师Transformer直播课感悟 - Rasa项目实战之银行金融Financial Bot智能业务对话机器人系统启动、语言理解、对话决策、状态管理、微服务调用全生命周期流程(五十一)

84 篇文章 16 订阅

     本文继续围绕工业级业务对话平台和框架Rasa,通过Debugging模式对Rasa项目实战之银行金融Financial Bot智能业务对话机器人的系统启动、语言理解、对话决策、状态管理、微服务调用等全生命周期流程进行解析。

一、Rasa项目实战之银行金融Financial Bot智能业务对话机器人系统启动、语言理解、对话决策、状态管理、微服务调用全生命周期流程解析

  1. 使用Rasa shell --debug模式启动银行金融Financial Bot分析

运行命令rasa shell –debug启动调试模式:

这里使用了默认的credentials.yml,可以使用这个文件定义一些连接访问时身份验证信息:

显示当前Rasa server连接的channel为”cmdline”,即命令行模式:

下面是Rasa官方文档提到的可以支持的channels:

Your Own Website

Facebook Messenger

Slack

Telegram

Twilio

Microsoft Bot Framework

Cisco Webex Teams

RocketChat

Mattermost

Google Hangouts Chat

Custom Connectors

     

      Rasa server是基于Sanic(https://sanic.readthedocs.io/en/stable/)来构建的,你可以配置跨域访问:

     对web server routes进行检查:

启动标识信息:

从Rasa 3.x开始,在domain配置中定义slots时一般都会使用mapping机制,并且移除了slot的自动填充机制,这是因为在之前的版本里存在自动填充造成slot状态不正确的问题:

在这里使用默认的tracker store和lock store,当然也可以使用Redis等来存储状态:

这是Rasa官网(https://rasa.com/docs/rasa/img/architecture.png)提供的一幅架构图:

Agent就是Rasa server,其中Tracker Store保存了对话状态,通过操作它就可以操作对话机器人。Lock Store跟对话用户的身份ID管理有关,譬如对话机器人有100万用户连接时,需要使用ID来区分不同的用户:

初始化语言生成器:

加载训练好的模型:

运行使用的tokenizer和featurizers:

这些都定义在config文件的pipeline里:

加载DIETClassifier模型,并设置finetune_mode为false,这是因为当前是inference模式:

运行FallbackClassifier和DucklingEntityExtractor组件以及依赖的NLP库SpacyNLP:

加载domain.yml文件:

加载各个policies组件:

加载Public Ensemble组件来对各个policies的预测结果进行处理:

标识Rasa server已经启动完成并处于运行状态:

 2.  从Rasa 3.X的Graph Architecture的视角分析Financial Bot启动步骤内幕

     从DAG图中可以看到,在对话机器人启动时,会从model storage中加载每个组件,也就是对组件进行实例化。组件之间会存在依赖关系,Rasa server启动后会把pipeline定义里的每个组件映射为DAG图中的一个节点,从而建立graph运行上下文环境。

 3.  用户输入Message在NLU处理中的各大组件process方法解析

 输入信息:

创建对话ID并运行action “action_session_start”来启动一个对话:

这是当前tracker中的slots的信息:

从下面信息可以看到在组件运行时都是调用各个组件的process方法:

输出识别到的intent和提取的entities,这里为空:

调用默认验证action来验证提取的slots信息:

调用policy部分进行预测:

 4.  基于State而进行的并行化policies预测过程解密

下面显示当前tracker的状态:

从下面的信息可以看出:

首先会使用MemozationPolicy进行预测,如果没有找到匹配的next action,那么会检查是否有可用的rule,这里找到了预先定义好的rule,然后使用RulePolicy预测对应的action 是“utter_greet”,同时也会使用TEDPolicy来基于用户输入的intent来进行预测:

因为根据RulePolicy预测出next action是”utter_greet”时所获得的confidence为1.00,超过了TEDPolicy的预测confidence,所以最后Public Ensemble选择的预测结果就是RulePolicy的预测结果:

执行action “utter_greet”:

 5.  不同阶段State的触发机制及具体内容剖析

    从下面信息可以看出,当对话机器人完成1个action之后,状态会标记1次,所以有state 1,state 2这样的信息:

接下来会运行action “utter_help”,可以看到产生了新的state 3信息,这样就实现了对话状态的精细化管理:

这是对话机器人针对用户输入而产生的输出信息:

 6.  使用Financial Bot进行transfer money操作触发form循环分析

输入信息:

输出信息:

通过预测需要执行action “transfer_money_form”来激活form,目的是收集转账需要的信息:

这是在domain里定义的form:

输入确认信息:

输出信息:

这个slot已经填充了值:

对话状态跟踪信息:

 7.  Rasa Server中的action及Rasa微服务中的action区别和联系源码剖析

     下面是Rasa server中的action的run方法,用户跟Rasa server进行交互需要使用channel,所以设置了这个参数,另外也使用了nlg这个参数来指定由哪个generator来生成发送给用户的信息:

下面是用于响应用户的action类,它继承自Rasa server的Action类:

这是具体实现的run方法:

Rasa SDK的action是指微服务的实现,首先需要导入SDK中的Action:

方法run中的参数与前面提到的Rasa server中的Action的run方法参数不一样,这里需要使用dispatcher这个参数来把微服务的处理结果返回给Rasa server:

 8.  Slots状态分析和状态管理

首先分析sqlite数据库表的内容,可以从这里取转账接收人信息:

但是查看微服务代码,发现这里已经定义了关于转账接收人的信息:

输入转账接收人信息:

这时可以看到slot “person”的值已经填充:

Requested_slot:

输入信息:

Slot已经填充:

输入确认信息:

转账完成后slots已经填充:

从rules中可以看到当form信息收集完成后会执行action “action_transfer_money”:

对应的action代码如下:

在方法run中可以看到:

首先对slots进行初始化:

-当转账完成时,会从tracker中获取slot “amount_transferred”的值,然后在这个值的基础上累加刚才转账的金额后,填充到这个slot里

-当转账取消后,会通过使用上面初始化的slots列表来创建SlotSet事件,从而把所有转账使用的slots清空

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值