技术标签: Rasa
在本指南中,我们将创建一个帮助用户订阅新闻稿(newsletter
)的助手。通过以下每个步骤了解如何创建简单助手:
为了让助手能够识别用户在说什么,不管用户如何表达他们的信息,我们需要提供助手可以从中学习的示例信息。我们根据信息所表达的想法或目标(也称为意图)对这些示例进行分组。在下面的代码块中,我们添加了一个名为greet
的intent
(意图),其中包含“Hi”
、“Hey”
和“good morning”
等示例消息。
意图及其例子被用作助手自然语言理解(NLU
)模型的训练数据。
nlu:
- intent: greet
examples: |
- Hi
- Hey!
- Hallo
- Good day
- Good morning
- intent: subscribe
examples: |
- I want to get the newsletter
- Can you send me the newsletter?
- Can you sign me up for the newsletter?
- intent: inform
examples: |
- My email is example@example.com
- random@example.com
- Please send it to anything@example.com
- Email is something@example.com
既然助手理解了用户可能会说的一些消息,它就需要能够发送回用户的响应。
“你好,我能帮你什么忙吗?你的电子邮件地址是什么?“这是我们助理将使用的一些回答。在接下来的步骤中,您将看到如何连接用户消息和响应。
在下面的代码块中,我们列出了一些响应,并为每个响应添加了一个或多个文本选项。如果一个响应有多个文本选项,则在预测该响应时,将随机选择其中一个选项。
responses:
utter_greet:
- text: |
Hello! How can I help you?
- text: |
Hi!
utter_ask_email:
- text: |
What is your email address?
utter_subscribed:
- text: |
Check your inbox at {
email} in order to finish subscribing to the newsletter!
- text: |
You're all set! Check your inbox at {
email} to confirm your subscription.
故事是训练助手根据用户之前在对话中所说的内容做出正确反应的示例对话。故事格式显示用户消息的意图,后跟助手的操作或响应。
你的第一个故事应该展示一个对话流程,在这个流程中,助手帮助用户以一种直截了当的方式完成他们的目标。稍后,您可以为用户不想提供信息或切换到其他主题的情况添加故事。
在下面的代码块中,我们添加了一个故事,在这个故事中,用户和助手交换问候,用户请求订阅新闻稿,助手开始通过新闻稿表单收集所需的信息。您将在下一步学习表单。
stories:
- story: greet and subscribe
steps:
- intent: greet
- action: utter_greet
- intent: subscribe
- action: newsletter_form
- active_loop: newsletter_form
在许多情况下,助手需要从用户那里收集信息。例如,当用户想要订阅时事通讯时,助理必须询问他们的电子邮件地址。
您可以在Rasa
中使用表单来完成此操作。在下面的代码块中,我们添加了新闻稿表单(newsletter_form
),并使用它来收集用户的电子邮件地址。
forms:
newsletter_form:
email:
- type: from_text
规则描述了会话中应该始终遵循相同路径的部分,无论之前在会话中说了什么。
我们希望助手总是用一个特定的动作来回应某个意图,所以我们使用一个规则来将该动作映射到意图。
在下面的代码块中,我们添加了一个规则,每当用户表示“subscribe”
意图时触发“newsletter_form”
。我们还添加了一个规则,一旦提供了所有必需的信息,它就会触发“utter_subscribed”
操作。第二条规则仅在“newsletter_form”
开始时处于活动状态时适用;一旦它不再处于活动状态(active\u loop
:null),表单就完成了。
rules:
- rule: activate subscribe form
steps:
- intent: subscribe
- action: newsletter_form
- active_loop: newsletter_form
- rule: submit form
condition:
- active_loop: newsletter_form
steps:
- action: newsletter_form
- active_loop: null
- action: utter_subscribed
文章浏览阅读2.4k次,点赞3次,收藏9次。在写qt网口通信的过程中,遇到中文就乱码。解决方法如下:1.接收端处理中文乱码代码如下 QByteArray-> QString 中文乱码解决: #include <QTextCodec>QByteArray data= tcpSocket->readAll(); QTextCodec *tc = QTextCodec::codecForName("GBK"); QString str = tc->toUnicode(data);//str如果是中文则是中文字符_qbytearray中文乱码
文章浏览阅读2.5k次,点赞2次,收藏15次。什么是 DOM?文档对象模型(Document Object Model,简称 DOM),是 W3C 组织推荐的处理可扩展标记语言(HTML或者XML)的标准编程接口。W3C 已经定义了一系列的 DOM 接口,通过这些 DOM 接口可以改变网页的内容、结构和样式DOM 树文档:一个页面就是一个文档,DOM 中使用 document 表示元素:页面中的所有标签都是元素,DOM 中使用 element 表示节点:网页中的所有内容都是节点(标签、属性、文本、注释等),DOM 中使用 node._元素事件
文章浏览阅读1.4k次,点赞3次,收藏7次。关于服务的一些基本知识,包括活动对接口的方法调用,接口实现,服务生命周期等知识。_安卓服务
文章浏览阅读7.9k次,点赞5次,收藏8次。小白式数据库连接池使用,看完拿捏数据库连接池。_采用连接池方式连接数据库
文章浏览阅读4.9k次,点赞5次,收藏36次。摘要:本文介绍了C++11中如何开启新线程,并详细讲解了线程的基础同步原语:mutex, lock_guard, unique_lock, condition variable和semaphore等。如何采用async, packaged_task和promise实现future同步机制?怎样处理spurious wakeup?本文以质数判定服务为例为大家分享C++多线程同步措施!1. C++线程和基础同步原语Thread mutex, lock_guard, unique_lock con._c++线程同步
文章浏览阅读3.3k次,点赞4次,收藏9次。STM32 GPIOx通用输入输出I/O端口的BSRR寄存器与BRR功能简述_gpiob->brr
文章浏览阅读590次。IMP-00019: row rejected due to ORACLE error 12899IMP-00003: ORACLE error 12899 encounteredORA-12899: value too large for column "CRM"."BK_ECS_ORDER_INFO_00413"."POSTSCRIPT" (actual: 895, maximum..._row rejected due to oracle
文章浏览阅读918次。目前很多Web的项目在部署的时候会采用Nginx做为前端的反向代理服务器,后端会部署很多业务处理服务器,通常情况下Nginx代理服务器部署的还是比较少,而且其以高效性能著称,几万的并发连接处理速度都不在话下。然而去年的时候,我们的线上系统也采用类似的部署结构,同时由于我们的业务需求,Nginx的部署环境在虚拟机上面,复用了其他虚拟机的整体磁盘,在高IO消耗的场景中,我们发现Nginx的磁盘_nginx tcp转发 硬盘io
文章浏览阅读645次。Activiti 开发环境的搭建非常简单,主要分为 Activiti runtime 的安装以及 Eclipse 开发环境的配置。本文以 Windows 平台为例介绍 Activiti 5.8 版的开发环境的搭建配置过程。Activiti 的运行时程序可以从http://www.activiti.org/download.html 下载,目前最新版本为 5.8。为了配置使用 Activ_antdev activity
文章浏览阅读2.3k次。1. Vuex 是什么?Vuex 是专门为Vue 组件化思想带来的组件间通信问题提供的解决方案,主要解决以下两个问题:多个视图依赖于同一状态 来自不同视图的行为需要变更同一状态2. 核心概念State: 可以简单理解为Vue 维持的全局变量(状态)。 Getter: 获取State 中的状态的方法,可以在取出前对数据进行二次处理。 Mutation: 是改变State 中的状态..._vuex的组件同级通信
文章浏览阅读8.4k次,点赞31次,收藏33次。逆向中常常出现一些加密算法,如果我们能对这些加密算法进行快速识别则会大大减少我们逆向的难度,虽然IDA已有密码分析神器Findcrypt,但掌握手动分析方法能帮助我们应对更多的情况。这篇文章将介绍逆向中常见的单项散列算法和对称加密算法的识别方法。0xFF. 前言在很长一段时间里我经常发现自己面对复杂的加密算法无从下手,可能是因为还没有系统学过密码学吧orz,总之这个问题困扰了我很久。于是最近我花了一些时间来解决自己在密码学这块的薄弱点,写下这篇文章的目的之一也是为了巩固所学知识。加密算法的部分没有_findcrypt3 支持哪些算法
文章浏览阅读5.3k次。smplayerThere are lots of video players out there, but one that we think gets overlooked is SMPlayer. It can do anything other video players can do and even more – like remembering where you left off ..._sm69影视