在Docker中部署Rasa NLU服务

最近因为项目需要将rasa nlu配置到docker容器中供系统调用,本篇主要整理该服务的docker配置过程。
本篇的重点在于docker的使用,不在Rasa NLU。
系统环境:Ubuntu 18.04.6

1. Rasa介绍

  Rasa是一个开源的机器学习框架,专为构建基于文本和语音的对话驱动型自动化智能客服助手而设计。它能够克服传统客服的部分缺陷,提供自然语言理解(Rasa NLU)和对话管理(Rasa Core)两大核心功能。Rasa NLU负责用户意图识别、实体提取等,而Rasa Core则基于对话历史和用户输入,预测并决定下一步的对话动作。Rasa支持多种语言,包括英语和汉语,且易于集成到其他应用或系统中,如网站、软件和机器人等。其轻量级、高性能的设计以及多模型支持的特性,使得开发者能够快速构建各类智能对话应用。

2. 具体过程

2.1 拉取镜像

  在开始之前,需要将rasa镜像拉取到Ubuntu系统中。最近国内很多docker镜像库接连失效,考虑使用代理拉取rasa镜像。但笔者的Ubuntu系统是安装在虚拟机中,无法使用代理。基于以上种种原因,本篇先在宿主机上拉取rasa镜像,然后将宿主机作为私人仓库供虚拟机拉取镜像。具体步骤如下:

  • 确保宿主机系统和虚拟机中的Ubuntu系统都已经安装docker。
  • 先在宿主机系统(即安装虚拟机的系统)上拉取rasa镜像(rasa的镜像地址可以在docker hub中自行查找)。其具体代码如下:
docker pull rasa/rasa:3.6.20-full

如果在Ubuntu系统上直接通过docker pull拉取rasa镜像能够成功的话,就不需要执行后续步骤了

  • 在宿主机系统上创建docker私人仓库,并将刚刚拉取的rasa镜像推送到私人仓库中,其具体代码如下:
docker pull registry
#创建私人仓库对应的docker容器,一般宿主机选择5000端口,即设置-p 5000:5000,但笔者的宿主机系统上的5000端口已经被占用,所以改成9000端口(端口号可以依据宿主机的情况来设定)
docker run -d --name registry -p 9000:5000 registry
#给rasa镜像打标签
docker tag rasa/rasa:3.6.20-full localhost:9000/rasa
#将镜像推送到私人仓库中
docker push localhost:9000/rasa
  • 使用ifconfig命令获取宿主机系统的ip地址(步骤省略)。虚拟机中的Ubuntu系统可以通过宿主机系统ip:9000访问宿主机上的私人仓库。
  • 修改虚拟机中Ubuntu系统中的docker文件daemon.json,并重启docker服务。具体操作如下:
sudo vim /etc/docker/daemon.json

将如下内容添加到daemon.json文件中:

"insecure-registries":["宿主机系统ip:9000"]
#宿主机ip地址不需要添加http://或https://前缀

接着,重启docker服务,具体如下:

systemctl daemon-reload
sytemctl restart docker.service
  • 虚拟机系统通过以下命令即可从宿主机上的docker私人仓库上拉取rasa镜像:
docker login 宿主机ip:9000 #需要输入账号和密码,可以随意设置,与宿主机的账号密码无关
#领取rasa镜像
docker pull 宿主机系统ip:9000/rasa
#查看镜像
docker images

2.2 创建容器

  从此处开始,以下过程都是在虚拟机中的Ubuntu系统上进行。rasa镜像拉取成功之后,需要使用如下命令创建容器:

docker run -d --name rasa -p 9000:5005 宿主机ip:9000/rasa run --enable-api

关于这行命令及其使用的参数,说明如下:

  • -d:表示容器在后台运行;
  • -name:指定容器名称;
  • -p:映射或公开容器的端口到宿主机(这里的宿主机指的是docker容器宿主机,即Ubuntu系统)的端口。在这个案例中即通过Ubuntu系统的9000端口(这个端口号与私人docker仓库的的端口号没有任何关系,这里只是恰好相同)即可访问该docker容器的5005端口,而5005端口为Rasa NLU默认的运行端口。
  • run --enable-api: 为修改的容器启动命令。docker镜像的ENTRYPOINT指令规定了Docker容器启动时运行的默认可执行文件或命令,而CMD规定了容器启动时的默认参数,rasa镜像中默认的ENTRYPOINTCMD可以docker hub中查到,其具体如下。
    在这里插入图片描述
    但笔者希望该容器能以RESTful HTTP API的形式提供Rasa NLU服务,所以需要修改CMDrun --enable-api(要更改CMD, 只需将覆盖的命令和参数添加到docker run命令的最后即可)。

上述命令运行成功之后,即可通过docker ps -a命令看到成功创建的容器。

2.3 部署Rasa NLU

  容器创建完成之后,接着就需要与容器进行交互了并创建Rasa NLU服务了。其指令如下:

docker exec -it -u 0 rasa bash

关于这个命令有以下几点需要说明:

  • -it:为用户提供了一个完整的交互式终端环境,让用户能够像在本地计算机上一样与容器进行交互。
  • -u 0:以root用户的身份在容器中执行指定的命令。如果在容器中执行指令的时候,如果遇到权限问题,就需要加上这个。
  • bash: 启动一个新的bash shell会话。

成功执行上述命令之后,即可看到如下结果:
在这里插入图片描述
  接着便可以在该容器中创建Rasa NLU服务了(先执行rasa init命令之后即可开始训练模型,具体的过程这里省略)。
  如果在创建服务的过程中需要向docker容器中传输文件,可以使用docker cp命令。假设需要将Ubuntu系统中的/tmp/nlu.yml传输到rasa容器中的/app/data中时,可以使用如下命令:

#执行该命令时,需要先使用`exit`命令退出docker容器的bash shell会话,回到Ubuntu系统中
docker cp /tmp/nlu.yml rasa:/app/data

若需要将容器中的文件传输到Ubuntu系统中,则将上述两类路径的位置调换即可。

2.4 重启容器并使用服务

  等到训练完Rasa NLU的模型之后,需要重启容器保证所做的修改生效。具体指令如下:

docker restart rasa

接着便可以使用该服务了,这里仅举一个例子,具体如下:

curl localhost:9000/model/parse -d '{"text":"hello"}'

其执行结果如下:
在这里插入图片描述
  还有一点要注意,在重启完docker容器之后不要立即就执行上述命令。因为重启容器其实是执行rasa run --enable-api命令,这个命令的执行需要一点时间。如果立即执行了curl命令调用Rasa NLU服务,可能会报错。

参考资料

  1. https://blog.csdn.net/qq_41056224/article/details/120343764
  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Docker安装Rasa,您可以按照以下步骤进行操作: 1. 首先,您需要确保您的机器上已经安装了Docker。您可以通过运行命令`docker -v`和`docker-compose -v`来检查Docker的版本。如果命令不起作用,那么您需要安装Docker。有关详细信息,请参阅Docker的安装文档。\[1\] 2. 确认您已经安装了Docker后,您可以使用以下命令来检查Docker的版本: ``` docker -v && docker-compose -v ``` 这将显示您安装的DockerDocker Compose的版本信息。\[2\] 3. 接下来,您需要在Docker构建Rasa镜像。首先,切换到包含Dockerfile的目录,然后运行以下命令: ``` docker build -t rasa/actions:travel2.7.0 . ``` 这将根据Dockerfile的配置构建一个名为`rasa/actions:travel2.7.0`的镜像。\[3\] 通过按照上述步骤,在Docker安装Rasa应该是相对简单的。希望这可以帮助到您! #### 引用[.reference_title] - *1* *2* [在 Docker Compose 部署 Rasa 开源助手](https://blog.csdn.net/weixin_42486623/article/details/122240857)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Docker部署Rasa+MySQL+Neo4j](https://blog.csdn.net/weixin_41260141/article/details/123405002)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值