当前位置: 首页 > news >正文

在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

相关文章:

在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框架来返回这三种类型的数据。 环境准备 在开始之前&#xff0…...

网工内推 | 国企运维工程师,华为认证优先,最高年薪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环境中自然也可以。 一、浏览器是多进程和多线程的复杂应用 在本系列的第二章节,有提到现代浏览器是一个多进程和多线程的复杂应用。浏览器主进程统管全局&#xf…...

【实战指南】从提升AI知识库效果,从PDF转Markdown开始

经常有人抱怨AI知识库精确度不够、答非所问。我有时候想想,会觉得其实AI也挺冤的,因为很有可能不是它能力不行,而是你一开始给的文档就有问题,导致它提取文本有错误、不完整,那后边一连串的检索、生成怎么可能好呢&…...

Android 删除telephony的features

比如删除android.hardware.telephony.subscription 找到这个文件&#xff1a;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网关是一个服务器&#xff0c;是系统的唯一入口。从面向对象设计的角度看&#xff0c;它与外观模式类似。API网关封装了系统内部架构&#xff0c;为每个客户端提供一个定制的API。它可能还具有其它职责&#xff0c;如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响…...

Kubernetes中的CRI、CNI与CSI:深入理解云原生存储、网络与容器运行时

引言 随着云原生技术的飞速发展&#xff0c;Kubernetes&#xff08;简称K8s&#xff09;作为云原生应用的核心调度平台&#xff0c;其重要性日益凸显。K8s通过开放一系列接口&#xff0c;实现了高度的可扩展性和灵活性&#xff0c;其中CRI&#xff08;Container Runtime Inter…...

【数据结构】二叉搜索树(Java + 链表实现)

Hi~&#xff01;这里是奋斗的明志&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f331;&#x1f331;个人主页&#xff1a;奋斗的明志 &#x1f331;&#x1f331;所属专栏&#xff1a;数据结构、LeetCode专栏 &#x1f4da;本系…...

java Brotli压缩算法实现压缩、解压缩

在Java中实现Brotli压缩和解压缩&#xff0c;你可以使用org.brotlienc和org.brotlidec包中的类。以下是压缩和解压缩的基本步骤和示例代码&#xff1a; 压缩文件 创建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…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...