报时机器人的rasa shell执行流程分析

2023-11-14

本文以报时机器人为载体,介绍了报时机器人的对话能力范围、配置文件功能和训练和运行命令,重点介绍了rasa shell命令启动后的程序执行过程。

一.报时机器人项目结构

1.对话能力范围
(1)能够识别欢迎语意图(greet)和拜拜意图(goodbye)
(2)能够识别时间意图(query_time)
(3)能够识别日期意图(query_date)
(4)能够识别星期几意图(query_weekday)

2.配置文件功能
(1)nlu.yml:主要包含意图、例子、对实体的标注等。
(2)stories.yml文件:用户和机器人之间对话的表示,用户输入意图,机器人响应action。
(3)actions.py:自定义的action,比如action_query_time、action_query_date、action_query_weekday。
(4)config.yml:主要包含nlu(分词、特征提取和分类等)和dialog policy(记忆、规则、机器学习等)。
(5)domain.yml:主要包含意图、视图、槽位、响应、动作等。
(6)credentials.yml:主要和其它对话平台集成,比如facebook、slack等。
(7)endpoints.yml:action_endpoint(调用自定义action)、tracker_store对话存储(内存、redis、mongodb等)、event_broker消息队列(RabbitMQ、Kafka等)。

3.训练和运行命令
(1)训练模型
使用NLU数据和stories训练模型,模型保存在./models中。

rasa train
说明:关于如何把数据集按照比例拆分为训练集和测试集,在训练集上训练模型,在测试集上测试模型,可以参考《聊天机器人框架Rasa资源整理》。
(2)启动action服务器
使用Rasa SDK开启action服务器。

rasa run actions
(3)启动rasa服务器和客户端
通过命令行的方式加载训练模型,然后同聊天机器人进行对话。

rasa shell

二.rasa shell执行流程分析

整体思路是通过rasa shell加载和解析模型,通过消息处理的方式建立起用户(客户端)和聊天机器人(rasa服务)对话的桥梁。

1.rasa/cli/shell.py文件
  在rasa/cli/shell.py文件中,def shell(args: argparse.Namespace) -> None函数如下:

2.rasa/cli/run.py文件
  在rasa/cli/run.py文件中,def run(args: argparse.Namespace) -> None函数如下:

3.rasa/api.py文件
  在rasa/api.py文件中,def run(…) -> None函数如下:

在run()函数中调用serve_application()函数如下:

4.rasa/core/run.py文件
  在rasa/core/run.py文件中,serve_application()函数如下:

在serve_application()函数中启动了一个基于Sanic的Web服务器,通过configure_app()方法构建了app,然后通过run()方法启动,如下所示:

app = configure_app(
input_channels,
cors,
auth_token,
enable_api,
response_timeout,
jwt_secret,
jwt_method,
port=port,
endpoints=endpoints,
log_file=log_file,
conversation_id=conversation_id,
use_syslog=use_syslog,
syslog_address=syslog_address,
syslog_port=syslog_port,
syslog_protocol=syslog_protocol,
request_timeout=request_timeout,
)

app.run(
host=interface,
port=port,
ssl=ssl_context,
backlog=int(os.environ.get(ENV_SANIC_BACKLOG, “100”)),
workers=number_of_workers,
)
  通过register_listener(listener, event)注册给定事件的侦听器:

app.register_listener(partial(load_agent_on_start, model_path, endpoints, remote_storage), “before_server_start”,)
app.register_listener(close_resources, “after_server_stop”)
5.rasa/core/agent.py文件
  通过load_agent_on_start()方法加载一个agent。在rasa/core/agent.py文件中,load_agent()函数如下所示:

在load_agent()函数中,加载模型代码是agent.load_model(model_path)。在Agent类的def load_model()方法中,关于初始化MessageProcessor代码如下:

self.processor = MessageProcessor(
model_path=model_path,
tracker_store=self.tracker_store,
lock_store=self.lock_store,
action_endpoint=self.action_endpoint,
generator=self.nlg,
http_interpreter=self.http_interpreter,
)
加载模型的代码如下:

logger.info(f"Loading model {model_tar}…“)
with tempfile.TemporaryDirectory() as temporary_directory:
try:
metadata, runner = loader.load_predict_graph_runner(
Path(temporary_directory),
Path(model_tar),
LocalModelStorage,
DaskGraphRunner,
)
return os.path.basename(model_tar), metadata, runner
except tarfile.ReadError:
raise ModelNotFound(f"Model {model_path} can not be loaded.”)
6.rasa/engine/loader.py文件
  在rasa/engine/loader.py文件中,def load_predict_graph_runner()函数如下:

三.遇到的问题和说明

1.如何用PyCharm调试Rasa项目
解析:一种是基于Script path的调试方法,一种是基于Module name的调试方法。这里介绍前者如下所示:

(1)Script Path:安装rasa类库的__main__.py文件路径。
(2)Parameters:rasa的各种cli,比如train、test、shell等。
(3)Working directory:安装rasa类库的根目录。
说明:因为rasa类库依赖类库太多导致系统环境混乱,所示建议使用虚拟环境进行rasa类库安装。

2.NoConsoleScreenBufferError
解析:exception=NoConsoleScreenBufferError(‘No Windows console found. Are you running cmd.exe?’)

3.模型20220915-081548-honest-yield.tar.gz
解析:由metadata.json文件和components文件夹组成,后者和config.yml内容密切相关,如下所示:

4.Sanic框架
解析:Sanic是一个高性能异步的Web框架。

5.asyncio库
解析:它的编程模型是一个消息循环,关键字涉及event_loop、coroutine、task、future、async/await等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

报时机器人的rasa shell执行流程分析 的相关文章

随机推荐

  • npm安装、使用方法

    文章目录 npm安装 使用方法 1 npm介绍 2 npm查看版本 3 npm查看所有命令列表 4 npm查看所有命令用法 5 npm查看配置 6 npm永久换源 7 npm查看换源是否成功 8 npm创建模块 9 npm查看项目已安装的所
  • 【springboot】@RequestBody和@ResponseBody以及@PathVariable的使用及区别

    1 RequestBody和 ResponseBody RequestBody 通过 requestBody可以将请求体中的JSON字符串绑定到相应的bean上 当然 也可以将其分别绑定到对应的字符串上 实质上接受的是一个JSON的字符串
  • 基于Linux用C语言实现TCP/UDP图片和文件传输(socket)

    目录 一 TCP实现 1 服务端 2 客户端 二 UDP实现 1 服务端 2 客户端 一 TCP实现 传输控制协议 TCP Transmission Control Protocol 是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设
  • Python-turtle库

    star py import turtle turtle pensize 5 turtle color red turtle penup turtle goto 150 150 turtle pendown turtle begin fil
  • Opencv之Unsharp Mask(USM)锐化

    1 介绍 USM技术是通过增强图像的高频部分的内容来提高视觉效果 用具体的公式表达即为 y n m x n m z n m 其中 x n m 为输入图像 y n m 为输出图像 而z n m 为校正信号 一般是通过对x进行高通滤波获取 是用
  • Shader入门指南

    Unity3D Shader入门指南 一 分类 Unity3d2014 04 28 17 40 16人阅读 评论 0 收藏 举报 unity3dShader3d渲染 目录 本文转载自 http onevcat com 2013 07 sha
  • 25岁竟要求产品经验10年?我一直以为是个段子,没想到居然是真的

    你是不是以为工作3年要求有10年工作经验是个段子 今天告诉你这是真事儿 25岁要求工作经验10年 你好歹给人家工作5年的机会吧 这样也好说剩下的5年工作经验靠加班 HR这样说我没法接啊 哈哈 按照对方逻辑来 毕竟25岁都没有 相关工作经验最
  • TCP拥塞控制原理

    一 拥塞控制的一般原理 1 产生拥塞的原因 在某段时间 若对网络中某一资源的需求超过了该资源所能提供的可用部分 网络的性能就会变坏 即对资源的需求 可用资源 注意拥塞控制与流量控制的区别 拥塞控制是防止过多的数据注入网络中 使得网络中路由器
  • CentOS7平台命令安装Anaconda3、配置Python3开发环境

    要在 CentOS 7 上安装 Anaconda3 您可以按照以下步骤进行操作 1 下载 Anaconda3 安装包 首先 访问 Anaconda 官方网站以获取最新版本的 Anaconda3 安装包的下载链接 可以使用 wget 命令来下
  • 【数据库原理及应用教程(第4版

    文章目录 一 选择题 二 填空题 三 简答题 Reference 一 选择题 1 2 3 4 5 6 7 8 9 10 B C B D A 1 在 SQL Server 中不是对象的是 A 用户 B 数据 C 表 D 数据类型 2 声明了变
  • studio和solo哪个好_beats studio3 和solo3的区别再哪里?

    首先两款机子在外观上就有很大的区别 前者是solo3 后者是studio3 仔细观察可以发现solo3的耳罩比较小 是圆形的 studio3的是椭圆形的 两款都是头戴式 外观设计 录音师是包耳的 SOLO是压耳的 体积的话 录音师大 SOL
  • async与await

    async await 是ES7提出的基于Promise的解决异步的最终方案 一 async async是一个加在函数前的修饰符 被async定义的函数会默认返回一个Promise对象resolve的值 因此对async函数可以直接then
  • UI 自动化测试框架:PO 模式+数据驱动 【详解版】

    目录 1 PO 设计模式简介 什么是 PO 模式 PO 模式的优点 2 工程结构简介 工程结构 框架特点 3 工程代码示例 page 包 action 包 business process 包 util 包 conf 包 1 PO 设计模式
  • 基于Centos 7虚拟机的磁盘操作(添加磁盘、分区、格式分区、挂载)

    目录 一 添加硬盘 二 查看新磁盘 三 磁盘分区 3 1新建分区 3 2 格式分区 3 3 挂载分区 3 4 永久挂载新分区 3 5 取消挂载分区 一 添加硬盘 1 在虚拟机处选择编辑虚拟机设置 然后选择添加 2 选择硬盘 然后选择下一步
  • 敏捷宣言以及敏捷开发的特点

    敏捷宣言 敏捷宣言 也叫做敏捷软件开发宣言 正式宣布了对四种核心价值和十二条原则 可以指导迭代的以人为中心的软件开发方法 敏捷宣言强调的敏捷软件开发的四个核心价值是 个体和互动高于流程和工具 工作的软件高于详尽的文档 客户合作高于合同谈判
  • Go_流程、跳转控制语详解

    流程控制语句分类 流程控制语句可以控制代码的执行顺序和条件 顺序结构 普通的代码 由上而下依次执行 分支结构 if switch 循环结构 for if语句 条件表达式值必须是bool类型 不可省略括号 且左大括号不能另起一行 格式1 if
  • AI绘图Midjourney手把手教程

    以下是使用Midjourney AI绘画程序的注册和入门指南 Midjourney是一款功能强大的绘图软件 通过输入一段图片的文字描述即可生成精美的绘画 我们将为您提供详细的操作步骤 让您轻松上手 下面是使用Midjourney AI绘画程
  • Android绘制笔记——Color、Shader

    Android 颜色Color 1 颜色 1 十六进制ARGB颜色值表示 Int color 0xFFFF0000 红色 2 Color类常量 本质为十六进制表示 Int color Color RED 红色 ColorInt public
  • ffmpeg-android dlopen failed: library “libclang_rt.ubsan_standalone-aarch64-android.so“ not found

    NDK编译的ffmpeg 库 在android上使用 提示动态库错误 15 08 54 276 18357 18357 E AndroidRuntime java lang UnsatisfiedLinkError dlopen faile
  • 报时机器人的rasa shell执行流程分析

    本文以报时机器人为载体 介绍了报时机器人的对话能力范围 配置文件功能和训练和运行命令 重点介绍了rasa shell命令启动后的程序执行过程 一 报时机器人项目结构 1 对话能力范围 1 能够识别欢迎语意图 greet 和拜拜意图 good