构建Rasa低成本的Docker开发部署环境

时间:2022-07-24
本文章向大家介绍构建Rasa低成本的Docker开发部署环境,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

今天想着如何快速的将 Rasa API 融入之前的项目中,如在我的公众号 coding01[1]里增加一个自动回复聊天机器人。

长期以来,我一直用 Laradock[2],Laradock 本身也集成了一些好用的开发部署工具,如 Nginx,certbot 等,在学习使用 Rasa 时,想着以最快的速度构建开发部署 Rasa 接口,所以今天我主要采用常规的做法——基于 Nginx 和 Docker 部署 Rasa。

注:由于 Rasa X 自成体系,在学习过程中,我还是放在「学习 Kubernetes 的系列」中去了解 Rasa X 的使用。

前言

在之前的文章中,有描述过如何在公众号里加入自动聊天机器人的文章,欢迎大家查阅:有机器人要菜单没什么用[3],文章里利用 EasyWeChat 和 ChatterBot 简单搭建一个公众号「自动回复机器人」,利用 EasyWeChat 桥接好公众号和机器人。今天的目的其实就是「把 ChatterBot 替换成 Rasa」。

起点:docker-compose

通过 rasa init 或者在 rasa 已有项目目录下创建 docker-compose.yml文件。

version: '3.0'
services:
  rasa:
    image: rasa/rasa:1.10.8-full
    ports:
      - 5005:5005
    volumes:
      - ./:/app
    command:
      - run

执行 docker-compose up -d,看看效果:

发一个 api 请求:

curl -XPOST http://localhost:5005/webhooks/rest/webhook 
  -H "Content-type: application/json" 
  -d '{"sender": "test", "message": "hello"}'

加入 actions 镜像

第一步,在项目根目录创建 actions 文件夹,并将我们的 actions 代码移到文件夹 actions 下,同时创建空的 actions/__init__.py 文件,保证我们的 rasa/rasa-sdk 镜像自动找到 actions/actions.py:

mkdir actions
mv actions.py actions/actions.py
touch actions/__init__.py

第二步,如果我们的 actions 需要用到第三方插件,则可以在 actions 下创建文件 requirements-actions.txt

第三步,创建 Dockerfile 文件,构建镜像。

# Extend the official Rasa SDK image
FROM rasa/rasa-sdk:2.0.0a1

# Use subdirectory as working directory
WORKDIR /app

# Copy any additional custom requirements, if necessary (uncomment next line)
# COPY actions/requirements-actions.txt ./

# Change back to root user to install dependencies
USER root

# Install extra requirements for actions code, if necessary (uncomment next line)
# RUN pip install -r requirements-actions.txt

# Copy actions folder to working directory
COPY ./actions /app/actions
# By best practices, don't run the code with root user
USER 1001

构建镜像:

docker build . -t yemeishu/rasaactions:0.0.1

// 过程
Sending build context to Docker daemon  25.29MB
Step 1/5 : FROM rasa/rasa-sdk:2.0.0a1
 ---> 2824b7c5c4ea
Step 2/5 : WORKDIR /app
 ---> Using cache
 ---> 3a5f4ca5a749
Step 3/5 : USER root
 ---> Using cache
 ---> 4aea165d622a
Step 4/5 : COPY ./actions /app/actions
 ---> 88412ef28945
Step 5/5 : USER 1001
 ---> Running in 185f70fa52aa
Removing intermediate container 185f70fa52aa
 ---> fa9dc8d4555e
Successfully built fa9dc8d4555e
Successfully tagged yemeishu/rasaactions:0.0.1

发布镜像:

docker push yemeishu/rasaactions:0.0.1

项目关联 actions 镜像

在之前的 docker-compose.yml 增加 app service。

version: '3.0'
services:
  rasa:
    image: rasa/rasa:1.10.8-full
    ports:
      - 5005:5005
    volumes:
      - ./:/app
    command:
      - run
  app:
    image: yemeishu/rasaactions:0.0.1
    expose: 5055

这样就可以通过端口 5005,将服务提供给 rasa service 使用,即可以在 endpoints.yml 修改关联路径。

action_endpoint:
  url: http://app:5055/webhook

此处验证:「略」

与 Laradock nginx 连接

到此,基本的配置都没问题了,接下来我们加入中文回复。

具体参考:Rasa 开篇之 hello world[4]

训练我们的 model:

docker-compose exec rasa rasa tran

重启容器:

docker-compose restart rasa

在与 Laradock nginx 连接之前,我们需要将容器 rasa 关联到 laradock network 上:

docker network connect laradock_backend hello_rasa_1

可以通过命令查看:

docker network inspect laradock_backend

关联后,就可以在 nginx 配置上用容器名字代替 ip 关联了,具体 nginx 配置文件:

upstream chatbot {
      server hello2_rasa_1:5005 weight=10 max_fails=3 fail_timeout=30s;
}

server {

    listen 80;
    listen [::]:80;

    server_name chatbot.test;

    location / {
        proxy_pass http://chatbot/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

    location /.well-known/acme-challenge/ {
        root /var/www/letsencrypt/;
        log_not_found off;
    }
}

最后在 /etc/hosts 加入域名关联,就可大功告成。

我们执行下请求命令:

总结

回到开头的说的如何在公众号加入聊天功能,将在下回继续了。

今天主要学到的知识点在于,如何用最小的 docker 配置(摒弃 Rasa X),完成和 nginx 容器关联,获得请求接口,以备后续调用。

参考

[1] coding01 https://mp.weixin.qq.com/s/lOJmUEH7QcewHngcLJbssw

[2] Laradock http://laradock.io

[3] 有机器人要菜单没什么用 https://mp.weixin.qq.com/s/j-3mBrchblQgSyVZ5gGUSQ

[4] Rasa 开篇之 hello world https://mp.weixin.qq.com/s/HpPxrG2Sr67Sz_nEJHH2PA