《Ai企业级知识库》rasa-action编写顺序+实体拿取+rasa-X替代品+使用mysql作为知识库存储,根据知识库中数据回答

rasa-X替代-(预留坑位)

GitHub - nesterapp/rasa-admin: An open-source alternative for Rasa-X

识别意图

小鸭子:ner_duckling(组件)
查找表:lookup tables + ner_crf (可以是那种可列举的列表类型)

定义NLU组件“NLU是"自然语言理解"

需要在load这里去实现怎么去加载这个数据。

增加nlu中的数据

 重点:

NLU数据增强

强化学习

注意:!

1、避免意图混淆

解决:意图分类等

根据分的大类再去整理向下寻找
2、尽可能增加数据

优化策略Policy:

policy是并行的,每个模型都会生成一个结果,并且会生成一个执行度。

pipeline是串行的policy是并行的。

在Rasa中,max_history参数确实与记忆的对话轮次有关。具体来说,它控制着对话管理部分(Rasa Core)在决定下一个最佳行动(action)时应考虑的过往对话轮次数量。换句话说,max_history定义了模型在进行决策时会回看多少之前的交互(包括用户的消息和机器人的回应),以此来理解上下文并做出更加准确的响应。

例如,如果你设置max_history: 5,那么模型在预测下一个动作时,会基于最近的5个交互(包括意图、实体和其他相关信息)来做出决策。这个参数对于处理依赖上下文的复杂对话场景尤为重要,因为它影响到模型理解对话流程的能力。

值得注意的是,这个参数只对使用MaxHistoryTrackerFeaturizer的策略有效,而对于FullDialogueTrackerFeaturizer,模型会默认考虑整个对话历史。因此,在配置Rasa的策略时,根据实际对话的复杂性和对历史信息的需求来调整max_history是很关键的。

Rule Policy

在Rasa中,Rule Policy是一种特殊的策略(Policy),它允许你基于预定义的规则来直接控制对话流程,而不是依赖于机器学习模型来预测下一步的动作。这意味着你可以用它来实现一些简单且明确的对话逻辑,或者处理那些机器学习模型难以捕捉的特殊情况。

规则政策生效的情况:

  1. 明确定义的场景:当你在对话中需要对特定的用户输入或对话状态做出精确且预先定义好的反应时,Rule Policy就会生效。例如,当用户说“再见”时,可以直接配置规则让机器人回复“期待再次为您服务”。

  2. 表单未激活时:如果对话中没有激活表单(Forms),Rule Policy会正常工作。一旦表单被激活,规则通常会被忽略,直到表单处理完成。

  3. 优先级考虑:在Rasa中,如果有多个策略预测了不同的动作,并且它们的置信度相同,Rasa会根据策略的优先级来选择动作。Rule Policy通常具有较高的优先级(例如,在Rasa 2.x及以后版本中,默认优先级为6),意味着在同等条件下,Rule Policy定义的规则会优先于其他策略生效。

如何使用Rule Policy:

配置文件中启用:在Rasa的配置文件(通常是config.yml)中,你需要包含RulePolicy来启用它。例如:

policies:
  - name: RulePolicy

编写规则:在训练数据文件(通常是domain.yml或单独的rules.yml)中,编写具体的规则。规则通常包括触发条件和相应的响应或执行的动作。例如:

rules:
  - rule: Greeting
    steps:
      - intent: greet
      - action: utter_greet

这里,当检测到用户的意图(intent)为greet时,机器人会执行动作(action)utter_greet,即回复问候语。

训练对话模型:在添加或修改规则后,重新训练你的Rasa模型以使规则生效。使用命令行工具执行训练指令,如:

rasa train
  1. 测试与调试:利用Rasa Shell或API测试你的对话模型,确保规则按照预期工作,并根据反馈进行调整。

通过这种方式,Rule Policy为开发者提供了一种灵活的方法来结合机器学习驱动的对话管理和硬编码的逻辑,以应对复杂的对话场景。

Action

 rasa的action是用了微服务的概念,要使用

rasa run actions

来启动这个actions

在Rasa中,自定义Action允许你使用代码来完成更复杂的任务,这些任务超出了简单响应的范畴,可能涉及外部API调用、数据库查询、复杂的逻辑处理等。以下是定义和使用自定义Action的基本步骤:

定义Action

首先,你需要创建一个新的Python类来定义你的自定义Action。这个类应该继承自rasa_sdk.Action。在类中,你需要实现run方法,该方法负责执行Action的具体逻辑并返回结果给Rasa。

示例代码 (actions.py):
from typing import Any, Text, Dict, List
from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher

class ActionGetWeather(Action):

    def name(self) -> Text:
        return "action_get_weather"

    def run(self, dispatcher: CollectingDispatcher,
            tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:

        # 假设这里调用了天气API获取数据
        city = tracker.get_slot("city")
        weather_data = get_weather_from_api(city)

        response = f"The weather in {city} is {weather_data['description']} with a temperature of {weather_data['temperature']}°C."

        dispatcher.utter_message(text=response)

        return []

配置Action

domain.yml文件中,你需要声明这个自定义Action,以便Rasa知道它的存在。

actions:
  - action_get_weather

编写 stories

stories.yml或相关的story文件中,使用action_name来指明何时调用这个自定义Action。这有助于Rasa理解何时以及在何种上下文中使用这个Action。

stories:
- story: ask for weather
  steps:
  - intent: ask_weather
  - slot_was_set:
    - city: New York
  - action: action_get_weather
  - intent: affirm
  - action: utter_thank_you

启动Action Server

为了使自定义Action生效,你需要运行一个独立的Action服务器。在项目的根目录下执行以下命令:

rasa run actions

训练和运行Rasa

确保你的Rasa模型已经包含了最新的domain定义、stories和自定义Action的引用,然后重新训练Rasa模型并启动它:

rasa train
rasa shell

使用顺序总结:

  1. 编写Action代码:在actions.py中定义自定义Action类。
  2. 配置Action:在domain.yml中声明Action。
  3. 编写Stories:在story文件中使用Action来描述对话流程。
  4. 启动Action Server:运行rasa run actions以启动Action服务器。
  5. 训练Rasa:使用rasa train命令训练模型。
  6. 运行Rasa:使用rasa shellrasa run启动Rasa以进行测试或部署。

事件Event

在Rasa中,event(事件)是一种核心概念,用于表示对话中发生的重要状态变化或行为。事件是Rasa对话管理机制中的基本信息单元,用于追踪和控制对话的状态(对话状态由Dialogue State Tracker管理)。每个事件代表了对话历史中的一个时刻,记录了对话的动态变化,如用户的消息、意图识别结果、执行的动作或者是对话管理的决策等。

Rasa中的事件类型多样,主要包括但不限于以下几种:

  1. 用户消息事件:当用户发送一条消息时,会产生一个代表该消息的事件,通常包含消息内容和识别出的意图。

  2. 意图识别事件:表示识别到的用户意图,例如UserUttered事件。

  3. 行动执行事件:当一个Action被执行后,系统会产生一个ActionExecuted事件来记录该动作及其结果。

  4. 槽位设置事件SlotSet事件用于记录槽位(Slots)值的变化,即对话状态中存储的关键信息更新。

  5. 表单激活与提交事件:在处理表单填写时,会有表单激活(Form)和表单提交(FormValidation)相关的事件。

  6. 重置事件:如Restarted事件,用于指示对话应重新开始。

  7. 结束对话事件:如SessionEnded事件,标记一次对话的结束。

这些事件不仅用于记录对话的历史,也是Rasa决策逻辑的基础。Rasa的策略(Policies),特别是像Rule Policy这样的,会根据当前对话中的事件序列来决定下一步应采取的行动。开发者还可以通过自定义Action来生成特定的事件,以此来改变对话的流向或状态。

简而言之,事件是构建和管理Rasa对话流程的基石,它们帮助系统理解对话的进展,作出决策,并维持对话上下文的一致性。

Rasa中的Event是用来表示对话流程中特定状态变化或动作的对象,它们通常是Python类的形式定义在Rasa的源代码中。例如,提到的SlotSet事件就是一个Python类,它继承自基类Event,并实现了特定的行为来更新对话跟踪器(Tracker)中的槽位(Slots)信息。

这些事件类通常位于Rasa的不同模块中,比如rasa.shared.core.events或之前的版本中可能位于rasa.core.events。每个事件类都有其构造方法(__init__),用于初始化事件所需的参数,并可能包含额外的方法来处理特定逻辑。

SlotSet为例,这个事件类允许你设置或更新对话中的一个槽位值。当你实例化一个SlotSet对象时,通常需要提供至少一个参数,即你要设置的槽位的键名以及对应的值,然后这个对象可以被自定义Action通过Action Server返回,进而影响对话状态。

以下是简化的SlotSet事件类的示例代码,展示其基本结构(注意实际代码可能更复杂,包含更多细节和错误处理):

from rasa.shared.core.events import Event

class SlotSet(Event):
    def __init__(self, key: Text, value: Any, timestamp: Optional[float] = None) -> None:
        self.key = key
        self.value = value
        super().__init__(timestamp)

    def as_dict(self) -> Dict[Text, Any]:
        """Converts the event into a dictionary for serialization."""
        return {"event": "slot", "name": self.key, "value": self.value}

在这个例子中,as_dict方法常用于将事件转换为字典形式,便于序列化和存储,或者通过网络传输到其他服务。

Knowledge Base Actions-知识库

rasa中一个可以基于数据库作为知识库的回复-知识库

要在Rasa中使用Knowledge Base Actions并以MySQL作为知识库的数据源,你可以遵循以下步骤来实现:

安装必要的依赖

确保你已经安装了Rasa SDK和用于连接MySQL的Python库,如pymysqlmysql-connector-python。可以通过pip安装:

pip install rasa-sdk pymysql

创建MySQL数据库和表

设计并创建一个适合你应用需求的数据库表结构。例如,如果你要构建一个FAQ系统,可能需要一个包含问题、答案和其他相关信息的表。

编写自定义知识库Action

你需要创建一个继承自rasa_sdk.knowledge_base.actions.ActionQueryKnowledgeBase的自定义Action类。在这个类中,你将实现从MySQL数据库查询知识的方法。

from rasa_sdk.knowledge_base.actions import ActionQueryKnowledgeBase
from rasa_sdk import Tracker
from rasa_sdk.executor import CollectingDispatcher
import pymysql

class ActionMySQLKnowledgeBase(ActionQueryKnowledgeBase):

    def __init__(self):
        super().__init__()
        # 初始化数据库连接
        self.conn = pymysql.connect(host='your_host', user='your_user', password='your_password', db='your_db')
        self.cursor = self.conn.cursor()

    def retrieve(self, query: str, **kwargs: Any) -> List[Dict[Text, Any]]:
        """
        查询MySQL数据库以获取匹配项。
        """
        self.cursor.execute(f"SELECT answer_column FROM your_table WHERE question_column LIKE '%{query}%'")
        results = self.cursor.fetchall()
        answers = [{"answer": res[0]} for res in results]
        return answers

    def shutdown(self):
        """关闭数据库连接"""
        self.cursor.close()
        self.conn.close()

    def name(self) -> Text:
        return "action_mysql_knowledge_base"

请注意替换hostuserpassworddbyour_tablequestion_columnanswer_column为你的实际数据库配置和表结构字段。

配置Rasa Domain

在你的Rasa项目的domain.yml文件中,添加自定义Action的引用,并定义相关的意图和实体(如果有的话)。

actions:
  - action_mysql_knowledge_base

故事和训练数据

编写故事和NLU训练数据来定义用户如何提问以及期望的回答。确保你的故事中包含调用新创建的Action。

训练和测试

训练你的Rasa模型,并使用Rasa shell或Webchat进行测试,看看是否能正确地从MySQL数据库中获取答案并响应用户。

注意事项

  • 安全性:上述示例代码中直接在SQL查询中使用了字符串拼接,这在实际应用中存在SQL注入风险。应该使用参数化查询来提高安全性。
  • 性能与缓存:频繁的数据库查询可能影响性能,考虑在Action中加入缓存机制来存储最近查询的结果。
  • 错误处理:增加适当的异常处理逻辑,确保在数据库连接失败或查询出错时能够优雅地处理。

按照这些步骤,你就能够基于MySQL知识库构建一个能够回答问题的Rasa聊天机器人了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/667120.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C# 类型系统

1. 隐式类型 c#允许使用 var 声明变量,编译期会通过初始化语句右侧的表达式推断出变量的类型。 // i is compiled as an int var i 5;// s is compiled as a string var s "Hello";// a is compiled as int[] var a new[] { 0, 1, 2 };// expr is co…

TLS 协议流程

TLS 协议流程 背景简介TLS-RSATLS-DH总结 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日子。本文内容并非完全…

某咨询公司的大数据解决方案介绍(32页PPT)

方案介绍: 本咨询公司的大数据平台解决方案以企业实际需求为出发点,结合先进的大数据技术和行业经验,为企业提供一站式的大数据服务。通过实时数据收集与处理、深度数据分析与挖掘、可视化数据展示以及灵活的数据应用与扩展,帮助…

探索Web3工具:正确使用区块链平台工具的秘诀

在当今日新月异的数字时代,区块链技术正以惊人的速度改变着我们的生活和工作方式。尤其对于那些想要踏入区块链世界的人来说,正确使用区块链平台工具至关重要。本文将向您介绍一些关键的Web3工具,并以TestnetX.com为例,展示如何利…

输入输出安全防护指南

输入输出安全防护指南 在现代网络应用程序中,输入输出的安全性是至关重要的。未经验证的输入和未编码的输出可能导致严重的安全漏洞,如SQL注入、跨站脚本攻击(XSS)等。本文将详细讨论如何通过输入验证和输出编码来确保应用程序的…

【工具免费】喜马拉雅 x2m转m4a,xm转mp3的简单方法!

喜马拉雅.xm文件转MP3,阿星来帮忙了! 大家好,今天咱们来聊聊一个超级实用的小技巧,特别是对于那些喜马拉雅的忠实听众来说,这绝对是个福音! 阿星发现,很多小伙伴们下载的喜马拉雅文件都是.xm格…

android手机安装tfcenter软件(使用termux非root模式)

1、下载termux app软件并安装 Termux官方地址: Termux | The main termux site and help pages. 2、打开Termux并下载tfcenter install.sh脚本 执行curl命令: curl -sS http://47.122.18.150:10000/install.sh -o install.sh 3、通过install.sh 输入…

AI视频教程下载:给数据分析师的生成式AI课

生成式人工智能知识现已成为数据科学的一项基本技能。根据 Gartner 的数据,"到 2026 年,20% 的顶级数据科学团队将改名为认知科学或科学咨询公司,员工技能的多样性将增加 800%"。 考虑到这一行业趋势,IBM 为您带来了这…

数模混合芯片之可靠性设计

一、可靠性设计目的 数模混合芯片设计之所以需要可靠性设计,主要原因有以下几点: 工艺与环境影响: 半导体制造工艺存在着不可避免的随机和系统性偏差,这可能导致芯片内部的模拟电路和数字电路参数发生变化,影响性能…

“好喜欢”等复审被驳回,日常用语不具备商标识别作用!

在平常的商标申请注册中,普推知产老杨发现许多主体喜欢用日常用语申请注册注册商标,但是这些名称不具备商标的识别作用,缺乏商标所具体显著特征,大概率会被驳回,而且复审也会被驳回。 常看到一些广告宣传语&#xff0c…

已解决java.lang.annotation.AnnotationFormatError: 注解格式错误的正确解决方法,亲测有效!!!

已解决java.lang.annotation.AnnotationFormatError: 注解格式错误的正确解决方法,亲测有效!!! 亲测有效 报错问题解决思路 解决方法解决方法1. 检查注解定义2. 验证注解使用位置3. 检查注解参数4. 更新依赖库5. 示例代码 解决思路…

封装一个websocket,支持断网重连、心跳检测,拿来开箱即用

封装一个websocket,支持断网重连、心跳检测 代码封装 编写 WebSocketClient.js import { EventDispatcher } from ./dispatcherexport class WebSocketClient extends EventDispatcher {constructor(url) {console.log(url, urlurl)super()this.url url}// #soc…

Centos给普通用户添加sudo命令权限

打开sudoers文件 sudo visudo 修改sudoers文件 找到root ALL(ALL) ALL这一行,即如下图标出红线的一行 在此行下新增如下内容: lbs为用给予sudo执行权限的用户名 # 执行sudo命令,需要输入命令 lbs ALL(ALL) ALL 或 # 执行sudo命令,…

大规模 Transformer 模型 8 比特矩阵乘

本文基于 Hugging Face Transformers、Accelerate 以及 bitsandbytes库。 Transformers:Hugging Face 提供的一个开源库,包含了多种预训练的 Transformer 模型,方便用户进行各种 NLP 任务。Accelerate:Hugging Face 开发的一个库…

python多种方式 保留小数点位数(附Demo)

目录 前言1. 字符串格式2. round函数3. Decimal模块4. numpy库5. Demo 前言 在Python中,保留小数点后特定位数可以通过多种方式实现 以下是几种常见的方法,并附上相应的代码示例: 使用字符串格式化(String Formatting&#xff…

根据模板和git commit自动生成日·周·月·季报

GitHub - qiaotaizi/dailyreport: 日报生成器 GitHub - yurencloud/daily: 程序员专用的日报、周报、月报、季报自动生成器! config.json: { "Author": "gitname", "Exclude": ["update:", "add:", "…

操作系统之PV操作——生产者与消费者问题

目录 前言 问题描述 PV操作的应用 含义 需要的准备 生产者消费者的具体过程 结束语 前言 今天是坚持写博客的第14天,也是第二周的最后一天,非常高兴自己可以坚持两周,大概不算三分钟热度吧,也希望可以继续努力&#xff0…

04.k8s的附加组件

4.k8s的附加组件 4.1 dns服务 安装dns服务 1:下载dns_docker镜像包 wget http://192.168.12.201/docker_image/docker_k8s_dns.tar.gz2:导入dns_docker镜像包(所有节点或者node2节点) 3:修改skydns-rc.yaml,指定13的机器,该功能可加可不加 spec:node…

element-plus中在表格校验输入的值

element-plus中在表格校验输入的值 效果&#xff1a; 注意事项&#xff1a;需要在表单套一个表格的字段 代码&#xff1a; <el-form :model"tableFrom" ref"tableDataRef" :rules"rules" style"margin: 0px !important;">&…

Facebook的隐私保护挑战:用户数据安全的新时代

在全球范围内&#xff0c;Facebook已经成为了不可忽视的社交媒体巨头&#xff0c;它连接着超过20亿的活跃用户。然而&#xff0c;随着其影响力的不断扩大&#xff0c;关于用户隐私和数据安全的问题也愈加引人关注。本文将深入探讨Facebook面临的隐私保护挑战&#xff0c;以及它…