本文继续围绕工业级业务对话平台和框架Rasa,对Rasa对话机器人项目实战之保险行业Insurance Bot架构设计、流程分析、状态管理及基于Rasa Interactive的智能对话实验进行分析。
一、Rasa对话机器人项目实战之保险行业Insurance Bot架构设计、流程分析、状态管理及基于Rasa Interactive的智能对话实验剖析
- 通过Rasa Visualize可视化工具详解保险行业Insurance Bot功能及架构设计
运行rasa visualize来启动对话流程可视化图:
这个项目的对话流程比较复杂,下面所示是局部的可视化流程图,主要涉及以下流程:
-用户对车辆进行投保,填写报价单并获取报价信息
-健康保险理赔流程
-丢失ID卡之后对获取新卡地址信息以及验证等流程
-用户请求地址信息变更流程
中间部分涉及的主要流程包括:
查询理赔账单信息,这里会使用form “pay_claim_form”,”scroll_claim_form”等:
2. Rasa 3.X架构中的Agent、NLU Pipelines、Dialogue Policies、Action Server、Tracker Store等详解
下面是Rasa提供的对话机器人架构图,解析如下
-Agent就是Rasa server,基于Sanic 构建
-Rasa server启动后会操作两大核心部分:NLU pipelines和Dialogue Policies
-用户通过channel和Rasa server进行交互
-Agent内部会使用核心组件Conversation Tracker来动态跟踪和更新整个对话的状态,包括intents,entities,slots和active loops等信息
-Tracker Lock用于识别与对话机器人连接的不同用户的身份信息
-Filesystem用于存放训练后的models和训练数据
-基于Rasa SDK的Action Server称为对话机器人的微服务,它是使用action和events来驱动的
-Agent和Action Server是基于HTTP进行通信的(使用aiohttp),并通过json封装数据,Rasa的Action Server是用Python实现,你也可以使用其它语言来自定义自己的Action Server
3. 保险行业Insurance Bot案例对Rasa X各组件的应用示例
运行rasa interactive命令,会加载以下各个组件,并100%处理stories和rules数据:
在config.yml文件里使用了两个CountVectorFeaturizer,一个是基于token级别的,另一个是基于character级别的(设置了n-gram参数):
使用了DIETClassifier组件来输出intents和entities。使用EntitySynonymMapper运用同义词技术对不同形式的词汇表达转换为统一的表达方式:
使用ResponseSelector针对常见问答等场景根据提问进行response的匹配选择:
使用FallbackClassifier用于处理当预测intent获得的confidence低于threshold或者排名最高的两个intents之间的区分度过低的情况:
AugmentedMemoizationPolicy利用具有的“遗忘机制”可以在使用stories数据来进行匹配预测action方面具有更多的灵活性:
4. 逐行解密Rasa shell启动过程内幕
运行命令rasa shell:
显示当前用户与对话机器人交互使用的channel为cmdline:
Rasa server运行地址:
加载模型,模型包含Dialogue Policies和NLU Pipeline相关的内容:
Rasa server成功运行标识:
5. 剖析Rasa Interactive中NLU对Insurance Bot输入的Message的处理:Intents、Entities、Slots
输入信息后,对话机器人反馈识别到的intent和提取的entities是否正确:
可以检查nlu.yml关于intent “get_a_quote”的训练数据来进行验证:
确认后会设置slot “AA_quote_insurance_type”为auto,并提示是否运行”quote_form”:
在domain.yml中可以看到slot “AA_quote_insurance_type”的定义,使用的slot类型为”CategoricalSlot”,其中提供了4个值,slot mapping的类型为”from entity”,也就是说,当从上面提到的用户输入信息中提取到entity “quote_insurance_type”的值为”auto”时,就会自动把这个值填充到这个slot中:
确认运行”quote_form”,对话机器人输出信息,这时对应的requested_slot设置为quote_number_persons:
检查domain.yml中关于”quote_form”的定义:
另外在domain文件中也可以看到对应的模板化responses的定义,也就是上面对话机器人使用的responses:
输入数量信息:
输出信息显示slot已经填充:
继续运行”quote_form”,会提示输入quote_state的信息:
输入state信息:
输出信息显示所有slots都已填充:
运行”action_get_quote”,输出信息:
这时对话流程可视化图更新如下:
6. 解密Insurance Bot表单提交执行微服务action全生命周期流程及Slots状态管理
当”action_get_quote”运行完成后,可以看到下面的slots已经被清空,这是由action来进行操作的:
这是action类:
下面是run方法:
从tracker中获取各个slots信息:
对final_quote进行计算,并调用模板response输出信息:
在return语句中会重设所有slots的值为None: