(十七)基于RASA开始中文机器人

DayNightStudy

共 2145字,需浏览 5分钟

 ·

2021-09-30 02:14


作者简介





作者:孟繁中

原文: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、在线学习

机器人运行过程中,租户可以查看机器人对话记录,不断补充问题、在线标注、语料导出、自动训练、自动上线形成平台、数据和模型的闭环,从而让机器人不断进化。

系统架构

从上面分析,我们系统架构要考虑的几个方面。

  1. 要有独立的用户管理和鉴权机制,根据用户登录生产NFS的地址,SessionID,Docker容器地址等

  2. 要集成CI/CD能力,使用Docker管理各个服务,不同的用户运行的机器人使用Docker隔离。

  3. 服务层和算法层分开,一个考虑是开发语言不同,一个是运行方式不同,微服务层是服务拆分容器,而算法层按用户拆分容器

  4. 训练服务和生产服务分开,训练服务器是大内存高算力服务器,多用户分时复用一个服务器。

下图是系统架构图:

多租户对话机器人平台系统架构

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的图片

我们要做的机器人管理部分,实质上是替换图中红圈部分。

下一遍,我们介绍各个功能的实现及协作关系。


浏览 77
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报