本文继续围绕工业级业务对话平台和框架Rasa,对Rasa对话机器人项目实战之保险行业Insurance Bot调试Debugging全程实战及背后架构、源码及本质进行分析。
一、Rasa对话机器人项目实战之保险行业Insurance Bot调试Debugging全程实战及背后架构、源码及本质解密
- 解密Rasa shell –debug启动Insurance Bot中基于Sanic的Agent启动内幕
Rasa server是基于Sanic框架来构建的,Sanic同时也是一个web server,支持使用async模式的aiohttp库进行通信,所以它的并发性能很好。
运行命令rasa run actions –debug启动调试模式下的Rasa action server:
运行命令rasa shell –debug启动调试模式下的Rasa server,这里有个UserWarning,说明Rasa从3.0开始已经移除了slot自动填充机制,以解决在之前的版本中由于这种机制带来的对话系统状态管理会出现bug的问题:
Rasa server在启动时会加载非常多的各种库,包括第三方的库和使用TensorFlow作为框架来驱动Rasa使用的各种模型,如何整合众多的这些库对于Rasa来说也是一个不小的挑战:
下面是读取credentials.yml文件配置以及使用cmdline作为对话机器人与用户交互的channel:
配置跨域访问:
配置Rasa server的HTTP访问路由:
2. 解密Rasa shell –debug启动Insurance Bot中基于Tracker Store启动内幕及最佳实践
本地开发时需要使用InMemoryTrackerStore作为对话管理跟踪器,使用InMemoryLockStore作为用户身份验证信息的存储库。在生产环境中一般使用Redis等分布式存储来管理对话机器人的状态信息:
初始化NLG组件:
3. 解密Rasa shell –debug启动Insurance Bot中基于NLU Pipelines各大组件启动内幕
从本地目录加载训练好的模型:
-加载组件NLUMessageConverter,根据用户输入信息进行一些转换处理
-加载组件WhitespaceTokenizer,进行分词处理
-加载组件RegexFeaturizer,使用正则表达式来提取特征
-加载组件LexicalSyntacticFeaturizer,这是语言层面上的特征提取器
-加载组件CountVectorFeaturizer,这里会加载两个,一个是基于token级别的特征提取器,另一个是基于字符级别(ngram)的特征提取器
-加载组件RegexEntityExtractor,它通常和RegexFeaturizer组合使用,通过使用RegexFeaturizer产生的特征来从用户输入信息中提取实体信息
-加载组件DIETClassifier,它既可以用于意图识别,又可以用于实体提取
之所以会加载上述模型,是因为在config.yml文件中进行了配置:
4. 解密Rasa shell –debug启动Insurance Bot中基于Dialogue Policies各大组件启动内幕
加载policies组件:
-加载组件RulePolicy
-加载组件AugmentedMoizationPolicy
-加载组件TEDPolicy
这是在config.yml文件中配置的各个policies组件:
5. 解密Insurance Bot Debugging处理用户输入信息message的语言理解NLU全生命周期内幕
输入信息,可以看到会使用Lock Store来为当前对话请求一个lock,并创建一个新的session,然后Rasa server执行”action_session_start”并触发ActionExecuted事件来等待用户的输入:
这时slots都是为None的状态:
根据pipeline中的配置依次运行以下各个NLU graph nodes所对应的组件的process方法:
这个项目不需要使用ResponseSelector:
这是对话机器人接收到的信息,并根据信息识别了intent和给出了提取的entities信息:
执行默认action ”action_extract_slots”来提取实体并填充到slots中,然后对slots进行验证:
6. 解密Insurance Bot Debugging处理用户输入信息message的Policies全生命周期内幕
下面记录了对话跟踪器tracker中的状态信息,包含用户intent和输入text等,并使用AugmentedMoizationPolicy来预测next action:
这是定义在stories中的训练数据:
下面的信息可以看到也会使用TEDPolicy基于用户intent来预测next action,然后最终由Public Ensemble组件根据各个policies的预测结果来选择最后的预测结果,由于AugmentedMoizationPolicy的优先级比TEDPolicy高,所以采用了AugmentedMoizationPolicy的预测结果,另外可以看到这个预测结果的confidence是1.00:
7. 解密Insurance Bot Debugging状态管理及Agent与Action Server交互内幕
然后执行预测的action:
这时tracker中的状态增加了state 2:
同样使用AugmentedMoizationPolicy来预测”action_get_address”,然后Rasa server会调用微服务”action_get_address”来获取地址信息:
接下来对话机器人输出地址信息给用户,让用户确认是否需要更新:
这是定义在domain中的信息:
输入Yes后输出:
由于payload是输入文本,所以根据它识别到的intent为affirm:
输入信息:
这时可以看到激活了form “change_address_form”:
填充了slot “address_city”并进行验证:
输入信息:
继续输入其它地址信息,然后对话机器人会让用户确认:
确认后输出信息:
如果按回车键则输出以下内容: