Transformer课程 业务对话机器人Rasa 3.x Reaching Out to the User

Rasa 官网

https://rasa.com/

Reaching Out to the User

有时,您希望助理在没有用户提示的情况下与用户联系。例如,您可能希望助理在用户打开聊天窗口时发送消息,或者如果用户有一段时间没有发送消息,您可能希望提示用户。本页是帮助您的助理主动接触用户的指南。

Reaching out first

在大多数情况下,当用户与助理打开聊天窗口时,您会希望助理发送第一条消息。这样做可以让用户了解机器人可以做什么或不能做什么,并让他们进行更成功的对话。某些消息或语音频道具有现有配置选项,可在用户首次启动对话时向助理发送信息,但您也可以将此选项添加到自己的自定义频道。

一旦您将频道配置为发送有效信息,您将需要指定助理应如何反应和问候用户。您可以为此重复使用现有意图的行为,也可以为此指定新的意图和规则。下面是关于如何指定欢迎规则的指南。

1. Update the configuration

由于您 使用规则,因此需要将RulePolicy添加到配置文件中:
config.yml

policies:# other policies- name: RulePolicy

2. Add a rule

要让助理仅在对话开始时回复意向问候语,请添加以下规则:

rules:- rule: welcome userconversation_start: true  # this rule only applies at the beginning of a conversationsteps:- intent: greet- action: utter_welcome

3. Add a response

在您的域中添加一个对utter_welcome 操作的响应:
domain.yml

responses:utter_welcome:- text: Hi there! What can I help you with today?

External Events

有时,您需要一个外部设备来改变正在进行的对话的进程。例如,如果你在树莓派上安装了一个水分传感器,你可以通过助理在植物需要浇水时通知你。

下面的示例来自reminderbot示例bot,它包括提醒和外部事件。

1. Trigger an Intent

要使来自外部设备的事件更改正在进行的对话的进程,您可以将设备发送到对话的触发意图端点,trigger_intent端点将用户意图(可能带有实体)注入到您的对话中。对于Rasa,就好像您输入了一条消息,该消息根据特定的意图和实体进行了分类。然后,助理将像往常一样预测并执行下一个操作。

例如,以下post请求会将EXTERNAL_dry_plant 和the plant注入id为user123的对话中:

curl -H "Content-Type: application/json" -X POST \-d '{"name": "EXTERNAL_dry_plant", "entities": {"plant": "Orchid"}}' \"http://localhost:5005/conversations/user123/trigger_intent?output_channel=latest"

2. Get the Conversation ID

在实际场景中,您的外部设备将从API或数据库获取会话ID。在干旱植物示例中,您可能有一个植物数据库、给它们浇水的用户以及用户的对话ID。您的Raspberry Pi将直接从数据库获取会话ID。要在本地试用reminderbot示例,您需要手动获取对话ID。有关更多信息,请参阅reminderbot自述。

3. Add NLU Training Data

在干旱植物示例中,您的Raspberry Pi需要向trigger_intent端点发送一条带有intent EXTERNAL_dry_plant的消息。这一意图将保留给Raspberry Pi使用,因此不会有任何NLU训练示例。

domain.yml

intents:- EXTERNAL_dry_plant

注意:您应该使用EXTERNAL_前缀命名来自其他设备的意图,因为这样在处理训练数据时更容易看到哪些意图预期来自外部设备。

4. Update the Domain

要告诉助手哪种植物需要浇水,您可以定义一个实体,并随意图一起发布。为了能够在响应中直接使用实体值,请为plant插槽定义from_entity插槽映射:
domain.yml

entities:- plantslots:plant:type: textinfluence_conversation: falsemappings:- type: from_entityentity: plant

5. Add a Rule

你需要一条规则,告诉你的助理在收到来自树莓派的消息时如何回应。
rules.yml

rules:- rule: warn about dry plantsteps:- intent: EXTERNAL_dry_plant- action: utter_warn_dry

6. Add a Response

您需要为“utter_warn_dry”定义响应文本:
domain.yml

responses:utter_warn_dry:- text: "Your {plant} needs some water!"

响应将使用插槽plant的值来提示需要浇水的特定植物。

要测试干旱植物的通知示例,您需要启动Rasa X或CallbackChannel。

外部事件和提醒在请求-响应通道(如rest 或rasa shell)中不起作用。用于实现提醒或外部事件的助理的自定义连接器应使用CallbackInput通道而不是RestInput通道构建。

有关如何在本地测试的说明,请参阅reminderbot自述。

使用对话ID运行此POST请求以模拟外部事件:

curl -H "Content-Type: application/json" -X POST -d \
'{"name": "EXTERNAL_dry_plant", "entities": {"plant": "Orchid"}}' \
"http://localhost:5005/conversations/user1234/trigger_intent?output_channel=latest"

您应该在您的频道中看到bot响应:

Reminders

您可以让助理在设定的时间后使用提醒与用户联系。下面的示例来自reminderbot示例机器人。您可以克隆它并按照自述文件中的说明试用完整版本。https://github.com/RasaHQ/rasa/tree/main/examples/reminderbot

Scheduling Reminders

1. Define a Reminder

要安排提醒,您需要定义一个自定义操作以返回ReminderScheduled 提醒计划事件。例如,以下自定义操作计划从现在起五秒钟的提醒时间:

actions.py

import datetime
from rasa_sdk.events import ReminderScheduled
from rasa_sdk import Actionclass ActionSetReminder(Action):"""Schedules a reminder, supplied with the last message's entities."""def name(self) -> Text:return "action_set_reminder"async def run(self,dispatcher: CollectingDispatcher,tracker: Tracker,domain: Dict[Text, Any],) -> List[Dict[Text, Any]]:dispatcher.utter_message("I will remind you in 5 seconds.")date = datetime.datetime.now() + datetime.timedelta(seconds=5)entities = tracker.latest_message.get("entities")reminder = ReminderScheduled("EXTERNAL_reminder",trigger_date_time=date,entities=entities,name="my_reminder",kill_on_user_message=False,)return [reminder]

ReminderScheduled事件的第一个参数是提醒的名称,在本例中为EXTERNAL_reminder。提醒名称稍后将用作触发对提醒的反应的意图。使用外部前缀命名 EXTERNAL_提醒名称,以便于查看训练数据中发生的情况。

您可以看到,最后一条消息的实体也会传递给提醒。这允许对提醒作出反应的操作使用来自用户调度消息的实体。

例如,如果你想让你的助理提醒你给朋友打电话,你可以给他发一条类似“提醒我给保罗打电话”的信息。如果将“Paul”提取为个人实体PERSON ,则对提醒作出反应的动作可以使用它来表示“记得给Paul打电话!”

2. Add a Rule

要安排提醒,请添加规则
rules.yml

rules:
- rule: Schedule a remindersteps:- intent: ask_remind_callentities:- PERSON- action: action_schedule_reminder

3. Add Training Data

您应该添加NLU训练示例以安排提醒:
nlu.yml

nlu:
- intent: ask_remind_callexamples: |- remind me to call John- later I have to call Alan- Please, remind me to call Vova- please remind me to call Tanja- I must not forget to call Juste

您还应该将其添加到您的域中
domain.yml

intents:- ask_remind_call

4. Update your Pipeline

通过将SpacyNLP和SpacyEntityExtractor添加到配置中的管道中config.yml,您不需要在训练数据中注释任何名称,因为Spacy有一个PERSON维度:
config.yml

pipeline:
# other components
- name: SpacyNLPmodel: "en_core_web_md"
- name: SpacyEntityExtractordimensions: ["PERSON"]

Reacting to Reminders

1. Define a Reaction

bot在接收到对trigger_intent端点的POST请求后提醒用户。但是,提醒会在一定时间后使用您在提醒计划事件中定义的名称自动将请求发送到正确的对话ID。

要定义对提醒的反应,您只需编写一条规则,告诉bot在收到提醒意图时要采取的操作。

在呼叫提醒示例中,您希望使用要提醒所附带的实体来呼叫特定的人,因此您需要编写一个自定义操作来实现此目的:
actions.py

class ActionReactToReminder(Action):"""Reminds the user to call someone."""def name(self) -> Text:return "action_react_to_reminder"async def run(self,dispatcher: CollectingDispatcher,tracker: Tracker,domain: Dict[Text, Any],) -> List[Dict[Text, Any]]:name = next(tracker.get_slot("PERSON"), "someone")dispatcher.utter_message(f"Remember to call {name}!")return []

2. Add a Rule

要告诉您的机器人在触发提醒时要运行什么操作,请添加规则。

rules.yml

rules:
- rule: Trigger `action_react_to_reminder` for `EXTERNAL_reminder`steps:- intent: EXTERNAL_reminder- action: action_react_to_reminder

3. Add Training Data

您需要定义触发对提醒作出反应的意图。您不需要添加任何训练示例,因为意图是为提醒保留的。
domain.yml

intents:
- intent: EXTERNAL_reminder

Cancelling Reminders

1. Define an Action that Cancels a Reminder

若要取消已计划的提醒,需要一个自定义操作,该操作将返回RememberCancelled()事件。
返回ReminderCancelled()将取消当前计划的所有提醒。如果您只想取消某些提醒,可以指定一些参数来缩小计划提醒的范围:

  • ReminderCancelled(intent=“EXTERNAL_greet”) 取消所有带有iEXTERNAL_greet意图的提醒
  • ReminderCancelled(entities={}) 取消具有给定实体的所有提醒
  • ReminderCancelled("…") 取消您在其创建过程中提供的具有给定名称“…”的唯一提醒

对于呼叫提醒示例,您可以定义自定义操作 action_forget_reminders提醒,以取消所有提醒:

actions.py

class ForgetReminders(Action):"""Cancels all reminders."""def name(self) -> Text:return "action_forget_reminders"async def run(self, dispatcher, tracker: Tracker, domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:dispatcher.utter_message(f"Okay, I'll cancel all your reminders.")# Cancel all remindersreturn [ReminderCancelled()]

无论何时关闭Rasa服务器,所有提醒都将被取消

2. Add a Rule

您需要添加取消提醒的规则。
rules.yml

rules:
- rule: Cancel a remindersteps:- intent: ask_forget_reminders- action: action_forget_reminders

3. Add Training Data

您需要定义触发取消提醒的意图
nlu.yml

nlu:
- intent: ask_forget_remindersexamples: |- Forget about the reminder- do not remind me- cancel the reminder- cancel all reminders please

您还应该将其添加到域中domain.yml
domain.yml

intents:
- intent: ask_forget_reminders

要测试提醒,您需要启动Rasa X或CallbackChannel。您还需要启动操作服务来计划、响应和取消提醒。有关详细信息,请参阅reminderbot自述。

然后,如果你向机器人发送一条类似提醒我给Paul Pots打电话这样的消息,你应该在五秒钟后收到一条提醒,上面写着“记住给Paul Pots打电话!”!。

rasa链接
https://rasa.com/docs/rasa/reaching-out-to-user

Rasa系列博客:

  • 业务对话机器人Rasa 3.x Internals及Rasa框架定制实战
  • 业务对话机器人Rasa核心算法DIET及TED论文详解
  • 业务对话机器人Rasa 3.x部署安装初体验
  • 业务对话机器人Rasa 3.x Playground
  • 业务对话机器人Rasa 3.x Command Line Interface
  • 业务对话机器人Rasa 3.x 命令 rasa shell 及rasa run
  • 业务对话机器人Rasa 3.x 命令rasa run actions、rasa test、rasa data split 、rasa data convert nlu
  • 业务对话机器人Rasa 3.x 命令rasa data migrate、rasa data validate、rasa export、rasa evaluate markers、rasa x
  • 业务对话机器人Rasa 3.x 会话驱动开发(Conversation-Driven Development)
  • 业务对话机器人Rasa 3.x 生成自然语言理解NLU数据
  • 业务对话机器人Rasa 3.x 写入会话数据(Writing Conversation Data)
  • 业务对话机器人Rasa 3.x 聊天和FAQs常见问题解答
  • 业务对话机器人Rasa 3.x docker安装部署
  • 业务对话机器人Rasa 3.x Handling Business Logic
  • 业务对话机器人Rasa 3.x Fallback and Human Handoff
  • 业务对话机器人Rasa 3.x Handling Unexpected Input
  • 业务对话机器人Rasa 3.x Contextual Conversations

Transformer课程 业务对话机器人Rasa 3.x Reaching Out to the User相关推荐

  1. Transformer课程 业务对话机器人Rasa 3.x 运行命令学习

    Rasa是创造卓越客户体验的重要平台,有了Rasa,所有团队都可以大规模地与客户创建个性化.自动化的交互.Rasa提供了构建最佳助理所需的基础设施和工具,这些助理有意义地改变了客户与企业的沟通方式. ...

  2. Transformer课程 业务对话机器人Rasa 3.x Fallback and Human Handoff

    Transformer课程 业务对话机器人Rasa 3.x Fallback and Human Handoff Rasa 官网 https://rasa.com/blog/ Fallback and ...

  3. Transformer课程 业务对话机器人Rasa 3.x Domain

    Transformer课程 业务对话机器人Rasa 3.x Domain 域定义了助手操作的范围.它指定了机器人应该知道的意图.实体.插槽.响应.表单和操作.它还定义了对话会话的配置. 下面是一个完整 ...

  4. Transformer课程 业务对话机器人Rasa 3.x Playground

    Transformer课程 业务对话机器人Rasa 3.x Playground 打造你的助理 在本指南中,我们将创建一个助理,帮助用户订阅时事通讯.请完成以下每个步骤,了解如何创建简单助理: 1. ...

  5. Transformer课程 业务对话机器人Rasa 3.x NLU Training Data

    Transformer课程 业务对话机器人Rasa 3.x NLU Training Data NLU Training Data NLU训练数据存储有关用户消息的结构化信息. 自然语言理解(NLU) ...

  6. Transformer课程 业务对话机器人Rasa 3.x Tuning Your NLU Model

    Transformer课程 业务对话机器人Rasa 3.x Tuning Your NLU Model Connecting to Messaging and Voice Channels Rasa开 ...

  7. Transformer课程 业务对话机器人Rasa 3.x Rules

    Transformer课程 业务对话机器人Rasa 3.x Rules 规则是一种训练数据,用于训练助手的对话管理模式.规则描述应始终遵循相同路径的简短对话. 不要过度使用规则.规则对于处理小的特定对 ...

  8. Transformer课程 业务对话机器人Rasa 3.x 会话驱动开发(Conversation-Driven Development)

    Transformer课程 业务对话机器人Rasa 3.x 会话驱动开发(Conversation-Driven Development) Rasa 官网 https://rasa.com/ Conv ...

  9. Transformer课程 业务对话机器人Rasa 3.x Tuning Your NLU Model(二)

    Transformer课程 业务对话机器人Rasa 3.x Tuning Your NLU Model(二) Rasa 官网 https://rasa.com/ Choosing the Right ...

  10. Transformer课程 业务对话机器人 Python使用高级的生成器方法

    Transformer课程 业务对话机器人 Python使用高级的生成器方法 您是否曾经使用过非常大的数据集,导致机器的内存溢出?或者,您可能有一个复杂的函数,每次调用它时都需要维护一个内部状态,但该 ...

最新文章

  1. Java的Redis连接池代码性能不错
  2. html固定中心,css 两边固定中间自适应布局的实现
  3. 手写简版spring --8--Aware感知容器对象Aware感知容器对象
  4. [转载]Spring配置文件详解一:
  5. Java SimpleTimeZone toString()方法与示例
  6. 2017年3月16日
  7. 【python】 合并列表的方法
  8. 使用D9的SetFVF无法控制数据字段在内存中的顺序,所有字段的顺序都是固定的。自能选择好用还是不用。...
  9. 云HBase内核解析
  10. Spring Batch 4.2.0.M1 发布,批处理应用编写框架
  11. SAP FICO模块
  12. 解决gdb报错:Failed to import the site module,No module named '_sysconfigdata_m'
  13. 精选JAVA毕业设计83套——源码+论文完整资源
  14. 电力自动化系统为何需要卫星同步时钟装置?
  15. 用泰勒展开式计算sin(x)的值
  16. 惠普无线鼠标没有反应
  17. HDU 6441 Find Integer(数论)
  18. HTML5在线播放本地视频(IE9以上的浏览器)
  19. 纳米孔测序仪市场现状研究分析与发展前景预测报告
  20. 数值积分公式及龙贝格(Romberg)算法实现matlab

热门文章

  1. 我的理想计算机系100字,我的理想作文100字(通用12篇)
  2. matlab绘制图形hold on_matlab中hold on是什么意思
  3. 畅想未来计算机300字,畅想未来作文300字5篇
  4. uni app修改android原生,iOS原生返回图标
  5. BAT布局SDN!Barefoot获阿里巴巴和腾讯2400万美元投资
  6. 用easyx图形库做一个简单的c++小游戏---迷宫游戏
  7. 机器人辅助符文天赋符文天赋_机器人符文天赋
  8. 二清,是“担保支付”,还是“雁过拔毛”
  9. Web之一只jio碰到门了
  10. 微信小程相对图片路径_微信小程序中图片绝对定位(背景图片)的方法