开源对话机器人:Rasa3安装和基础入门

开源对话框架Rasa的安装和基本使用

开源对话机器人:Rasa3安装和基础入门


扫码关注程旭源,俺们一起成长 ...


开源对话机器人:Rasa3安装和基础入门

本文介绍开源对话框架Rasa的安装和基本使用,通过conda/pip、poetry、docker等方式安装Rasa和构建自己的对话机器人。
作 者丨程旭源
技巧分享
开源对话机器人:Rasa3安装和基础入门

本文是Rasa的第一篇,偏基础入门内容主要是本地和使用docker镜像如何安装rasa,后续会持续更新关于rasa的使用解每个文件功能和内部细节、如何修改配置、如何使用中文模型等。目标是使用rasa构建一个自己的对话机器人


在开源对话机器人中,Rasa社区很活,在国很多企业也在使用Rasa做对话机器人,有rasa开发经验的往往是加分项


开源对话机器人:Rasa3安装和基础入门开源对话机器人:Rasa3安装和基础入门

当年实习的时候接触到了Rasa[1],现在工作中也使用Rasa,因此,写写一些经验文档,有助后来人的入门和研究。

Part1rasa安装和使用

我们做工程开发的时候,首先要解决好安装环境和包的版本依赖问题。

Python建议使用3.9版本(python==3.9),如果想使用Rasa X[2]那么rasa的版本要(rasa<3.0.0,>=2.8.15),也就是说RasaX只支持2.x版本。Rasa3的版本要使用RasaX要使用RasaPro和企业版相关配置了。

Rasa安装有很多种方法,比如Docker镜像安装、conda/pip本地安装、Poetry源码构建等方式。

1conda/pip安装rasa

初使用Rasa的同学建议用这个方法安装。

【文末有conda pip环境管理的文章链接】
使用conda创建一个新环境,专门用来做rasa相关开发的,并指定python版本:

conda create -n rasa3 python=3.9

截止目前版本(2023年2月),建议使用python3.9版本,3.10及以后版本有待进一步的支持。

开源框架rasa安装最新版本:

pip install rasa
或者更新pip同时安装rasa:
pip install -U --user pip && pip install rasa

升级已安装的版本:
pip3 install --upgrade rasa

可以指定rasa版本号:rasa==2.8、rasa==3.3.3等。

2Poetry构建rasa

curl -sSL https://install.python-poetry.org | python3 -
git clone https://github.com/RasaHQ/rasa.git
cd rasa
poetry install

2、使用rasa init初始化聊天机器人项目

rasa init # --no-prompt

主要是生成rasa英文版初始demo文件。开源对话机器人:Rasa3安装和基础入门

3、安装必要的包

pip install -r requirements.txt

4、下载下来的demo中没有训练好的模型的,需要我们自己训练。

训练rasa命令:

rasa train
会根据现有的配置开始训练。如果想修改训练次数,可以在config.yml文件中把epochs改小一点。

模型根据最初配置训练好了,会生成时间戳方式命名的.tar.gz文件,保存在/models文件夹下。

5、启动rasa对话机器人

rasa shell

会自动加载最新训练的模型,直接在终端输入聊天内容就可以了。

Part2Docker方式安装rasa

先自行搜索安装Docker[3]吧。查看本机Docker和Docker Compose版本:

docker -v && docker-compose -v
开源对话机器人:Rasa3安装和基础入门

如果计算机上安装了Docker,则显示已安装的Docker和Docker Compose版本。

然后运行命令:

docker run -v $(pwd):/app rasa/rasa init --no-prompt

就可以自动构建镜像了。开源对话机器人:Rasa3安装和基础入门

命令释义:

-v $(pwd):/app  :将当前工作目录挂载到Docker容器中的工作目录。本地和docker容器中文件将同步。

rasa/rasa:要运行的docker镜像的名称。

与新训练的助手交谈,请运行以下命令:

docker run -it -v $(pwd):/app rasa/rasa shell

Part3自定义Dockerfile构建镜像:

# 镜像名称
FROM python:3.9-slim
# WORKDIR 后面写的是要部署到服务器上的路径,指定工作目录
WORKDIR /app
# 添加所有文件到app 目录下。COPY或者ADD
ADD . /app
# 安装依赖包。豆瓣镜像比清华镜像快
RUN pip --no-cache-dir install -i http://pypi.douban.com/simple/  --trusted-host pypi.douban.com  -r /app/requirements.txt
EXPOSE 5005
RUN  rasa train
VOLUME /app
VOLUME /app/data
VOLUME /app/models
CMD ["run","-m","/app/models","--enable-api","--cors","*","--debug" ,"--endpoints""endpoints.yml""--log-file""out.log""--debug"]

# 如果有自定义api,也可以运行
# CMD ["python", "http_api.py"]

docker built命令构建镜像:

docker build -t rasa.study/rasa:v1.0 .

rasa的训练和使用有很多很多的命令,如果每次都要输出命令和参数,将会很麻烦。如何高效记录常用命令、一键执行呢?

新建docker-compose.yml文件,输入:

version: '3.0'

services:
  rasa:
    image: rasa.study/rasa:v1.0
    ports:
    - "5005:5005"
    volumes:
    - ./:/app
    command:
    - run

  action_server:
    image: rasa/rasa-sdk:latest
    ports:
    - "5055:5055"
    volumes:
    - "./actions:/app/actions"

  duckling:
    image: rasa/duckling:latest
    ports:
    - "8000:8000"

以上输入内容可以根据项目需要,自行增减配置。

运行命令即可:

docker-compose up

Docker和docker-compose联合使用,是真的香啊!

本文从官方demo的角度出发,介绍python环境管理、rasa3的安装和训练、使用。

Part4Rasa3框架概览

掌握一样新技术,从框架开始。本篇也主要是通过框架,对rasa各个模块功能有个整体的把握。

Rasa框架图

开源对话机器人:Rasa3安装和基础入门

Rasa opensource就是我们下载rasa源码时候的主体部分,rasa通过这个主体可以外接知识图谱、Rasa SDK、Rasa X 可视化界面、服务器、API交互等各种集成,功能非常强大。

如果已经对Rasa1.x版本有所了解或者看了网上那么多的1.x版本的rasa教程,那么可能有些概念还要着重区分一下的。因为Rasa2之后有了很大的调整。比如原来的rasa_nlu和rasa_core的概念已经替换不用了(虽然源代码中还有nlu和core文件夹)。NLU就是NLU,core就是对话管理,别人提到这个概念的时候,我们明白就好。

3核心模块讲解:

这里根据框架简单讲下处理流程和作用,每个模块具体的实现细节,我们后面拆开讲解。依旧是从整体把握到细节攻克的思路。

Rasa通过一个Agent智能体对接到其他的各个模块。

对内和Dialogue Polices(对话策略,决策和选择最优actions)、NLU pipline(自然语言理解的工作管道,主要是实体和意图相关的工作)对接。

对接外部模块有:

Rasa SDK:(用户自定义actions)

Tracker Store:(对话存储追踪器,可以连接到不同的数据库的)

Lock Store:(会话锁定器,一旦会话被处理,就会触发票据锁机制ticket lock mechanism来锁定会话,这样可以使得rasa服务器并行运行多节点服务)

Event Broker:(事件代理,可以处理实时对话的数据到其他服务,比如在对话中,你可以使用Rasa X将实时对话数据观看和标注,也可以转发到外部的分析服务)

Filesystem:(文件系统,包括模型和数据,可以存储在本地、http服务器、云服务器)

I/O channels:(进出通道,就是用户和rasa交互的通道,可以是你自己的网站、Facebook Messenger、Telegram、用户自定义连接器等)

NLG:(自然语言生成,Rasa允许外接对话生成功能,以提供更好回复给用户)

Part5Rasa必知概念总结

动作Action:机器人进行对话的一个步骤。

执行服务器 Action Server:与Rasa Open Source源码分开的,运行自定义动作的服务器。尽管可以用其他语言编写自定义动作,但Rasa仍用Python维护了Rasa SDK来实现自定义动作。

业务逻辑Business Logic:由于业务需求需要满足的条件。例如:在创建帐户之前,要求输入名字和姓氏,地址和密码。在Rasa助手中,使用基于规则的操作(例如form)来实现业务逻辑。

内容管理系统 CMS Content Management Systems:一种在外部存储漫游器响应的方法,而不是将其直接包含在域中。内容管理系统将响应文本与训练数据分离。

对话驱动的开发 Conversation-Driven Development(CDD):使用用户消息和对话数据来影响助手设计和训练模型的过程,并结合工程最佳实践。组成CDD的过程分为6个步骤:共享,审阅,批注,修复,跟踪和测试。Share, Review, Annotate, Fix, Track, and Test。

会话测试Conversation Tests:修改后的故事格式,除了意图标签外,还包括用户消息的全文。测试对话将保存到测试集文件(conversation_tests.md),该文件用于评估整个对话中模型的预测。

组件Component:模型配置中助手的NLU pipeline中的元素。
传入消息由称为管道的一系列组件处理。组件可以执行从实体提取到意图分类再到预处理的各种任务。

有条件响应变化 Conditional Response Variation:仅当当前对话状态满足域或响应文件中定义的某些约束时,才可以使用响应变化。如果约束和对话状态之间存在匹配,Rasa可以使用此变体。

自定义操作Custom Action:由机器人开发人员编写的动作,可以运行任意代码,主要是与外部系统和API进行交互。

默认动作Default Action:带有预定义功能的内置动作。

DIET:Dual Intent and Entity Transformer:Rasa开源使用的默认NLU体系结构,它执行意图分类和实体提取。

域Domain定义助手的输入和输出。包括助手知道的所有意图,实体,词槽,动作和形式的列表。和我们理解的领域并不同。

实体Entity:可以从用户消息中提取的关键字。例如:电话号码,人名,位置,产品名称

事件Event:谈话中发生的事情。例如,UserUttered事件表示用户输入消息,而ActionExecuted事件表示助手执行操作。Rasa中的所有对话均表示为一系列事件。

表格Form一种自定义操作,它要求用户提供多条信息,填表。

快乐/不快乐的路径 Happy/Unhappy Paths用于描述用户输入是预期输入还是意外输入的术语。如果助手要求用户提供某些信息并且用户提供了该信息,我们称这是happy path。Unhappy paths都是可能的极端情况。例如,用户拒绝提供请求的输入,更改对话主题或更正他们之前说过的话。

意图Intent:
在给定的用户消息中,用户试图传达或完成的事情(例如,问候语,指定位置)。

互动学习 Interactive Learning在Rasa X或Rasa CLI中,这是一种训练模式,开发人员可以在对话的每个步骤中更正和验证助手的预测。对话可以保存为故事格式,并添加到助手的训练数据中。

知识库/知识图 Knowledge Base / Knowledge Graph:
知识图谱,可查询的数据库,表示对象之间的复杂关系和层次结构。知识库操作允许Rasa Open Source从知识库中获取信息,并将其用于响应中。

消息信道 Messaging Channels将Rasa Open Source与外部消息传递平台集成的连接器,终端用户可以在该平台上发送和接收消息。Rasa Open Source包括内置的消息传递通道(如Slack,Facebook Messenger和Web聊天),以及创建自定义连接器的功能。

自然语言生成(NLG): 是生成自然语言消息以发送给用户的过程。Rasa对NLG使用基于模板的简单方法。数据驱动的方法(例如neural NLG)可以通过创建自定义NLG组件来实现。

NLU 自然语言理解:(NLU)致力于将人类语言解析和理解为结构化格式。

管道Pipeline : 定义Rasa助手的NLU系统的NLU组件列表。在返回最终的结构化输出之前,每个组件都会逐一处理用户消息。

策略Policy: Rasa开源组件可预测对话系统的下一个操作策略,从而决定对话流程应如何进行。典型的配置包括多个策略,而置信度最高的策略将决定对话中要采取的下一个动作。

NLU组件 NLU Component:
Rasa NLU管道中的一个元素,用于处理传入消息。组件执行的任务从实体提取到意图分类再到预处理。

Rasa X: rasa的可视化界面工具。Rasa X帮助团队共享和测试使用Rasa Open Source构建的助手,注释用户消息和查看对话。

检索意图 Retrieval Intent: 一种特殊类型的意图,可以分为较小的子意图。例如,一个FAQ检索意图包含一些子意图,这些子意图代表助手知道如何回答的每个问题。

REST频道  REST Channel: 用于构建自定义连接器 build custom connectors的消息传递通道。包括一个输入通道(可以在其中将用户消息发布到Rasa Open Source),以及指定回调callback URL(可以将机器人的响应操作发送到该URL)的功能。

响应/模板/话语 Response/Template/Utterance: 助手发送给用户的消息。这可以包括文本,按钮,图像和其他内容。

规则Rules: 特殊训练数据,用于指定类似规则的行为,其中特定条件总是预测特定的下一个动作。例如,回答常见问题解答,填写Forms或处理Fallbacks。

插槽: 词槽Slot, Rasa用来在对话过程中跟踪信息的键值存储。

故事Story:对话模型的训练数据格式,由用户和漫游器之间的对话组成。用户的消息表示为带标签的意图和实体,而bot的 responses表示为一系列操作。【hr给的简历,我一看到故事编写,我就知道用的rasa框架。ps: 不会写故事的算法不是好的小说家

TED策略 TED Policy:Transformer EmbeddingDialogue Policy。TED是Rasa Open Source默认的基于机器学习的对话策略。

追踪器Tracker:维护对话状态的Rasa开源组件,它表示为JSON对象,列出了当前会话中的事件。

参考资料

[1]

Rasa: https://rasa.com/docs/rasa/

[2]

Rasa X: https://github.com/RasaHQ/rasa-x-helm

[3]

https://docs.docker.com/engine/install/: Docker

THE END
开源对话机器人:Rasa3安装和基础入门
开源对话机器人:Rasa3安装和基础入门

文本摘要简述,基于Pytorch和Hugging Face Transformers构建示例,有源码

2023-01-07

开源对话机器人:Rasa3安装和基础入门

智能留学咨询,Chatbot走进马来亚大学,一款留学对话机器人

2022-12-31

开源对话机器人:Rasa3安装和基础入门

如何搭建一个智能对话机器人?行业应用和问答技术梳理

2023-02-02

开源对话机器人:Rasa3安装和基础入门

一次解决python环境管理和更换镜像源『Mac/Win/Linux』

2023-02-02

开源对话机器人:Rasa3安装和基础入门


开源对话机器人:Rasa3安装和基础入门星标公众号精彩不错过

开源对话机器人:Rasa3安装和基础入门


开源对话机器人:Rasa3安装和基础入门

ID:torchnlp
◆◆◆◆◆◆◆◆◆◆◆
知识传播者。利他主义者

开源对话机器人:Rasa3安装和基础入门

点赞”是喜欢,“在看、分享”是真爱开源对话机器人:Rasa3安装和基础入门

<

原创文章。转载请注明: 作者:meixi 网址: https://www.icnma.com
Like (0)
meixi管理
Previous 07/03/2023 21:52
Next 07/03/2023 21:53

猜你想看