当前位置: 首页 > 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…...

Cline与大模型的交互协议(内涵Agent实现原理)

MCP协议 MCP只规定了MCP Host与MCP Server之间的沟通协议&#xff0c;并没有对大模型的输入和输出格式提出要求&#xff1b;因此不同的MCP Host就可能会用不同的格式来与大模型进行沟通&#xff1b;比如Cline就是用的xml。 MCP与大模型的沟通方式&#xff1f;配置中转服务器中转…...

如何在5分钟内将你的电脑变身为智能语音助手:py-xiaozhi完整配置指南

如何在5分钟内将你的电脑变身为智能语音助手&#xff1a;py-xiaozhi完整配置指南 【免费下载链接】py-xiaozhi A Python-based Xiaozhi AI for users who want the full Xiaozhi experience without owning specialized hardware. 项目地址: https://gitcode.com/gh_mirrors/…...

HTML5从零到精通全攻略,一周内精通前端最基本框架

这是一篇为“什么都不懂的初学者”准备的HTML5超详细入门长文。请注意&#xff0c;文章较长&#xff0c;但结构清晰&#xff0c;配有大量简单例子和实战环节。我们遵循从概念到实践&#xff0c;从简单到复杂的路径。 ⚠️ 长文预警与学习指南 本文旨在用一周左右的时间&#x…...

嵌入式OTA升级技术详解与实现方案

1. 嵌入式OTA升级技术概述OTA&#xff08;Over-the-Air Technology&#xff09;技术在现代嵌入式系统中扮演着至关重要的角色。作为一名嵌入式开发工程师&#xff0c;我在多个物联网项目中都深度参与了OTA功能的实现与优化。简单来说&#xff0c;OTA升级就是通过无线通信方式&a…...

Block Diffusion【202503】:在自回归与扩散语言模型之间插值【Interpolating Between Autoregressive and Diffusion LM】

块扩散:在自回归与扩散语言模型之间插值 Marianne Arriola† ∗ Aaron Kerem Gokaslan† Justin T. Chiu‡ Zhihan Yang† Zhixuan Qi† Jiaqi Han Subham Sekhar Sahoo† Volodymyr Kuleshov† 摘要 扩散语言模型因其并行生成和可控性的潜力,相比自回归模型具有独特…...

【JEECG Boot】JEECG Boot 系统性知识体系全方位结构化总结

文章目录JEECG Boot一、平台基础定位与核心理念1. 核心定义与定位2. 核心设计理念二、整体技术架构体系1. 分层架构总览2. 核心技术栈明细3. 核心架构特性三、核心能力体系1. 低代码核心能力&#xff1a;代码生成器2. 零代码核心能力&#xff1a;Online在线开发3. AI原生赋能能…...

自定义安卓图标样式:手把手教你用overlay修改framework-res,避开常见坑

深度定制安卓系统图标&#xff1a;Overlay技术实战与避坑指南 在安卓系统的深度定制领域&#xff0c;图标样式的修改一直是开发者们热衷探索的方向。不同于简单的主题更换&#xff0c;通过修改framework-res中的config_icon_mask参数&#xff0c;可以实现系统级图标样式的全局统…...

零信任架构下的企业数据安全防护体系设计与实践

1. 零信任架构&#xff1a;企业数据安全的新范式 过去十年我见过太多企业安全事件&#xff0c;根源往往在于传统边界防护的失效。某次给金融客户做安全评估时发现&#xff0c;他们花重金部署的防火墙就像个筛子——攻击者通过一个普通员工的钓鱼邮件就长驱直入&#xff0c;最终…...

告别网络依赖:下载、切片、集成,三步构建你的专属高德离线地图库

构建企业级高德离线地图资产库&#xff1a;从瓦片管理到前端集成的工程化实践 在政务、军工、能源等对数据安全性要求极高的领域&#xff0c;或是偏远地区网络条件受限的场景&#xff0c;在线地图服务往往成为系统可靠性的短板。我曾参与某省级政务内网项目的架构设计&#xff…...

e1547:为e621社区构建的专业级移动端浏览解决方案

e1547&#xff1a;为e621社区构建的专业级移动端浏览解决方案 【免费下载链接】e1547 A sophisticated e621 browser 项目地址: https://gitcode.com/gh_mirrors/e1/e1547 在数字内容消费日益移动化的今天&#xff0c;专业社区平台的移动端体验往往成为用户留存的关键因…...