rasa core 中的逻辑

2024-05-14 21:58
文章标签 逻辑 core rasa

本文主要是介绍rasa core 中的逻辑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

rasa core

rasa 逻辑

在这里插入图片描述

rasa core为核心的逻辑

在这里插入图片描述
Agent将Rasa Core的功能通过API开放出来,像模型训练,对话处理等都可以通过Agent完成,一个模型训练的例子:

import sys
from rasa_core.policies.keras_policy import KerasPolicy
from rasa_core.agent import Agentif len(sys.argv) < 3:print("请指定数据路径和模型的存储名称")exit()domain = "{}/domain.yml".format(sys.argv[1])
stories = "{}/data/stories.md".format(sys.argv[1])
dialogue = "{}/models/{}".format(sys.argv[1], sys.argv[2])agent = Agent(domain, policies=[KerasPolicy(validation_split=0.0,epochs=400)])
training_data = agent.load_data(stories)
agent.train(training_data)
agent.persist(dialogue)

rasa core的主要功能是实现:对话追踪 & 对话管理的任务

对话追踪

简单理解为把 对话的过程记录下来
主要涉及 tracker 、event类
在Rasa Core中Tracker负责记录整个对话的流程,而Tracker中数据的新增、编辑和删除是通过Event进行管理的。

Events

Events用于描述一个对话过程中任何可能发生的事情。简单来说,Event就是对bot一切行为的抽象。

{'event': 'user', 'timestamp': 1576028292.7156482, 'text': ' 文本审核', 'parse_data': {'intent': {'name': 'request_search_TextsReviews', 'confidence': 0.9437154531478882}, 'entities': [],'intent_ranking': [{'name': 'request_search_TextsReviews', 'confidence': 0.9437154531478882}, {'name': 'query_attendance_rules', 'confidence': 0.13368795812129974}, {'name': 'request_search_EA', 'confidence': 0.12188508361577988}, {'name': 'inform_people_conference', 'confidence': 0.11569312959909439}, {'name': 'inform_time_conference', 'confidence': 0.0498206689953804}, {'name': 'confirm', 'confidence': 0.0410604402422905}, {'name': 'greet', 'confidence': 0.01581529527902603}, {'name': 'request_search_conference', 'confidence': 0.0}, {'name': 'inform_floor_conference', 'confidence': 0.0}, {'name': 'confirm + goodbye', 'confidence': 0.0}], 'text': '文本审核'}, 'input_channel': 'cmdline'}, 

rasa-core内部实现了以下Event
在这里插入图片描述
Event对象是Rasa Core描述会话中发生的所有事件和明确rasa.core.trackers.DialogueStateTracker该如何更新其状态的基类,因此不能被直接使用,而是通过它包含的具体事件(event)实现。
(1)通用事件

  • rasa_core.events.SlotSet(key, value=None, timestamp=None) #设置插槽值
  • rasa_core.events.Restarted(timestamp=None) # 重置tracker
  • rasa_core.events.AllSlotsReset(timestamp=None) #重置插槽
  • rasa_core.events.ReminderScheduled(action_name, trigger_date_time,
    name=None, kill_on_user_message=True, timestamp=None) #定时执行Action
  • rasa_core.events.ConversationPaused(timestamp=None)#暂停会话
  • rasa_core.events.ConversationResumed #恢复会话
  • rasa_core.events.FollowupAction(name,
    timestamp=None)#强制设置nex_action指定的action

(2)自动跟踪事件

  • rasa_core.events.UserUttered(text, intent=None, entities=None, parse_data=None, timestamp=None, input_channel=None, message_id=None)[source]#用户向机器人发一条message
  • rasa_core.events.BotUttered(text=None, data=None, timestamp=None)#机器人向用户发送一条message
  • rasa_core.events.UserUtteranceReverted(timestamp=None)
Tracker

tracker类的init

    def __init__(self, sender_id, slots,max_event_history=None):"""Initialize the tracker.A set of events can be stored externally, and we will run through allof them to get the current state. The tracker will represent all theinformation we captured while processing messages of the dialogue."""# 可以跟踪的最长历史,tracker记录状态是以event为单位的self._max_event_history = max_event_historyself.events = self._create_events([]) # 历史事件列表self.sender_id = sender_id # 这个id和rasa的chenel特性有关系self.slots = {slot.name: copy.deepcopy(slot) for slot in slots} # slot列表#### current state of the tracker - MUST be re-creatable by processing# all the events. This only defines the attributes, values are set in# `reset()`###self._paused = None   # 暂停标志# 一些action记录self.followup_action = ACTION_LISTEN_NAMEself.latest_action_name = Noneself.latest_message = Noneself.latest_bot_utterance = None   # bot的上一个返回内容self._reset()

对话管理

Policy

Policy是负责决策Action的调用在Tracker的状态发生变更之后,Policy来决定下一步的Action。

CollectionDispatcher

这个对象的主要作用是设计了各种魔法函数,处理不同类型的bot输出,并将其输出到OutputChannel中。看一下它的成员方法就能知道它的作用:
在这里插入图片描述

  • dispatcher.utter_elements#Sends a message with custom elements to the output channel
  • dispatcher.utter_message #Send a text to the output
    channel
  • dispatcher.utter_button_message#Sends a message with buttons
    to the output channel
  • dispatcher.utter_button_template#Sends a
    message template with buttons to the output channel

Processor

这个对象是对话系统的核心处理模块。它通过execute_action完成bot处理对话的流程。

这里需要注意一点,在processor执行action之前,agent将会调用processor的log_message方法,使用nlu_interpreter来对用户发送的文本做实体识别和意图识别,然后将信息保存在tracker中,这个逻辑比较简单,nlu模块也在前一篇文章中详细解析过了,因此这里就不详细展开了。

execute_action方法核心内容如下:
在这里插入图片描述

DialogueStateTracker

在多轮对话过程中全程记录对话状态信息。这个对象在开发自己的对话系统时,作用可是非常大的。很多对话状态信息,都可以从它这里得到。当然, 我们并不能直接去读写其定义的成员变量信息,需要通过其成员方法来操作成员变量,例如current_sate(),其核心内容如下:

在这里插入图片描述

Action

Action是对用户输入的一种回应:
Actions are the things your bot runs in response to user input. There are three kinds of actions in Rasa Core:
(1)default actions (action_listen, action_restart, action_default_fallback)
rasa系统内置的粒度较小的action。与rasa_sdk中的action不同,这个是直接在rasa_core/actions下面的。相对于上面的form action来说,这里的action功能更单一,与events比较像,但是还是略有不同,下面举个实例ActionRestart:
在这里插入图片描述
所有default action的列表如下,它们的命名都非常简单直接:

  • action_listen
  • action_restart
  • action_default_fallback
  • action_deactive_form
  • action_rever_fallback_events
  • action_default_ask_affirmation
  • action_default_ask_rephrase
  • action_back
    (2)utter actions, starting with utter_, which just sends a message to the user.
    (3)custom actions - any other action, these actions can run arbitrary code
Form Actions

这篇关于rasa core 中的逻辑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/989964

相关文章

逻辑表达式,最小项

目录 得到此图的逻辑电路 1.画出它的真值表 2.根据真值表写出逻辑式 3.画逻辑图 逻辑函数的表示 逻辑表达式 最小项 定义 基本性质 最小项编号 最小项表达式   得到此图的逻辑电路 1.画出它的真值表 这是同或的逻辑式。 2.根据真值表写出逻辑式   3.画逻辑图   有两种画法,1是根据运算优先级非>与>或得到,第二种是采

UMI复现代码运行逻辑全流程(一)——eval_real.py(尚在更新)

一、文件夹功能解析 全文件夹如下 其中,核心文件作用为: diffusion_policy:扩散策略核心文件夹,包含了众多模型及基础库 example:标定及配置文件 scripts/scripts_real:测试脚本文件,区别在于前者倾向于单体运行,后者为整体运行 scripts_slam_pipeline:orb_slam3运行全部文件 umi:核心交互文件夹,作用在于构建真

jupyter在加载pkl文件时报错ModuleNotFoundError: No module named 'pandas.core.internals.managers'; '的解决方法

笔者当看到这个错误的时候一脸懵逼,在pycharm上正常运行的code 放在jupyter就不成了,于是就研究一翻。 一开始以为自己的pkl文件有问题,研究重点放在这里,最后发现不是。 然后取搜索pycharm和jupyter下的python的\Lib\site-packages\pandas\core\internals有什么不同 发现jupyter下没有pandas\core\intern

【Java编程的逻辑】原子变量 CAS 显示锁

原子变量 在理解synchronized中有使用synchronized保证原子更新操作,但是使用synchronized成本太高了,需要先获取锁,最后还要释放锁,如果获取不到锁还需要等到。这些成本都是比较高的,对于这种情况,可以使用原子变量。 Java并发包中的基本原子变量类型有以下几种: AtomicBoolean:原子Boolean类型,常用来在程序中表示一个标志位 AtomicIn

【Java编程的逻辑】容器类的总结

抽象容器类 用法和特点 容器类有两个根接口,分别是Collection 和 Map ,Collection表示单个元素的集合,Map表示键值对的集合 。 Collection Collection表示的数据集合有基本的增、删、查、遍历等方法,但没有定义元素间的顺序或位置,也没有规定是否有重复元素。 List: 是Collection的子接口,表示有顺序或位置的数据集合,增加了根据

【Java编程的逻辑】堆与优先级队列PriorityQueue

完全二叉树 & 满二叉树 & 堆 基本概念 满二叉树是指除了最后一层外,每个节点都有两个孩子,而最后一层都是叶子节点,都没有孩子。 满二叉树一定是完全二叉树,但完全二叉树不要求最后一层是满的,但如果不满,则要求所有节点必须集中在最左边,从左到右是连续的,中间不能有空的。 特点 在完全二叉树中,可以给每个节点一个编号,编号从1开始连续递增,从上到下,从左到右 完全二叉树有一

【Java编程的逻辑】Map和Set

HashMap Map有键和值的概念。一个键映射到一个值,Map按照键存储和访问值,键不能重复。 HashMap实现了Map接口。 基本原理 HashMap的基本实现原理:内部有一个哈希表,即数组table,每个元素table[i]指向一个单向链表,根据键存取值,用键算出hash值,取模得到数组中的索引位置index,然后操作table[index]指向的单向链表。 存取的时候依据键的

MySQL逻辑架构和执行流程(一)

MySQL逻辑架构和执行流程 MySQL逻辑架构图第一层(连接层)第二层(核心服务层)第三层(存储引擎) 各组件详细介绍ConnectorsConnection PoolSQL_InterfaceParser解析器Optimizer优化器Cache和Buffer缓存Engine存储引擎 执行流程 MySQL 逻辑架构图 第一层(连接层) 连接层不是MYSQL架构特有的,

C#/.NET/.NET Core推荐学习路线文档文章

前言 专门为C#/.NET/.NET Core推荐学习路线&文档&文章提供的一个Issues,各位小伙伴可以把自己觉得不错的学习路线、文档、文章相关地址分享出来🤞。 https://github.com/YSGStudyHards/DotNetGuide/issues/10 🏷️C#/.NET/.NET Core优质学习资料 📚.NET 入门教程 📚

ASP.NET Core 入门教学十七 GraphQL入门指南

GraphQL 是一种用于 API 的查询语言,允许客户端请求所需的数据,并能够合并多个资源到一个请求中。在 ASP.NET Core 中使用 GraphQL 可以提供更灵活、高效和实用的数据查询方式。以下是 ASP.NET Core 中 GraphQL 的入门指南: 1. 安装必要的 NuGet 包 首先,你需要安装以下 NuGet 包: GraphQLGraphQL.Server.Tra