您的位置:首页 > 新闻 > 热点要闻 > 在Docker中部署Rasa NLU服务

在Docker中部署Rasa NLU服务

2025/1/13 6:21:44 来源:https://blog.csdn.net/yeshang_lady/article/details/140947363  浏览:    关键词:在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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com