1、Reading Rasa Source Code —— main

2023-11-06

目录

main

从 pypi 官方网站上下载 rasa 的最后一个释放版本(截止目前,最新版本为 2.2.1)的源码,解压后,在根目录下,找到 setup.py 文件,这是安装引导程序,我们主要关注的是 entry_points ,Entry points 是可以用来支持自动生成脚本的,即通过 pip 安装 rasa 后,在 Python 解释器所在的 bin 文件夹下,会生成一个 rasa 脚本,这就是为什么安装 rasa 后,我们就可以直接通过 shell 执行一些 rasa 命令,如 rasa init

在这里插入图片描述

该脚本实际上是一个 python 脚本文件

在这里插入图片描述

脚本第一行,shebang 标注的是执行该脚本的 python 解释器位置,也就是你安装 rasa 的 python 解释器位置,from rasa.__main__ import main 以及 sys.exit(main()) 这里表明了 rasa 程序的入口在 __main__ 文件的 main()。OK,找到了项目的入口主函数,我们便从这里开始阅读 Rasa 框架的源代码。


下面是 rasa 源码的组织结构:

.
├── rasa
│   ├── __init__.py            # 主要通过 version 获取 rasa 版本信息
│   ├── __main__.py            # main 函数,rasa 入口
│   ├── cli/                   # 命令行交互相关
│   ├── constants.py           # 定义全局的一些常量,如默认的文件ming
│   ├── core/                  # 与 Core 训练相关
│   ├── exceptions.py          # 定义了一些异常类
│   ├── jupyter.py             # 允许在 Jupyter notebook 中与 bot 对话
│   ├── keys
│   ├── model.py               # 与模型操作相关
│   ├── nlu/                   # 与 NLU 训练相关
│   ├── run.py                 # 运行模型
│   ├── server.py              # 与 rasa 服务相关
│   ├── shared/                # 与各类数据的解析相关
│   ├── telemetry.py           # 与遥测相关
│   ├── test.py                # 与各类测试相关
│   ├── train.py               # 与模型训练相关
│   ├── utils/                 # 一些公共库
│   ├── validator.py           # 与各类验证相关
│   └── version.py             # rasa 版本信息
└── setup.py

进入 main() 后,我们首先需要做的一件事是创建 rasa 的命令行及其参数,即 create_argument_parser() 函数的实现内容,这里 rasa 根据不同的功能,共涵盖了 11 个二级子命令,部分子命令下仍设置子子命令。

scaffold.add_subparser(subparsers, parents=parent_parsers)         # 与 rasa init 命令相关
run.add_subparser(subparsers, parents=parent_parsers)              # 与 rasa run 命令相关
shell.add_subparser(subparsers, parents=parent_parsers)            # 与 rasa shell 命令相关
train.add_subparser(subparsers, parents=parent_parsers)            # 与 rasa train 命令相关
interactive.add_subparser(subparsers, parents=parent_parsers)      # 与 rasa interactive 命令相关
telemetry.add_subparser(subparsers, parents=parent_parsers)        # 与 rasa telemetry 命令相关
test.add_subparser(subparsers, parents=parent_parsers)             # 与 rasa test 命令相关
visualize.add_subparser(subparsers, parents=parent_parsers)        # 与 rasa visualize 命令相关
data.add_subparser(subparsers, parents=parent_parsers)             # 与 rasa data 命令相关
export.add_subparser(subparsers, parents=parent_parsers)           # 与 rasa export 命令相关
x.add_subparser(subparsers, parents=parent_parsers)                # 与 rasa x 命令相关

与这部分内容密切相关的源代码位于 cli/ 目录下,其中 arguments/ 目录下的各个文件,根据其文件名命名与对应的命令相关联,包含各级子命令下的一些具体参数设置。而位于 cli 根目录下的各个与命令同名的文件则包含各级子命令的具体定义以及各个命令的实际入口点函数等。具体内容,可以查看代码注释。

另外 initial_project/ 包含的是一个完整的 demo 项目源码文件,即执行 rasa init 后,会在你本地生成一个 demo 项目源码,实际上就是将该文件夹整体拷贝到指定的目录下而已,这点会在 rasa init 部分再次被介绍。

主函数中,其他内容主要是是一些环境设置等,对于阅读 rasa 源码,可暂且忽略这些细节,其最重要的一条语句是 cmdline_arguments.func(cmdline_arguments) ,这条语句会真正进入到各个子命令的入口函数中进行相关操作,而各个子命令的入口函数是通过各子命令的 set_defaults() 方法中定义的。

接下来,我们将分别以每个具体的 rasa 命令为起点分别探索其背后的一些工作原理。

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

1、Reading Rasa Source Code —— main 的相关文章

  • vba中find方法查找1

  • QML ListView实现树形效果

    转自 http blog huati365 com 5jELjzLwnx3YGw import QtQuick 2 11 import QtQuick Controls 2 2 import QtQuick Controls Materia
  • Android抓包工具——Fiddler

    前言 在平时和其他大佬交流时 总会出现这么些话 抓个包看看就知道哪出问题了 抓流量啊 payload都在里面 这数据流怎么这么奇怪 这里出现的名词 其实都是差不多的意思啊 这都跟抓包这个词有关 说到抓包呢我们今天就先来了解一下抓包的一些基础
  • MySQL组成

    MySQL 的组成分为两部分 服务器端 服务的提供 相当于卖家 客户端 服务的使 相当于买家 消费者 服务器端只能有一个 而客户端可以有多个 安装了 MySQL 说明我们既是服务器端又是客户端 服务器端的服务体现就是 客户端是使 MySQL
  • 微软亚洲研究院实习生面试

    上周说到微软亚洲研究院 MSRA 一下就简称MSRA吧 网络面试我这边因为连不上而要重新安排面试 周五HR就给我电话约好今天中午1 00 3 00重新面试 于是提前做好各种准备 找了个拉ADSL的宿舍来上网 然后用了人家带摄像头的笔记本 还
  • B站创建视频分集播放列表

    上传视频在B站上创建视频分集列表方法 上传时创建分集列表 1 打开B站 2 登录B站后 点击投稿上传视频 3 上传视频或把视频直接拖拽到页面里 4 点击上传第一个视频后页面下会出现一个 号的按钮 点击 继续上传 上传视频就会出现两个正在上传
  • 浅谈 Node.js 热更新

    大厂技术 高级前端 Node进阶 点击上方 程序员成长指北 关注公众号 回复1 加入高级Node交流群 记得在 15 16 年那会 Node js 刚起步的时候 我在去前东家的入职面试也被问到了要如何实现 Node js 服务的热更新 其实
  • Tuple VS ValueTuple(元组类 VS 值元组)

    Tuple VS ValueTuple 元组类 VS 值元组 文章目录 Tuple VS ValueTuple 元组类 VS 值元组 Tuple 1 创建元组 2 表示一组数据 3 从方法返回多个值 4 用于单参数方法的多值传递 缺点 Va
  • 基于php的课程网站络管理系统的设计与实现

    摘 要 管理系统是根据课程网站的需求而设计和实现的 主要 用于实现课程系统办公人员对其办公系统内所有公务员进行管理 实现对员工信息的查询 录入 修改和删除 以及发布重要通知 最新信息和规章制度 通过 网上办公 无纸办公 大大提高办公效率 体
  • 电脑关机了,内存就没数据了吗?

    前言 大家好 我是周杰伦 提到网络攻击技术 你脑子里首先想到的是什么 是DDoS 是SQL注入 XSS 还是栈溢出 RCE 远程代码执行 这些最常见的网络攻击技术 基本上都是与网络 软件 代码 程序这些东西相关 这也好理解 计算机网络安全
  • Qt项目实战 杂谈一二:中文乱码事情小,处理不好头发少

    Qt开发者来说 特别是初学者 往往最头疼的是编码的问题 举个例子 1 控件上设置中文标签 发现显示出来是乱码 怎么解决 如果标签是常量字符串 含中文 怎么处理 如果标签是变量 且可能包含字符串 又咋处理 2 Qt应用与其他应用存在进程间交互
  • 浏览器无法打开网页,报错:DNS_PROBE_FINISHED_BAD_CONFIG

    症状 手机的正常上网 电脑连不上网 浏览器打不开网页 电脑 用ping命令不能发现主机 这时判断DNS解析有问题 用ping命令能发现主机 这时判断DNS解析没有问题 解决办法 方案1 ipconfig flushdns 方案2 ping
  • openwrt 软件安装依赖冲突

    今天在安装一个插件curl 安装失败了 报错内容如下 root R619AC co router tmp tmp opkg install curl Installing curl 7 68 0 1 to root Downloading
  • 使用react-markdown与markdown-navbar实现在线浏览markdown文件并自动生成侧边导航栏目录(react项目)

    使用react markdown与markdown navbar实现在线浏览markdown文件并自动生成侧边导航栏目录 react项目 在项目中需要一个需求 需要将markdown文件放在react前端项目中实现浏览器在线浏览 修改mar

随机推荐

  • Python爬虫框架Scrapy实例(爬取腾讯社招信息并保存为excel)

    前言 在学习python爬虫的时候 曾经爬取过腾讯社招的网站 很久很久没有写爬虫 心血来潮打算爬一个练手 想起之前爬过腾讯社招网站 打开一看网页变了 行动 重新写一遍 这个网站相对简单 做了简单测试没有设置反爬 比较适合初学者拿来练手 搜索
  • 利用webhook实现发送通知到Slack

    概要 最近办公交流应用 Slack在各团队里大行其道 非常火热 今天我们就来说说怎么用他的incoming webhook来做一些同步通知 发送通知给Slack 我们先来看看这种incoming webhook来发送通知的优势 团队成员可以
  • Vulhub Apache HTTPD 换行解析漏洞

    漏洞介绍 漏洞原理 运维人员为了解决 Apache 解析漏洞 会使用 配置 来限制匹配到的最后一个扩展名 这种方式虽然对多个扩展名的解析漏洞进行了防护 但是因为 的正则匹配规则可以将 php n 的扩展名同样可以匹配到 php 的规则 产生
  • Android使用ViewPager实现图片的轮播

    一 概述 在现在的Android项目中 首页图片轮播是随处可见的 今天我们看看如何实现 先看效果图 二 实现 先给大家看看最简单的布局文件
  • 架构之路_深度探索C++对象模型总结

    本文主要参照 深度探索C 对象模型 一书 一 关于对象 C语言中 数据和处理数据的操作 函数 是分开声明的 不支持数据函数之间的关联性 称之为程序性的 procedural 1 1 对象类型 C 中可以通过独立抽象数据类型实现 比如 cla
  • Unity 中场景切换

    Unity游戏开发中 单个Scene解决所有问题似乎不可能 那么多个Scene之间的切换是必然存在 如果仅仅是切换 似乎什么都好说 但是在场景比较大的时候不想让玩家等待加载或者说场景与场景之间想通过一些画面 动画表现出一些让玩家期待的东西
  • 禅道数据库异机访问,远程连接,navicat连接

    禅道数据库异机访问 远程连接 navicat连接 在使用xxj job做执行器时遇到的问题 数据库端口可以在这里修改 可以在这里修改 opt zbox app zentao config my php 禅道数据库官方文档 该链接也有修改数据
  • TP5+Fastadmin+Log日志

    Log 日志 1 引入类 use think Log 2 记录日志 通过Log类的record 方法 记录一条日志 Log record 这是一条普通日志 记录一个错误级别的日志 使用error 方法 Log error 这是一条错误日志
  • 2022届实习+秋招大厂面试经验(后端开发+java)

    个人情况 待补充 求职方向 后端开发 大致情况 20年底在字节实习到21年6月底 转正 21年7月初开始在阿里实习到8月中 转正 随后面试了百度 腾讯和美团 均拿到offer 中间有挂过 被其他部门又捞了 最终选择阿里 我是22年秋季毕业
  • C++函数中返回智能指针的裸指针问题

    注意 如果不是CSDN网站显示本篇文章 请于底部点击 阅读原文 来阅读本篇文章 C 函数中返回智能指针的裸指针问题 要点 原始代码 解决办法 作为一项案例分析下 C 函数中返回智能指针的裸指针问题 要点 不要在函数中返回智能指针的裸指针出去
  • Flutter之MaterialApp使用详解

    如需转载 请尊重作者 注明出处 谢谢配合 22个参数 字段 类型 navigatorKey 导航键 GlobalKey home 主页 Widget routes 路由 Map
  • 非常简单的无闪刷新验证码原理

    非常简单的无闪刷新验证码原理 只有这一段事件触发语句全搞定 nclick this src GifCode asp newDate getTime GifCode asp验证码的图片 事件 nclick this src GifCode a
  • jsp中request经常是的获取参数的方法总结

    我的个人博客开通了 地址 https timewentby com 欢迎访问 下面将获取参数的方法都列出来说一说 request getParameter String name 获取指定name的值 若name有多个相同值则获取第一个va
  • Devoloper warning for package "com..." Failed to post notification on channel "null" see log for det

    使用通知时屏幕显示 这是因为我们使用的是Android O Android 8 0 之前的通知写法 而Android O之后引入了通知通道 Notification channel 重新定义通知内容中的应用程序类别 可以让开发者给予用户更精
  • Kubernetes CKA考试和真题(下)

    前言 之前分享了CKA考试的1 10题 这篇文章继续分享CKA实操考试的最后7到题目 忘了告诉大家 考试的时候可以查看官网资料 监考官是允许这个行为的 但是你不能打开除了k8s官网的其它页面 第11题 启动多容器pod 任务 创建一个名为k
  • 计算巢实现大模型微调——如何发布一个微调服务

    前言 各位看官 最近是否被大模型相关信息刷屏了呢 铺天盖地的大模型预训练 微调等各种关键词是否让你眼花缭乱呢 在如此热度之下 你有没有想过自己亲自动手部署一个大模型执行训练或者微调呢 或许你曾经尝试过却被某个繁琐的步骤劝退了呢 又或者你是模
  • 关于java.lang.NullPointerException: Cannot invoke “org.springframework.data.redis.core.

    java lang NullPointerException Cannot invoke org springframework data redis core RedisTemplate opsForValue because this
  • 机器学习--特征缩放/均值归一化

    特征缩放 feature scaling 其中 特征缩放 feature scaling 大致的思路是这样的 梯度下降算法中 在有多个特征的情况下 如果你能确保这些不同的特征都处在一个相近的范围 这样梯度下降法就能更快地收敛 举个例子来说明
  • Linux中查看所有文件夹及包括文件大小之和

    如果想查看Linux中哪个文件夹最大 可以通过du sh 命令查询哪个文件夹最大 然后进入该文件夹继续执行该命令 直到找出最大的为止 1 Linux中查看所有文件夹和文件大小 这条命令将会计算该文件夹下所有文件大小总和 du sh 执行效果
  • 1、Reading Rasa Source Code —— main

    目录 main main 从 pypi 官方网站上下载 rasa 的最后一个释放版本 截止目前 最新版本为 2 2 1 的源码 解压后 在根目录下 找到 setup py 文件 这是安装引导程序 我们主要关注的是 entry points