在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
镜像中默认的ENTRYPOINT
和CMD
可以docker hub中查到,其具体如下。
但笔者希望该容器能以RESTful HTTP API的形式提供Rasa NLU服务,所以需要修改CMD
为run --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服务,可能会报错。
参考资料
- https://blog.csdn.net/qq_41056224/article/details/120343764
相关文章:

在Docker中部署Rasa NLU服务
最近因为项目需要将rasa nlu配置到docker容器中供系统调用,本篇主要整理该服务的docker配置过程。 本篇的重点在于docker的使用,不在Rasa NLU。 系统环境:Ubuntu 18.04.6 1. Rasa介绍 Rasa是一个开源的机器学习框架,专为构建基于文…...

SQL语句创建数据库(增删查改)
SQL语句 一.数据库的基础1.1 什么是数据库1.2 基本使用1.2.1 连接服务器1.2.2 使用案例 1.2 SQL分类 二.库的操作2.1 创建数据库2.2 创建数据库示例2.3 字符集和校验规则2.3.1 查看系统默认字符集以及校验规则2.3.2查看数据库支持的字符集2.3.3查看数据库支持的字符集校验规则2…...

微信小程序-Vant组件库的使用
一. 在app.json里面删除style:v2 为了避免使用Vant组件库和微信小程序组件样式的相互影响 二.在app.json里面usingComponents注册Vant组件库的自定义组件 "usingComponents": {"van-icon": "./miniprogram_npm/vant-weapp/icon/index&qu…...

为什么企业需要进行能源体系认证?
通过能源体系认证,企业可以向公众和利益相关方展示其在节能减排方面的承诺和成就。这不仅提升了企业的社会责任形象,还增强了品牌的信誉度。在当今消费者更加关注环境问题的背景下,绿色企业形象有助于赢得市场和客户的认可与信任。 能源体系认…...
【日常记录-MySQL】EVENT
Author:赵志乾 Date:2024-08-07 Declaration:All Right Reserved!!! 1. 简介 在MySQL中,EVENT是一种数据库对象,其用于设定数据库任务自动执行。这些任务可以是任意有效的SQL语句&a…...

嵌入式学习day12(LinuxC高级)
由于C高级部分比较零碎,各部分之间没有联系,所以学起来比较累,多练习就好了 一丶Linux起源 寻科普|第二期:聊聊Linux的前世今生 UNIX和linux的区别: (1)linux是开发源代码的自由软件.而unix是…...
pytorch中的hook机制register_forward_hook
上篇文章主要介绍了hook钩子函数的大致使用流程,本篇文章主要介绍pytorch中的hook机制register_forward_hook,手动在forward之前注册hook,hook在forward执行以后被自动执行。 1、hook背景 Hook被成为钩子机制,pytorch中包含forwa…...
使用Gin框架返回JSON、XML和HTML数据
简介 Gin是一个高性能的Go语言Web框架,它不仅提供了简洁的API,还支持快速的路由和中间件处理。在Web开发中,返回JSON、XML和HTML数据是非常常见的需求。本文将介绍如何使用Gin框架来返回这三种类型的数据。 环境准备 在开始之前࿰…...

网工内推 | 国企运维工程师,华为认证优先,最高年薪20w
01 上海陆家嘴物业管理有限公司 🔷招聘岗位:IT运维工程师 🔷岗位职责: 1、负责对公司软、硬件系统、周边设备、桌面系统、服务器、网络基础环境运行维护、故障排除。 2、负责对各部门软件操作、网络安全进行检查、指导。 3、负责…...
c# 使用异步函数实现线程的功能
c#程序执行时 想要拖动窗口 需要使用线程,但是使用线程 对操作前端窗体很不友好. 所以写了一个异步函数,网上搜了一下,貌似异步函数比线程 更加友好,更加现代 做这个功能的原因是 主要是想等程序执行完 走一个提示.用线程很难做到 using System; using System.Threading; usi…...
MySQL之MySQL server has gone away复现测试
测试MySQL server has gone away复现条件 环境情形一报错信息复现测试 情形二报错信息复现测试 环境 Python: 3.8/3.9 MySQL: 5.x 情形一 报错信息 File "/usr/local/lib/python3.6/dist-packages/MySQLdb/cursors.py", line 319, in _querydb.query(q)File "/…...

编程深水区之并发④:Web多线程
Node的灵感来源于Chrome,更是移植了V8引擎。在Node中能够实现的多线程,在Web环境中自然也可以。 一、浏览器是多进程和多线程的复杂应用 在本系列的第二章节,有提到现代浏览器是一个多进程和多线程的复杂应用。浏览器主进程统管全局…...

【实战指南】从提升AI知识库效果,从PDF转Markdown开始
经常有人抱怨AI知识库精确度不够、答非所问。我有时候想想,会觉得其实AI也挺冤的,因为很有可能不是它能力不行,而是你一开始给的文档就有问题,导致它提取文本有错误、不完整,那后边一连串的检索、生成怎么可能好呢&…...
Android 删除telephony的features
比如删除android.hardware.telephony.subscription 找到这个文件:frameworks/native/data/etc/android.hardware.telephony.subscription.xml <!-- This is the standard set of features for devices to support Telephony Subscription API. --> -<perm…...

Linux驱动开发—编写第一个最简单的驱动模块
文章目录 开发驱动准备工作1.正常运行的Linux系统的开发板2.内核源码树3.nfs挂载的rootfs4.得心趁手的IDE 第一个Hello world 驱动程序常见模块的操作命令模块的初始化和清理模块的版本信息模块中的各种宏 示例Hello World代码printk函数解析 使用MakeFile编译驱动模块使用insm…...

科普文:微服务之Spring Cloud 组件API网关Gateway
API网关是一个服务器,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响…...

Kubernetes中的CRI、CNI与CSI:深入理解云原生存储、网络与容器运行时
引言 随着云原生技术的飞速发展,Kubernetes(简称K8s)作为云原生应用的核心调度平台,其重要性日益凸显。K8s通过开放一系列接口,实现了高度的可扩展性和灵活性,其中CRI(Container Runtime Inter…...

【数据结构】二叉搜索树(Java + 链表实现)
Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:数据结构、LeetCode专栏 📚本系…...
java Brotli压缩算法实现压缩、解压缩
在Java中实现Brotli压缩和解压缩,你可以使用org.brotlienc和org.brotlidec包中的类。以下是压缩和解压缩的基本步骤和示例代码: 压缩文件 创建FileInputStream以读取原始文件。创建BrotliOutputStream以写入压缩数据。读取原始文件并写入压缩流。关闭流…...
centos7.9 安装java相关组件
10.23.15.71 - 78 账户 admin IMES1 改为root再操作 $ sudo su root ($ su root) 下载包 /home/admin/download $ mkdir download $ chown -R admin:admin /home/admin/download 安装包 /data/local $ tar -sxvf jdk-11.0.23_linux-x64_bin.tar.gz -C /data/local $ mv jdk…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...