ubuntu安装rasa

参考资料:

简介

Rasa是一个开源机器学习框架,用于构建上下文AI助手和聊天机器人。
Rasa有两个主要模块:

  • Rasa NLU :用于理解用户消息,包括意图识别和实体识别,它会把用户的输入转换为结构化的数据。

  • Rasa Core:是一个对话管理平台,用于举行对话和决定下一步做什么。

Rasa X是一个工具,可帮助您构建、改进和部署由Rasa框架提供支持的AI Assistants。 Rasa X包括用户界面和REST API。

官方文档

Rasa架构

在这里插入图片描述

  1. 收到消息并将其传递给解释器(Interpreter),解释器将其转换为包含原始文本,意图和找到的任何实体的字典。这部分由NLU处理。
  2. 跟踪器(Tracker)是跟踪对话状态的对象。它接收新消息进入的信息。 策略(Policy)接收跟踪器的当前状态。
  3. 该策略选择接下来采取的操作(action)。
  4. 选择的操作由跟踪器记录。
  5. 响应被发送给用户。

安装环境要求

Rasa Version     : 2.3.3
Rasa SDK Version : 2.8.1
Rasa X Version   : 0.37.0
Python Version   : 3.6.9
Operating System : Ubuntu-18.04
pip 			 : 21.2.2
numpy			 :1.16.6
pyjwt			 : 2.0.0

环境安装

python

ubuntu18安装步骤略

# 安装python3.7
sudo apt install python3.7
# 查看python版本
python3 -V
# 安装pip3
sudo apt install python3-pip
# 更新pip3
python3 -m pip install -U pip

默认pip源或网络不稳定容易失败,修改为清华大学镜像源

#  如果已经存在pip.conf文件,只需要执行第二步即可
sudo mkdir ~/.pip
sudo vim~/.pip/pip.conf

然后,pip.conf的文件内容如下:

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=pypi.tuna.tsinghua.edu.cn
disable-pip-version-check = true
timeout = 6000

rasa

安装rasa, 由于网络问题,延长超时时间,如果仍然超时异常,多执行几次

# 该命令运行时间较长,会安装完所有的依赖
sudo pip --default-timeout=500 install -U rasa==2.3.3
# 生成文件
sudo rasa init --no-prompt

注:如果出现No matching distribution found for tensorflow>=2.1.0异常,可以通过执行pip3 install --upgrade tensorflow rasa命令解决。

初始化

执行rasa init命令的目的为自动生成开发一个Rasa项目所需的所有必要文件,包括执行训练NLU和对话模型。

初始化项目:rasa init
启动Rasa API:rasa run --enable-api
访问http://localhost:5005/ 检验是否启动成功

rasa提供接口见官网

文件说明

有了这些文件我们便可以不作任何修改就能使Rasa项目跑起来,更重要的是,对于未来一些具体业务来说,也是修改这些文件的内容,这些文件名称及其作用如下表所示:

init.py空文件
actions.py可以自定义 actions 的代码文件
config.yml ‘*’Rasa NLU 和 Rasa Core 的配置文件
credentials.yml定义和其他服务连接的一些细节,例如rasa api接口
data/nlu.md ‘*’Rasa NLU 的训练数据
data/stories.md ‘*’Rasa stories 数据
domain.yml ‘*’Rasa domain 文件
endpoints.yml和外部消息服务对接的 endpoins 细则,例如 fb messenger
models/.tar.gz初始训练的模型数据

测试

 sudo rasa shell

在这里插入图片描述

rasa-x

接下来安装可视化创建客服机器人的工具rasa-x,这里下载比较慢,所以需要用到后备镜像:

pip3 install -i  https://pypi.rasa.com/simple rasa-x==0.37.0 --extra-index-url https://pypi.tuna.tsinghua.edu.cn/simple --use-deprecated=legacy-resolver

其中-i 表示要用后面的链接为首选包下载源,因为rasa-x没有发到pypi里面,所以它本身的包必须从官网上去下载,比较慢

# pyjwt 版本错误时,卸载重装,然后重新执行rasa-x安装命令
sudo pip3 uninstall pyjwt
pip3 install pyjwt==2.0.0

rasa x正常启动后,会生成一个账号/密码的登录信息,这个马上可以用上
在这里插入图片描述

The server is running at http://localhost:5002/login?username=me&password=SGgVp0qLzHua

接着就可以在浏览器访问http://localhost:5002.登录rasa web页面的时候需要输入密码,
就是上面rasa x启动的密码SGgVp0qLzHua,当然这个密码可以改,修改上面密码命令如下:

export RASA_X_PASSWORD="my-secure-password"
rasa x

做到这一步仍然只能本地访问,还没有到真正可以到外网可以访问

为了共享您的机器人,可以使用ngrok执行此操作。ngrok下载和安装请点击这里
ngrok一旦安装好,在命令后运行以下命令:

./sunny clientid 隧道id

然后进行访问

在这里插入图片描述

rasa构建系统大致流程

参考地址

  • 编写配置domain.yml文件,配置内容包括:设计的槽位,NLU需要识别的实体列表、意图列表,bot回复用户的模板,配置可在story中直接引用的action,配置自定义的form。
  • 编写配置config.yml文件,配置内容包括:使用的NLU模块类(实体抽取、意图识别等),使用的策略列表。
  • 编写stories.md文件,设计话术流程模板。
  • 开发自定义的NLU模块,根据实际需要添加所需的模块。如添加extractor和classifier模块,分别对应实体抽取和意图识别两个模块,可以结合人工规则和机器学习模型。
  • 开发自定的form action模块,在validate中定义自己的处理逻辑。当然也可以重写action的run方法,在其中添加自己的逻辑。
  • 配置endpoints.yml文件,这个文件是用于配置action服务地址的。因为之前说过action是一个独立于主流程的服务,因此需要配置其服务接口。
  • 配置credentials.yml文件, 将对话系统作为一个独立开放的api服务提供给业务方,而rasa支持将对话系统封装成一个restful_api服务。

命令使用

命令简介
rasa init使用示例训练数据,操作和配置文件创建一个新项目。位于空目录下运行即可
rasa train使用您的NLU数据和故事来训练模型,并将训练后的模型保存在中./models。
rasa interactive开始一个交互式学习会话,以通过聊天创建新的训练数据。
rasa shell加载经过训练的模型,并允许您在命令行上与助手交谈。
rasa run使用训练有素的模型启动Rasa服务器。有关详细信息,请参见配置HTTP API文档。
rasa run actions使用Rasa SDK启动动作服务器。
rasa visualize把stories可视化,生成一个html文件,本地可以打开。
rasa test使用您的测试NLU数据和故事测试经过训练的Rasa模型。
rasa data split nlu根据指定的百分比对NLU数据进行拆分。
rasa data convert nlu在不同格式之间转换NLU训练数据。
rasa export将对话从跟踪商店存储到事件代理。
rasa x在本地启动RasaX。
rasa -h显示所有可用命令。

定制一个极简可运行的中文对话样例

nlu

Rasa NLU 是核心模块之一,NLU 是英文 Natural Language Understanding 的简称,也就是自然语言理解,这个模块用于对用户消息内容进行语义理解,并将结果转换成结构化的数据。

在 Rasa 这里,需要提供一份训练数据,Rasa NLU 会基于这份数据进行模型训练,然后通过模型对用户消息进行语义理解,主要是意图识别和槽值提取,我们来看看这份NLU训练数据样例是什么样的:

cat data/nlu.yml 
## intent:greet
- 你好
- 早上好
- 中午好
- 晚上好

## intent:mood_happy
- 很好
- 不错
- 我很好


## intent:mood_unhappy
- 很难过
- 糟糕极了

其中以 ## 开头的行就是用户定义的 intents(意图),下面是一组有相同意图的消息内容。
Rasa NLU 的工作就是当用户发送新的消息内容时正确预测该消息的意图,给AI小助手使用,从而做出准确的呼应。

stories

stories里面设计了对话场景:用户问好 -> 机器问用户今天过得怎么样 -> 用户反馈情绪 -> 机器根据不同的情绪进行回复,这里包含两个流程,一个正面情绪的流程与一个负面情绪的流程,因此也需要编写两个story,所以stories数据如下:

cat data/stories.md 
## story_happy
* greet
  - utter_greet
* mood_happy
  - utter_happy

## story_unhappy
* greet
  - utter_greet
* mood_unhappy
  - utter_unhappy

domain

domain 包含了整个对话场景下的意图,动作,以及对应动作所反馈的内容模板:

cat domain.yml                                  
intents:
  - greet
  - mood_happy
  - mood_unhappy

actions:
  - utter_greet
  - utter_happy
  - utter_unhappy

templates:
  utter_greet:
  - text: "你好,今天过得如何"

  utter_happy:
  - text: "那很不错"

  utter_unhappy:
  - text: "发生了什么事,可以说给我吗?"

train

现在可以用命令"rasa train"训练模型了,训练完毕后,模型文件会存储在models目录下。

可通过 "rasa shell nlu"命令看一下 nlu 输出的结构化数据:

NLU model loaded. Type a message and press enter to parse it.
Next message:
你好
{
  "intent": {
    "name": "greet",
    "confidence": 0.9552139043807983
  },
  "entities": [],
  "intent_ranking": [
    {
      "name": "greet",
      "confidence": 0.9552139043807983
    },
    {
      "name": "mood_unhappy",
      "confidence": 0.09797228127717972
    },
    {
      "name": "mood_happy",
      "confidence": 0.0
    }
  ],
  "text": "你好"
}
Next message:
糟糕极了
{
  "intent": {
    "name": "mood_unhappy",
    "confidence": 0.9557749032974243
  },
  "entities": [],
  "intent_ranking": [
    {
      "name": "mood_unhappy",
      "confidence": 0.9557749032974243
    },
    {
      "name": "mood_happy",
      "confidence": 0.1225115954875946
    },
    {
      "name": "greet",
      "confidence": 0.0
    }
  ],
  "text": "糟糕极了"
}
Next message:
感觉不好
{
  "intent": {
    "name": null,
    "confidence": 0.0
  },
  "entities": [],
  "intent_ranking": [],
  "text": "感觉不好"
}

通过最后一个case可以看出,这个例子由于对中文没有做任何相关的预处理,另外数据量非常少,所以模型除了可以记住nlu里已有的数据外,对于新信息处理的能力几乎为零。

所以在接下来 rasa shell 对话中,我们只能用固定的case进行测试。

关键依赖(出错时,参考)

numpy==1.16.6
rasa==2.3.3
rasa-sdk==2.8.1
rasa-x==0.37.0
scipy==1.5.4
tensorflow==2.3.3
tensorflow-addons==0.12.0
tensorflow-estimator==2.3.0
tensorflow-hub==0.10.0
tensorflow-probability==0.11.1
tensorflow-text==2.3.0

常用命令

查看5005端口是否被占用 netstat -aon | findstr 5005
启动Rasa API服务(跨域)rasa run --enable-api --cors "*"
启动Rasa API服务(保存日志)rasa run --enable-api --log-file out.log
启动Rasa API服务(指定模型)rasa run --enable-api -m models
启动Rasa API服务(指定token)rasa run --enable-api --auth-token 12345678
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳宗德

您的鼓励是我进步的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值