构建对话机器人:Rasa3安装和基础入门
在开源对话机器人中,Rasa社区很活跃,在国内很多企业也在使用Rasa做对话机器人,有rasa开发经验的往往是加分项。
当年实习的时候接触到了Rasa,现在工作中也使用Rasa,因此,写写一些经验文档,有助后来人的入门和研究。
本文是Rasa的第一篇,偏基础入门内容,主要是本地和使用docker镜像如何安装rasa,后续会持续更新关于rasa的使用拆解每个文件功能和内部细节、如何修改配置、如何使用中文模型等。
目标是使用rasa构建一个自己的对话机器人!
文章首发自公众号:写bug的程旭源
rasa安装和使用
我们做工程开发的时候,首先要解决好安装环境和包的版本依赖问题。
Python建议使用3.9版本(python==3.9),如果想使用Rasa X那么rasa的版本要(rasa<3.0.0,>=2.8.15),也就是说RasaX只支持2.x版本。Rasa3的版本要使用RasaX要使用RasaPro和企业版相关配置了。
Rasa安装有很多种方法,比如Docker镜像安装、conda/pip本地安装、Poetry源码构建等方式。
conda/pip安装rasa
初使用Rasa的同学建议用这个方法安装。
【添加conda pip环境管理的文章链接】
使用conda创建一个新环境,专门用来做rasa相关开发的,并指定python版本:
conda create -n rasa3 python=3.9
截止目前版本(2023年2月),建议使用python3.9版本,3.10及以后版本有待进一步的支持。
开源框架rasa安装最新版本:
pip install rasa
或者更新pip同时安装rasa:
pip install -U --user pip && pip install rasa升级已安装的版本:
pip3 install --upgrade rasa
可以指定rasa版本号:rasa2.8、rasa3.3.3等。
Poetry构建rasa
curl -sSL https://install.python-poetry.org | python3 -
git clone https://github.com/RasaHQ/rasa.git
cd rasa
poetry install
2、使用rasa init初始化聊天机器人项目
rasa init # --no-prompt
主要是生成rasa英文版初始demo文件。
结合之前使用rasa的工程经验,运行rasa项目往往还需要这些文件:
3、安装必要的包
pip install -r requirements.txt
4、下载下来的demo中没有训练好的模型的,需要我们自己训练。
训练rasa命令:
rasa train
会根据现有的配置开始训练。如果想修改训练次数,可以在config.yml文件中把epochs改小一点。
模型根据最初配置训练好了,会生成时间戳方式命名的.tar.gz文件,保存在/models文件夹下。
5、启动rasa对话机器人
rasa shell
会自动加载最新训练的模型,直接在终端输入聊天内容就可以了。
Docker方式安装rasa
先自行搜索安装Docker吧。
查看本机Docker和Docker Compose版本:
docker -v && docker-compose -v
如果计算机上安装了Docker,则显示已安装的Docker和Docker Compose版本。
然后运行命令:
docker run -v $(pwd):/app rasa/rasa init --no-prompt
就可以自动构建镜像了。
命令释义:
-v $(pwd):/app :将当前工作目录挂载到Docker容器中的工作目录。本地和docker容器中文件将同步。
rasa/rasa:要运行的docker镜像的名称。
与新训练的助手交谈,请运行以下命令:
docker run -it -v $(pwd):/app rasa/rasa shell
自定义Dockerfile构建镜像:
# 镜像名称
FROM python:3.9-slim
# WORKDIR 后面写的是要部署到服务器上的路径,指定工作目录
WORKDIR /app
# 添加所有文件到app 目录下。COPY或者ADD
ADD . /app
# 安装依赖包。豆瓣镜像比清华镜像快
RUN pip --no-cache-dir install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com -r /app/requirements.txt
EXPOSE 5005
RUN rasa train
VOLUME /app
VOLUME /app/data
VOLUME /app/models
CMD ["run","-m","/app/models","--enable-api","--cors","*","--debug" ,"--endpoints", "endpoints.yml", "--log-file", "out.log", "--debug"]# 如果有自定义api,也可以运行
# CMD ["python", "http_api.py"]
docker built命令构建镜像:
docker build -t rasa.study/rasa:v1.0 .
rasa的训练和使用有很多很多的命令,如果每次都要输出命令和参数,将会很麻烦。如何高效记录常用命令、一键执行呢?
新建docker-compose.yml文件,输入:
version: '3.0'services:rasa:image: rasa.study/rasa:v1.0ports:- "5005:5005"volumes:- ./:/appcommand:- runaction_server:image: rasa/rasa-sdk:latestports:- "5055:5055"volumes:- "./actions:/app/actions"duckling:image: rasa/duckling:latestports:- "8000:8000"
以上输入内容可以根据项目需要,自行增减配置。
运行命令即可:
docker-compose up
Docker和docker-compose联合使用,是真的香啊!
本文从官方demo的角度出发,介绍python环境管理、rasa3的安装和训练、使用。
Rasa3框架概览
掌握一样新技术,从框架开始。本篇也主要是通过框架,对rasa各个模块功能有个整体的把握。
Rasa框架图
Rasa opensource就是我们下载rasa源码时候的主体部分,rasa通过这个主体可以外接知识图谱、Rasa SDK、Rasa X 可视化界面、服务器、API交互等各种集成,功能非常强大。
如果已经对Rasa1.x版本有所了解或者看了网上那么多的1.x版本的rasa教程,那么可能有些概念还要着重区分一下的。因为Rasa2之后有了很大的调整。比如原来的rasa_nlu和rasa_core的概念已经替换不用了(虽然源代码中还有nlu和core文件夹)。NLU就是NLU,core就是对话管理,别人提到这个概念的时候,我们明白就好。
核心模块讲解:
这里根据框架简单讲下处理流程和作用,每个模块具体的实现细节,我们后面拆开讲解。依旧是从整体把握到细节攻克的思路。
Rasa通过一个Agent智能体对接到其他的各个模块。
对内和Dialogue Polices(对话策略,决策和选择最优actions)、NLU pipline(自然语言理解的工作管道,主要是实体和意图相关的工作)对接。
对接外部模块有:
Rasa SDK:(用户自定义actions)
Tracker Store:(对话存储追踪器,可以连接到不同的数据库的)
Lock Store:(会话锁定器,一旦会话被处理,就会触发票据锁机制ticket lock mechanism来锁定会话,这样可以使得rasa服务器并行运行多节点服务)
Event Broker:(事件代理,可以处理实时对话的数据到其他服务,比如在对话中,你可以使用Rasa X将实时对话数据观看和标注,也可以转发到外部的分析服务)
Filesystem:(文件系统,包括模型和数据,可以存储在本地、http服务器、云服务器)
I/O channels:(进出通道,就是用户和rasa交互的通道,可以是你自己的网站、Facebook Messenger、Telegram、用户自定义连接器等)
NLG:(自然语言生成,Rasa允许外接对话生成功能,以提供更好回复给用户)
Rasa必知概念
动作Action:
机器人进行对话的一个步骤。
执行服务器 Action Server:
与Rasa Open Source源码分开的,运行自定义动作的服务器。尽管可以用其他语言编写自定义动作,但Rasa仍用Python维护了Rasa SDK来实现自定义动作。
业务逻辑Business Logic:
由于业务需求需要满足的条件。例如:在创建帐户之前,要求输入名字和姓氏,地址和密码。在Rasa助手中,使用基于规则的操作(例如form)来实现业务逻辑。
内容管理系统 CMS Content Management Systems:
一种在外部存储漫游器响应的方法,而不是将其直接包含在域中。内容管理系统将响应文本与训练数据分离。
对话驱动的开发 Conversation-Driven Development(CDD):
使用用户消息和对话数据来影响助手设计和训练模型的过程,并结合工程最佳实践。组成CDD的过程分为6个步骤:共享,审阅,批注,修复,跟踪和测试。Share, Review, Annotate, Fix, Track, and Test。
会话测试Conversation Tests:
修改后的故事格式,除了意图标签外,还包括用户消息的全文。测试对话将保存到测试集文件(conversation_tests.md),该文件用于评估整个对话中模型的预测。
组件Component:
模型配置中助手的NLU pipeline中的元素。
传入消息由称为管道的一系列组件处理。组件可以执行从实体提取到意图分类再到预处理的各种任务。
有条件响应变化 Conditional Response Variation:
仅当当前对话状态满足域或响应文件中定义的某些约束时,才可以使用响应变化。如果约束和对话状态之间存在匹配,Rasa可以使用此变体。
自定义操作Custom Action:
由机器人开发人员编写的动作,可以运行任意代码,主要是与外部系统和API进行交互。
默认动作Default Action:
带有预定义功能的内置动作。
DIET:Dual Intent and Entity Transformer:Rasa开源使用的默认NLU体系结构,它执行意图分类和实体提取。
域Domain
定义助手的输入和输出。包括助手知道的所有意图,实体,词槽,动作和形式的列表。和我们理解的领域并不同。
实体Entity:
可以从用户消息中提取的关键字。例如:电话号码,人名,位置,产品名称
事件Event:谈话中发生的事情。例如,UserUttered事件表示用户输入消息,而ActionExecuted事件表示助手执行操作。Rasa中的所有对话均表示为一系列事件。
常见问题解答FAQ:
Frequently Asked Questions(FAQ)是用户提出的常见问题。在构建助手的上下文中,这通常意味着用户发送消息而助手发送响应而无需考虑对话的上下文。
表格Form
一种自定义操作,它要求用户提供多条信息,填表。
快乐/不快乐的路径 Happy/Unhappy Paths
用于描述用户输入是预期输入还是意外输入的术语。如果助手要求用户提供某些信息并且用户提供了该信息,我们称这是happy path。Unhappy paths都是可能的极端情况。例如,用户拒绝提供请求的输入,更改对话主题或更正他们之前说过的话。
意图Intent:
在给定的用户消息中,用户试图传达或完成的事情(例如,问候语,指定位置)。
互动学习 Interactive Learning
在Rasa X或Rasa CLI中,这是一种训练模式,开发人员可以在对话的每个步骤中更正和验证助手的预测。对话可以保存为故事格式,并添加到助手的训练数据中。
知识库/知识图 Knowledge Base / Knowledge Graph:
知识图谱,可查询的数据库,表示对象之间的复杂关系和层次结构。知识库操作允许Rasa Open Source从知识库中获取信息,并将其用于响应中。
3级助理 Level 3 Assistant:
可以处理比简单来回交换更复杂的对话的助手。3级助理能够使用上一个对话回合的上下文来选择适当的下一个动作。
消息信道 Messaging Channels
将Rasa Open Source与外部消息传递平台集成的连接器,终端用户可以在该平台上发送和接收消息。Rasa Open Source包括内置的消息传递通道(如Slack,Facebook Messenger和Web聊天),以及创建自定义连接器的功能。
自然语言生成(NLG): 是生成自然语言消息以发送给用户的过程。Rasa对NLG使用基于模板的简单方法。数据驱动的方法(例如neural NLG)可以通过创建自定义NLG组件来实现。
NLU 自然语言理解:(NLU)致力于将人类语言解析和理解为结构化格式。
NLU收件箱 NLUInbox:
Rasa X中收集新用户消息以供查看和标注的区域。可以收集未标注的数据。
管道Pipeline : 定义Rasa助手的NLU系统的NLU组件列表。在返回最终的结构化输出之前,每个组件都会逐一处理用户消息。
策略Policy: Rasa开源组件可预测对话系统的下一个操作策略,从而决定对话流程应如何进行。典型的配置包括多个策略,而置信度最高的策略将决定对话中要采取的下一个动作。
NLU组件 NLU Component:
Rasa NLU管道中的一个元素,用于处理传入消息。组件执行的任务从实体提取到意图分类再到预处理。
Rasa X: rasa的可视化界面工具。Rasa X帮助团队共享和测试使用Rasa Open Source构建的助手,注释用户消息和查看对话。
检索意图 Retrieval Intent: 一种特殊类型的意图,可以分为较小的子意图。例如,一个FAQ检索意图包含一些子意图,这些子意图代表助手知道如何回答的每个问题。
REST频道 REST Channel: 用于构建自定义连接器 build custom connectors的消息传递通道。包括一个输入通道(可以在其中将用户消息发布到Rasa Open Source),以及指定回调callback URL(可以将机器人的响应操作发送到该URL)的功能。
响应/模板/话语 Response/Template/Utterance: 助手发送给用户的消息。这可以包括文本,按钮,图像和其他内容。
规则Rules: 特殊训练数据,用于指定类似规则的行为,其中特定条件总是预测特定的下一个动作。例如,回答常见问题解答,填写Forms或处理Fallbacks。
插槽: 词槽Slot, Rasa用来在对话过程中跟踪信息的键值存储。
故事Story:对话模型的训练数据格式,由用户和漫游器之间的对话组成。用户的消息表示为带标签的意图和实体,而bot的 responses表示为一系列操作。【hr给的简历,我一看到故事编写,我就知道用的rasa框架。不会写故事的算法不是好的小说家】
TED策略 TED Policy:Transformer EmbeddingDialogue Policy。TED是Rasa Open Source默认的基于机器学习的对话策略。
追踪器Tracker:维护对话状态的Rasa开源组件,它表示为JSON对象,列出了当前会话中的事件。
用户目标 user goal: 用户想要实现的总体目标,例如查找问题的答案,预约或购买物品。有些工具将用户目标称为“意图”,但是在Rasa术语中,意图与每个单独的用户消息相关联。
相关文章:
构建对话机器人:Rasa3安装和基础入门
在开源对话机器人中,Rasa社区很活跃,在国内很多企业也在使用Rasa做对话机器人,有rasa开发经验的往往是加分项。 当年实习的时候接触到了Rasa,现在工作中也使用Rasa,因此,写写一些经验文档,有助后…...
Spark计算框架入门笔记
Spark是一个用于大规模数据处理的统一计算引擎 注意:Spark不仅仅可以做类似于MapReduce的离线数据计算,还可以做实时数据计算,并且它还可以实现类似于Hive的SQL计算,等等,所以说它是一个统一的计算引擎 既然说到了Spar…...
入职数据分析公认的好书|建议收藏
众所周知,数据分析经常出现在我们的日常生活中,各行各业都需要数据分析。可你知道什么是数据分析?它在企业里到底扮演什么角色?以及如果我们自己也想拥有数据分析的能力,以便更好的满足数据分析的需求,我们…...
Linux查找文件和目录,重定向输出 ,系统默认运行级别的查看和设置理论和练习
♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的绽放࿰…...
Redis源码---键值对中字符串的实现,用char*还是结构体
目录 前言 为什么 Redis 不用 char*? char* 的结构设计 操作函数复杂度 SDS 的设计思想 SDS 结构设计 SDS 操作效率 紧凑型字符串结构的编程技巧 小结 前言 对于 Redis 来说,键值对中的键是字符串,值有时也是字符串在 Redis 中写入一…...
算法 - 剑指Offer 表示数值的字符串
题目 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。 数值(按顺序)可以分成以下几个部分: 若干空格 一个 小数 或者 整数 (可选)一个 ‘e’ 或 ‘E’ ,后面跟着一个 …...
初识机器学习
监督学习与无监督学习supervised learning:监督学习,给出的训练集中有输入也有输出(标签)(也可以说既有特征又有目标),在此基础上让计算机进行学习。学习后通过测试集测试给相应的事物打上标签。…...
VsCode安装PlatformIO 开发ESP arduino,买的板子或者随便ESP,PlatformIO添加Board(不是自定义Board)
这次主要记录怎么给新建选板子的时候没有的板子下程序 我这里是一块 WiFi Kit 32 (V3) PlatformIO里面只有到V2 先从头开始,安装PlatformIO 安装PlatformIO 直接搜索安装 安装有时候会比较慢,左侧出现蚂蚁图标之后点击会显示 右下角会提示正在安…...
golang 复杂数据结构解析
[{"key":"15275771","pack":{"1":[{"name":"消息配置","id":15275771,"version":1,"createUser":"molaifeng","data":"test"}]},"callback&qu…...
不怕被AirTag跟踪?苹果Find My技术越来越普及
苹果的 AirTag 自推出以来,如何有效遏制用户用其进行非法跟踪,是摆在苹果面前的一大难题。一家为执法部门制造无线扫描设备的公司近日通过 KickStarter 平台,众筹了一款消费级产品,可帮助用户检测周围是否存在追踪的 AirTag 等设备…...
Linux驱动中的open函数是如何从软件打通硬件呢?
一、前言 打开文件是Linux系统中最基本的操作之一,open函数可以实现打开文件的功能。下面我将为您介绍open函数打通上层到底层硬件的详细过程。 二、open函数打通软硬件介绍 open函数是系统调用中的一种,其原型定义在头文件unistd.h中: #…...
Java 基础语法
Java 是一门广泛使用的编程语言,由于其简单易学和可移植性,已成为开发 Web 应用程序、移动应用程序、桌面应用程序以及企业级应用程序的首选语言之一。在本文中,我们将探讨 Java 的基础语法,包括变量、数据类型、运算符、控制流等…...
python下如何安装并使用matplotlib(画图模块)
在搜索命令中输入cmd,以管理员身份运行。 输入以下命令,先对pip安装工具进行升级 pip install --upgrade pip 升级完成 之后使用pip安装matplotlib pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple 也可以使用pycharm来安装matp…...
系统分析师---计算机网络思维导图
TCP、IP协议簇(4星) 传输协议:TCP有连接、可靠、有回应机制、三次握手基于TCP的应用层协议:POP3:邮件收取,默认端口110SMTP:邮件发送,默认端口25FTP:文件传输协议&#…...
算法练习(七)数据分类处理
一、数据分类处理 1、题目描述: 信息社会,有海量的数据需要分析处理,比如公安局分析身份证号码、 QQ 用户、手机号码、银行帐号等信息及活动记录。采集输入大数据和分类规则,通过大数据分类处理程序,将大数据分类输出…...
nohup ./startWebLogic.sh >out.log 2>1 解析
在启动weblogic的时候我们经常看到如下的命令: nohup ./startWebLogic.sh >out.log 2>&1 & 从09年开始用weblogic到现在已经过去3年多了 ,今天终于将该命令理解清楚了。 其中 0、1、2分别代表如下含义: 0 – stdin (standa…...
OpenCV 坡度计算(基于DEM,C++版本)
文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 假设一个点位于曲面 z = f ( x , y ) z=f(x,y) z=...
IDEA上使用git,知道这几步操作就够了!
前言由于一年多没用git(种种原因不堪回首),所以在上班当天,整个人都不好了,从拉取代码到提交代码,整整花费了不少时间,而且有些操作都不知道啥作用,点也不是,不点也不是&…...
Shell的退出状态(if语句判断的是某个命令的退出状态)
以下内容源于C语言中文网的学习与整理,如有侵权,请告知删除。 一、退出状态 (1)不管是 Bash 内置命令,还是外部的 Linux 命令,还是自定义的 Shell 函数,当它运行结束或者退出时,都…...
Scala面向对象
与java的区别和联系 类的定义: class Person{ var name "scala" def sayHello(){ println("Hello,"name) } def getName name } 注意:如果在定义方法的时候指定了(),那么在调用的时候()可写可不写,如果在定…...
LLaMA-META发布单卡就能跑的大模型
2023年2月25日,Meta使用2048张A100 GPU,花费21天训练的Transformer大模型LLaMA开源了。 1.4T tokenstakes approximately 21 days 以下是觉得论文中重要的一些要点 1)相对较小的模型也可以获得不错的性能 研究者发现在给定计算能力限制的情…...
第一篇自我介绍(单片机)
小白的单片机之旅 🤔自我介绍🤔 😊学习目标😊 😜关于单片机😜 🌝目标公司🌝 🍀小结🍀 🎉博客主页:小智_x0___0x_ 🎉欢…...
Tik Tok品牌营销,如何做好内容打法
TikTok 上做好品牌营销,并不能只关注品牌所获得的视频浏览量和点赞量,根据潜在客户需求生成的内容策略同样至关重要。通过建立营销漏斗模型,可以将 TikTok 策略分为三种不同类型的内容,从具有广泛吸引力的内容转变为具有高度针对性…...
2023年5月软考软件设计师备考经验
一、考试目标: 通过本考试的合格人员能根据软件开发项目管理和软件工程的要求,按照系统总体设计规格说明书进行软件设计,编写程序设计规格说明书等相应的文档,组织和指导程序员编写、调试程序,并对软件进行优化和集成…...
SpringBoot 2.x ——使用 mail 实现邮件发送
文章目录前言环境、版本等pom依赖引入springboot项目配置文件获取邮箱授权码配置properties文件定义接口信息接收类编写邮件发送服务类编写接口swagger测试1、简单邮件发送2、html格式发送(支持附件)前言 最近再看xxl-job的源码,其中在邮件告警通知中使用到了告警信…...
项目结束先别着急庆祝,项目经理还有这些事要做
项目管理生命周期结束阶段的目的是确认项目可交付成果的完成,使项目发起人满意,并向所有参与者和利益相关者传达项目的最终处置和状态。 项目结束确保项目的所有参与者和利益相关者都清楚后续活动(如新项目、服务过渡、SLA等)&a…...
没想到的 IIFE
没想到的 IIFE 有时候我们想要立即执行一下所定义的函数,可以怎么做呢? function foo(num) {return num ?? 1; }foo();写完然后调用对吧,这是可以的,但你有没有觉得这其实有点脱裤子放屁了,完全可以直接调用就是了…...
「牛客网C」初学者入门训练BC156
🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️🔥专栏系列:线性代数,C初学者入门训练 🔥座右铭:“不要等到什么都没有了,才下定决心去做” 🚀🚀🚀大家觉不错…...
【Proteus仿真】【STM32单片机】粮仓温湿度控制系统设计
文章目录一、功能简介二、软件设计三、实验现象联系作者一、功能简介 本项目使用Proteus8仿真STM32单片机控制器,使用声光报警模块、LCD1602显示模块、DHT11温湿度模块、继电器模块、加热加湿除湿风扇等。 主要功能: 系统运行后,LCD1602显示…...
九年时间,倾情投入,JumpServer开源堡垒机v3.0正式发布
2023年2月27日,JumpServer开源堡垒机正式发布v3.0版本。在JumpServer开源堡垒机v3.0版本的设计过程中,我们始终秉持着“内外兼修”的原则,旨在进一步提升用户的使用体验,真正用心做好一款开源堡垒机。 在JumpServer v3.0版本中&…...
网站建设一般多钱/建立网站用什么软件
oracle子查询分解(分而治之)url:http://hi.baidu.com/danghj/blog/item/fa2a7363971bff670c33fa0e.html2009-01-07 15:23用一个sql语句完成一下问题:A,B,C三人的年龄相乘为36;相加等于所有在场的人的人数;年龄大的人的…...
如何做阿里巴巴免费网站/seo培训优化
就16.04版本这问题,试过网上其它解决方案 都不行,就此方法可以,现保存,谢谢原作者 更新到16.04,gedit打开中文时,依然存在乱码的问题。ubuntu官方给出的解决方案是,gedit3.x以上版本的在命令终…...
网站地图怎么做的/建站之星官方网站
给空格子上下左右的互换操作,问最后是怎样的 注意一行的最后一个若是空格,需要自己加注意读取时 操作可能分好多行,一定要读取到 0 为止 1 #include <iostream>2 #include <cstring>3 using namespace std;4 char map[50][50],o…...
手机网站设计思路/chatgpt网址
Ceph-dash是一款图形化展现Ceph状态的工具,并且部署起来非常简单(在monitor节点上进行部署),操作如下:# mkdir -p /ceph-dash # cd /ceph-dash/ # ls app config.influxdb.json Dockerfile s…...
网页网站导读怎么做/免费发布推广信息的平台有哪些
有些资料讲如果要支持目录必须使用iiswriter,或者其他软件,其实通过简单对iis配置,再利用urlwriter就可以完美解决url重写的问题可以将http://abc.domain.com/blog转向到http://www.domain.com/xxx.aspx?usernameabc当然首先要将主机的泛域名支持打开。…...
松江做网站/帆软社区app
A: 今天同学遇到了一个FCKeditor如何删除文件中图片的问题,我也是第一次遇到,为了解决这个问题从网上搜到了一点资料。与大家共享一下。最近在做项目时做了这样一个功能,已减少垃圾图片!用正则表达式得到图片的路径与名称。 PageV…...