RasaX - 部署

1. 前置介绍

​ 本项目实现了rasa从开发到部署,以及通过rasa-x训练模型,一整套流程

  • 版本

    • rasa: 2.8.14
    • rasa-sdk: 2.8.6
    • rasa-x: 0.42.6
  • 为什么选低版本

    当前rasa的最高版本已经到3.4.x,rasa-x的版本在1.1.*,选择2.x的版本的原因,是rasa-x到1.1以后,需要收费,rasa-x的社区版本已经不维护

    详见官方说明:https://forum.rasa.com/t/changes-to-the-rasa-x-community-edition-free-version/53650

    哪些更改将于今天(2022 年 6 月 8 日)生效

    • Rasa 将不再维护或支持我们工具的免费版本(“Rasa X”)。2022 年 3 月 29 日发布的 1.1 版是最后一个次要版本。
    • Rasa X 用户可以继续使用当前版本或升级到 1.1(与 Rasa Open Source 3 兼容),请注意 Rasa X 文档将移至旧文档 642022 年 6 月 8 日。
    • Rasa Enterprise 的试用版将可供评估。请联系销售 15如果你感兴趣。
    • Rasa X 论坛部分将保持开放,但我们将在 2022 年底将其设置为只读。
    • 我们将关闭RasaHQ/rasa上的所有问题 17与 Rasa X 相关的回购协议。

​ 虽然官方讲支持rasa-x 1.1版本,并且兼容rasa 3.x 的版本,但是实际测试,按照官方文档的部署,运行不起来,也在运行脚本里下载不到低版本的rasax。

2. 项目开发

3. 项目部署

主要还是参考官方文档的部署步骤:

https://legacy-docs-rasa-x.rasa.com/docs/rasa-x/0.42.x/installation-and-setup/install/docker-compose#docker-compose-manual-install

注意:建议使用docker-compose手动安装,官方提供的一键脚本安装有问题,脚本里的链接下载不到对应的包,无法启动

3.1 基础环境

  • CentOS7
  • docker 23.0.1
  • docker-compose 2.16.0
  • python 3.7.16

3.1.1 创建centos7

可以通过VMware创建虚拟机,具体搭建过程,可以参考文章Win安装centOS7虚拟机

3.1.2 安装docker和docker-compose

可以参考文章Linux环境安装Docker

3.1.3 安装python3.7

注意:python 版本应在 3.6 以上才能使用 Rasa 和 Rasa X。

此处是在没有安装过python3的环境中安装python3.7。

  • 下载https://www.python.org/ftp/python/
  • yum -y install gcc
  • yum install zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel xz xz-devel libffi-devel
  • mkdir -p /usr/local/python3
  • ./configure –prefix=/usr/local/python3
  • make && make install
  • ln -s /usr/local/python3/bin/python3 /usr/local/bin/python3
  • ln -s /usr/local/python3/bin/pip3 /usr/local/bin/pip3

3.1.4 检查基本环境

1
2
3
4
5
6
7
python3 --version && docker -v && docker-compose -v

打印结果:
[root@localhost rasa]# python3 --version && docker -v && docker-compose -v
Python 3.7.16
Docker version 23.0.1, build a5ee5b1
Docker Compose version v2.16.0

3.2 部署rasa-x

3.2.1 设置项目目录

1
2
mkdir /etc/rasa
cd /etc/rasa

3.2.2 下载相关文件

1
2
3
4
5
6
7
wget -qO docker-compose.yml https://storage.googleapis.com/rasa-x-releases/0.42.6/docker-compose.ce.yml
wget -qO rasa_x_commands.py https://storage.googleapis.com/rasa-x-releases/0.42.6/rasa_x_commands.py

mkdir nginx-config-files
wget -qO nginx-config-files/nginx.conf https://storage.googleapis.com/rasa-x-releases/0.42.6/nginx-config-files/nginx.conf
wget -qO nginx-config-files/ssl.conf.template https://storage.googleapis.com/rasa-x-releases/0.42.6/nginx-config-files/ssl.conf.template
wget -qO nginx-config-files/rasax.nginx.template https://storage.googleapis.com/rasa-x-releases/0.42.6/nginx-config-files/rasax.nginx.template

3.2.3 配置环境变量

  • 在/etc/rasa目录下,vim .env
1
2
3
4
5
6
7
8
9
10
11
12
13
# rasax specific settings
RASA_X_VERSION="0.42.6"
RASA_VERSION="2.8.14"
RASA_TOKEN="123456"
RASA_X_TOKEN="123456"
PASSWORD_SALT="123456"
JWT_SECRET="123456"
RABBITMQ_PASSWORD="123456"
DB_PASSWORD="123456"
REDIS_PASSWORD="123456"
RASA_TELEMETRY_ENABLED=false
RASA_X_DEMO_VERSION="0.42.4"
RASA_USER_APP="http://192.168.80.128:5055"

如果按照官方的,需要执行openssl rand -base64 16用于生成随机序列

3.2.4 Credentials

  • 在/etc/rasa目录下,创建credentials.yml, 使用vim credentials.yml
1
2
rasa:
url: ${RASA_X_HOST}/api

3.2.5 Endpoints

  • 在/etc/rasa目录下,创建endpoints.yml, 使用vim endpoints.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
models:
url: ${RASA_MODEL_SERVER}
token: ${RASA_X_TOKEN}
wait_time_between_pulls: ${RASA_MODEL_PULL_INTERVAL}
tracker_store:
type: sql
dialect: "postgresql"
url: ${DB_HOST}
port: ${DB_PORT}
username: ${DB_USER}
password: ${DB_PASSWORD}
db: ${DB_DATABASE}
login_db: ${DB_LOGIN_DB}
lock_store:
type: "redis"
url: ${REDIS_HOST}
port: ${REDIS_PORT}
password: ${REDIS_PASSWORD}
db: ${REDIS_DB}
cache:
type: "redis"
url: ${REDIS_HOST}
port: ${REDIS_PORT}
password: ${REDIS_PASSWORD}
db: ${REDIS_CACHE_DB}
event_broker:
type: "pika"
url: ${RABBITMQ_HOST}
username: ${RABBITMQ_USERNAME}
password: ${RABBITMQ_PASSWORD}
queues:
- ${RABBITMQ_QUEUE}
action_endpoint:
url: ${RASA_USER_APP}/webhook
token: ""

3.2.6 部署环境

  • 在/etc/rasa目录下,创建environments.yml, 使用vim environments.yml
1
2
3
4
5
6
7
rasa:
production:
url: http://rasa-production:5005
token: ${RASA_TOKEN}
worker:
url: http://rasa-worker:5005
token: ${RASA_TOKEN}

3.2.7 自定义docker-compose

  • 为了升级方便,官方建议单独创建docker-compose.override.yml覆盖docker-compose.yml
  • vim docker-compose.override.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
version: '3.4'
x-rasa-credentials:
RASA_USER_APP: "${RASA_USER_APP}"
x-rasax-credentials:
RASA_USER_APP: "${RASA_USER_APP}"
services:
rabbit:
ports:
- "5672:5672"
- "15672:15672"
rasa-production:
environment:
RASA_USER_APP: "${RASA_USER_APP}"
rasa-worker:
environment:
RASA_USER_APP: "${RASA_USER_APP}"
rasa-x:
environment:
DEBUG_MODE: "true"
LOG_LEVEL: "DEBUG"
RASA_USER_APP: "${RASA_USER_APP}"
redis:
ports:
- "6379:6379"

3.2.8 挂载目录

  • 在创建目录
1
2
3
4
5
6
mkdir /etc/rasa/auth
mkdir /etc/rasa/certs
mkdir /etc/rasa/credentials
mkdir /etc/rasa/models
mkdir /etc/rasa/logs
mkdir /etc/rasa/db
  • 给目录授权
1
sudo chgrp -R root /etc/rasa/* && sudo chmod -R 770 /etc/rasa/*

3.2.9 Postgres 数据库存储

  • 配置持久性 Postgres 数据库存储
1
sudo chown -R 1001 /etc/rasa/db && sudo chmod -R 750 /etc/rasa/db

3.2.10 启动docker-compose

1
2
3
4
5
6
7
8
9
10
11
# 创建并启动
docker-compose up -d

# 重启
docker-compose restart

# 停止
docker-compose stop

# 销毁
docker-compose down

3.2.11 设置管理员密码

1
sudo python rasa_x_commands.py create --update admin me 123456
  • 如果执行报错
1
2
/bin/sh: docker-compose: command not found
ERROR:__main__:Failed to create user.

使用以下命令执行

1
python3 rasa_x_commands.py create --update admin me 123456

3.2.12 访问rasax

http://192.168.80.128/conversations

image-20230331141354895

3.2.13 注意事项

  • 如果销毁然后重新创建docker-compose,rasa会下载资源,特别耗时间,建议第一次下载完成后,将缓存下载下来,后面再重新创建启动容器docker-compose up -d后,直接把缓存文件拷贝到对应的目录,较少启动时间
1
2
3
4
5
6
7
8
# 下载缓存文件
docker exec -it rasa-rasa-production-1 /bin/bash
# 将缓存文件从容器拷到本地
docker cp rasa-rasa-production-1:/app/.cache /home/cmyang/rasa/

#在下一次创建启动容器后,将缓存文件拷到容器里
docker cp /home/cmyang/rasa/.cache rasa-rasa-production-1:/app/
docker cp /home/cmyang/rasa/.cache rasa-rasa-worker-1:/app/
  • 启动报错
1
xxx IPv4 forwarding is disabled. Networking will not work.

需要设置ipv4转发

1
2
3
4
5
6
7
vim /etc/sysctl.conf

# 添加
net.ipv4.ip_forward=1

# 重启网络
systemctl restart network

3.3 部署rasa

1
2
3
docker run -d --name quectel-bot -p 5005:5005 -p 5055:5055 -p 8000:8000 \
-v /home/dockerdata/quectel-bot/conf/endpoints.yml:/app/endpoints.yml \
quectel-bot:latest

4. 使用rasa x

4.1 配置CICD

让rasa x和代码仓库关联起来

  • 点击左下角Git图标,选择Connect to a repository

    image-20230331141713568

  • 填写git地址免费版本只支持ssh方式

    image-20230331143933769

  • 将ssh公钥配置在git上,需要支持可写,单击验证

  • 等待一会,就会把代码同步过来

    image-20230331144504221

4.2 训练模型

  • 点击Add model -> Train model

    image-20230331144605301

  • 训练完成点击 see new model

    image-20230331144948505

  • 激活model

    image-20230331145126666