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

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

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

Rasa 官网


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

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 user
    conversation_start: true  # this rule only applies at the beginning of a conversation
    steps:
      - 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:
  - plant

slots:
  plant:
    type: text
    influence_conversation: false
    mappings:
    - type: from_entity
      entity: plant

5. Add a Rule

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

rules:
  - rule: warn about dry plant
    steps:
    - 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响应:

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

Reminders

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

Scheduling Reminders

1. Define a Reminder

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

actions.py

import datetime
from rasa_sdk.events import ReminderScheduled
from rasa_sdk import Action

class 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 reminder
  steps:
  - intent: ask_remind_call
    entities:
    - PERSON
  - action: action_schedule_reminder

3. Add Training Data

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

nlu:
- intent: ask_remind_call
  examples: |
    - 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: SpacyNLP
  model: "en_core_web_md"
- name: SpacyEntityExtractor
  dimensions: ["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 reminders
        return [ReminderCancelled()]

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

2. Add a Rule

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

rules:
- rule: Cancel a reminder
  steps:
  - intent: ask_forget_reminders
  - action: action_forget_reminders

3. Add Training Data

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

nlu:
- intent: ask_forget_reminders
  examples: |
    - 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链接

Rasa系列博客:

Read more

60个“特征工程”计算函数(Python代码)

60个“特征工程”计算函数(Python代码)

转自:coggle数据科学 近期一些朋友询问我关于如何做特征工程的问题,有没有什么适合初学者的有效操作。 特征工程的问题往往需要具体问题具体分析,当然也有一些暴力的策略,可以在竞赛初赛前期可以带来较大提升,而很多竞赛往往依赖这些信息就可以拿到非常好的效果,剩余的则需要结合业务逻辑以及很多其他的技巧,此处我们将平时用得最多的聚合操作罗列在下方。 最近刚好看到一篇文章汇总了非常多的聚合函数,就摘录在下方,供许多初入竞赛的朋友参考。 聚合特征汇总 pandas自带的聚合函数 * 其它重要聚合函数 其它重要聚合函数&分类分别如下。 def median(x):     return np.median(x) def variation_coefficient(x):     mean = np.mean(x)     if mean != 0:         return np.std(x) / mean     else:         return np.nan def variance(x):     return

By Ne0inhk
90w,确实可以封神了!

90w,确实可以封神了!

要说24年一定最热的技术,还得是AIGC! 前段时间阿里旗下的开源项目,登上GitHub热榜! AI大热,如今ChatGPT的优异表现,必然会出现各种细分场景应用的工具软件,和大量岗位项目! 山雨欲来风满楼,强人工智能的出现,所有科技公司已经开始巨量扩招此领域的人才。算法的岗位,近三个月已经增长68%!这件事在HR届也是相当震撼的。 目前各行各业都不景气的市场,人工智能岗位却一直保持常青!甚至同属AI边缘岗都比其他岗薪资高40%! 与此同时,AI算法岗上岸也不简单,竞争激烈,好公司核心岗位不用说,谁都想去。 所以事实就是,想要上岸,门槛也逐渐变高,项目经历、实习经历都很重要,越早明白这个道理就越能提前建立起自己的优势。 但我在b站逛知识区的时候,经常看到有些同学,因为一些客观原因导致无法参加实习,这种情况下,如果你想提升背景,增加项目经历的话,可以试试这个《CV/NLP 算法工程师培养计划》。 目前已经有上千位同学通过该计划拿到offer了,最新一期学员就业薪资最高能拿到78K!年薪94w! 优势就是有BAT大厂讲师带领,手把手带做AI真实企业项目(包含CV、NLP等

By Ne0inhk
再见nohup!试试这个神器,Python Supervisor!

再见nohup!试试这个神器,Python Supervisor!

👇我的小册 45章教程:() ,原价299,限时特价2杯咖啡,满100人涨10元。 作者丨Ais137 https://juejin.cn/post/7354406980784373798 1. 概述 Supervisor 是一个 C/S 架构的进程监控与管理工具,本文主要介绍其基本用法和部分高级特性,用于解决部署持久化进程的稳定性问题。 2. 问题场景 在实际的工作中,往往会有部署持久化进程的需求,比如接口服务进程,又或者是消费者进程等。这类进程通常是作为后台进程持久化运行的。 一般的部署方法是通过 nohup cmd & 命令来部署。但是这种方式有个弊端是在某些情况下无法保证目标进程的稳定性运行,有的时候 nohup 运行的后台任务会因为未知原因中断,从而导致服务或者消费中断,进而影响项目的正常运行。 为了解决上述问题,通过引入 Supervisor 来部署持久化进程,提高系统运行的稳定性。 3. Supervisor 简介 Supervisor is a client/

By Ne0inhk
第一本给程序员看的AI Agent图书上市了!

第一本给程序员看的AI Agent图书上市了!

AI Agent火爆到什么程度? OpenAI创始人奥特曼预测,未来各行各业,每一个人都可以拥有一个AI Agent;比尔·盖茨在2023年层预言:AI Agent将彻底改变人机交互方式,并颠覆整个软件行业;吴恩达教授在AI Ascent 2024演讲中高赞:AI Agent是一个令人兴奋的趋势,所有从事AI开发的人都应该关注。而国内的各科技巨头也纷纷布局AI Agent平台,如:钉钉的AI PaaS、百度智能云千帆大模型平台等等。 Agent 是未来最重要的智能化工具。对于程序员来说,是时候将目光转向大模型的应用开发了,率先抢占AI的下一个风口AI Agent。 小异带来一本新书《大模型应用开发 动手做 AI Agent》,这本书由《GPT图解》的作者黄佳老师创作,从0到1手把手教你做AI Agent。现在下单享受5折特惠! ▼点击下方,即可5折起购书 有这样一本秘籍在手,程序员们这下放心了吧,让我们先来揭开 Agent 的神秘面纱。 AI Agent 面面观

By Ne0inhk