(十七)基于RASA开始中文机器人
作者简介
作者:孟繁中
原文:https://zhuanlan.zhihu.com/p/336936225
转载者:杨夕
面筋地址:https://github.com/km1994/NLP-Interview-Notes
个人笔记:https://github.com/km1994/nlp_paper_study
介绍完RASA的基本概念和使用,我们开始利用RASA构建一个中文机器人系统。在开始编码之前,我们要对项目有个整体的规划。
规划
1、接入
支持APP,WEB,RESTAPI接入等多种接入方式。提供Android SDK,Ios SDK,js sdk。支持显示富文本,按钮,表单,图片,音频,视频等多种内容。
2、多租户系统,平台化架构
以多租户的方式建设智能聊天机器人平台,基于用户角色来定义功能,平台管理员可以为每个租户指派不同的功能和能力。不同租户之间数据隔离、算力隔离,也可保证运行互不影响,也保证数据安全。
3、所有功能自助化
平台提供一系列工具和模板,供用户做样例。剩下的工作就交给租户,由租户纯自助管理维护机器人。
机器人生命周期包括:创建、话术编辑、训练、上线、回退、版本升级。其中需要各种各样的工具。
可视化话术流程编辑器,用于任务型机器人的话术流程编排
FAQ导入、编辑工具,用于问答检索类机器人的话术编排
文档导入、编辑工具,用于文档问答机器人的话术编排
知识图谱导入、编辑工具,用于知识图谱类机器人的话术编排
在线标记工具,用于对机器人聊天记录纠错改错做标记
版本树浏览工具,用于机器人版本的查看,回滚等
有了这些工具的支撑,再加上完善的示例和文档,可让用户自助训练机器人完成问答。
4、有集成业务系统的能力
机器人支持调用外部接口获取数据的能力。因此,外部业务系统只需遵循机器人的接口规范,接受参数和返回数据,机器人就可以和业务系统集成。
5、支持能力动态扩充
读图,读文档,检索知识库,这类被当成能力。默认机器人是不包含这些能力的,租户根据需要可以选择添加能力。
6、支持领域动态扩充
对机器人内部来说,是语料库的扩展,对租户来讲,是学会了天文知识库,学会了法律库等。为了保持语言模型的精炼,默认语言模型里面是常用词汇,如果租户需要专业库,可以自己上传领域数据,或者选择系统准备的领域数据。
7、在线学习
机器人运行过程中,租户可以查看机器人对话记录,不断补充问题、在线标注、语料导出、自动训练、自动上线形成平台、数据和模型的闭环,从而让机器人不断进化。
系统架构
从上面分析,我们系统架构要考虑的几个方面。
要有独立的用户管理和鉴权机制,根据用户登录生产NFS的地址,SessionID,Docker容器地址等
要集成CI/CD能力,使用Docker管理各个服务,不同的用户运行的机器人使用Docker隔离。
服务层和算法层分开,一个考虑是开发语言不同,一个是运行方式不同,微服务层是服务拆分容器,而算法层按用户拆分容器
训练服务和生产服务分开,训练服务器是大内存高算力服务器,多用户分时复用一个服务器。
下图是系统架构图:
1、用户管理模块
主要功能,用户RBAC,单点登录,授权,鉴权等。要管理的资源包括:
用户机器人版本库路径
用户action server相关路径
用户hdfs空间路径
用户生产环境容器
用户训练环境容器
用户机器人信息及能力,机器人能力的各个访问路径
2、基础设施
主要功能,维护稳定可靠的Docker环境,包括Docker的性能监控,负载均衡,容器编排等。
3、接入层
提供RESTful API,js SDK,Android/Ios SDK
4、微服务层
是系统应用层面的核心,除包括Spring Cloud相关组件Gateway,Eraka,ConfigServer等以外,主要包括:
数据访问相关,如Mysql,Redis,Neo4j,Es,mango
中间件,如Kafka,RabbitMQ等
Schedule,完成算法训练,部署等异步调用
封装业务的相关接口,供算法层面调用,完成具体功能,例如,用户在机器人中说提交订单,调用业务相关接口
提供机器人管理相关接口
5、算法层
算法层面的实现,包括rasa组件,机器人扩展能力相关算法等
在算法层面,看不到用户,只看到模型和训练数据。
6、存储层
各种数据的存储,模型及训练数据使用hdfs存储,结构化数据使用mysql存储,统计分析数据,日志等用es存储,缓存用redis存储,知识图谱用neo4j存储。
服务层和算法层协作
服务层(机器人管理平台)对外提供UI,用户在上面创建机器人,并配置训练数据,服务层将用户配置的数据转换成RASA可以识别的yml格式,并放在HDFS上,然后调用RASA接口,启动训练。Rasa训练完成后,服务层调用RASA消息接口获得推理结果。
更详细的,我们引用一个Rasa-X的图片
我们要做的机器人管理部分,实质上是替换图中红圈部分。
下一遍,我们介绍各个功能的实现及协作关系。