1.4.1 系统结构
Rasa的核心部分可以分为Rasa和Rasa SDK。Rasa又可以细分为Rasa NLU和Rasa Core两个子部分。Rasa NLU主要负责将用户的输入转换成意图和实体信息,这一过程就是自然语言理解(Natural Language Understanding, NLU)。Rasa Core主要负责基于当前和历史的对话记录(Rasa NLU的输出是对话记录的一部分),决策下一个动作(action),下一个动作可能是回复用户某种消息、调用用户自定义的动作类(class)。
Rasa SDK是Rasa提供的帮助用户构建自定义动作的软件开发工具包(Software Development Kit, SDK)。大多数机器人都调用外部服务来完成功能。例如,天气查询机器人需要天气信息服务商的接口来完成实际天气情况的查询,订餐机器人需要调用外部服务完成金融消费和餐品下单。在Rasa中,这种由具体业务决定的动作被称为自定义动作(custom action)。自定义动作运行在一个单独的服务器进程中,也被称为动作服务器(action server)。动作服务器通过HTTP(HyperText Transfer Protocol)和Rasa Core通信。
一个完整的机器人需要一个用户友好的使用界面,Rasa通过通道(channel)支持多种流行的即时通信软件(Instant Messaging, IM)对接Rasa。
Rasa核心工作逻辑和流程如图1-9所示。
图1-9 Rasa核心工作逻辑和流程
值得一提的是,Rasa在软件包的规划上是经过充分考虑的。按照软件系统的结构反映组织结构的理论,也就是康威定律(Conway's Law),Rasa NLU和Rasa Core属于结合比较紧密的,都位于名为Rasa的软件包中,而Rasa SDK单独成为一个软件包。Rasa的软件包如此设计,是考虑到通常情况下Rasa NLU和Rasa Core由算法团队负责,而自定义动作的开发由Python工程师团队负责。两个团队可以在低耦合的情况下,各自独立开发,独立部署,独立改进,从而提高工作效率。