Rasa教程系列-Core-4-Actions

Actions(操作)是机器人对用户输入的响应,在Rasa有四种actions:
(1)Utterance actions: 以utter_为前缀并向用户发送特定信息
(2)Retrieval actions: 以respond_为前缀,所发送的信息来自于 retrieval model
(3)Custom actions: 运行任意代码并发送任意数量的消息 (or none)
(4)Default actions: 如action_listen, action_restart, action_default_fallback

文章目录

  • Utterance Actions
  • Retrieval Actions
  • Custom Actions
    • Custom Actions Written in Python
  • Execute Actions in Other Code
  • Proactively Reaching Out to the User Using Actions
  • Default Actions

Utterance Actions

定义utterance action(ActionUtterTemplate),可以向domain文件中添加以utter_为前缀的utterance template,如下:

templates:
  utter_my_message:
    - "this is what I want my action to say!"

utterance action 的名称通常以utter_为前缀。如果缺少这个前缀,仍然可以在自定义action中使用该模板,但是模板不能被直接预测为它自己的操作。更多细节见Responses。

如果使用外部 NLG service,则不需要在domain中指定模板,但是仍然需要将utterance names添加到domain的 actions 列表中。

Retrieval Actions

检索操作使得处理大量类似的意图(如聊天和常见问题FAQs)变得更容易。更多信息参见检索操作。

Custom Actions

一个action 可以运行任何你想要的代码。自定义action 可以打开灯,将事件添加到日历中,检查用户的银行余额,或者可以想象的任何其他事情。
当预测自定义action时,Rasa将调用预先指定的endpoint 。这个endpoint 是一个webserver,能够响应这个调用,运行代码并可选地返回修改对话状态的信息。
endpoints.yml中指定action server如下:

action_endpoint:
  url: "http://localhost:5055/webhook"

endpoints.yml的传递方式是用--endpoints参数来指定的,即在脚本后跟上--endpoints endpoints.yml

虽然可以用node.js, .NET, java等其他语言创建action server,但是官方提供了一个小型的python SDK,这使开发变得更加容易。

注意:
Rasa使用票证锁定(ticket lock)机制来确保来自相同会话ID的传入消息不会相互干扰,并按正确的顺序进行处理。如果希望自定义 action 的运行时间超过60秒,请将TICKET_LOCK_LIFETIME环境变量设置为你自己的期望值。

Custom Actions Written in Python

对于用python编写的 actions,官方提供了一个方便的Rasa SDK,它可以启动 action server。

Execute Actions in Other Code

Rasa将向你的服务器发送一个HTTP POST请求,其中包含要运行哪个action。此外,此请求将包含关于对话的所有信息。Action Server展示了详细的API规范。

作为对来自Rasa的action 调用的响应,我们可以修改tracker,例如通过设置槽位并将响应发送回用户。所有修改都是使用events事件完成的。事件中有所有可能的事件类型的列表参考这里。

Proactively Reaching Out to the User Using Actions

如何使用动作主动接触用户?当希望主动接触用户,例如显示长时间运行的后台操作的输出或将外部事件通知用户。
为此,可以POST 到此endpoint,在请求体中为特定用户指定需要运行的action。使用output_channel查询参数指定应该使用哪个输出通道将助理的响应返回给用户。如果消息是静态的,则可以在domain文件中使用相应的模板定义一个utter_ action。如果需要更多控制,可以在domain中添加自定义action,并在action server中实现所需的步骤。在自定义 action 中分发的任何消息都将被转发到指定的输出通道。

主动接触用户取决于通道的能力,因此并非每个通道都支持。如果有些通道不支持,可以考虑使用CallbackInput通道向webhook发送消息。

注意:
在对话中运行一个 action 会改变对话历史并影响助手的下一次预测。如果不希望发生这种情况,请确保action通过将一个ActionReverted事件附加到对话 tracker 的末尾来恢复自身。

Default Actions

默认的actions如下列表:

默认 action 介绍
action_listen 停止预测更多action,等待用户输入
action_restart 重置整个对话。如果映射策略包含在策略配置中,则可以通过输入/restart在对话期间触发。
action_session_start 开始一个新的对话会话。占据所有设置的槽位,标记新对话会话的开始,并重新应用现有的SlotSet事件。domain中Session configuration 中的session_expiration_time参数定义的不活动时长,超过之后自动触发该action。可以通过输入/session_start在对话期间手动触发。所有的对话都以action_session_start开始。
action_default_fallback 撤消最后一条用户消息(就好像用户没有发送它,机器人也没有反应一样),并发出一条机器人不理解的消息。具体看回退操作。
action_deactivate_form 解除激活形态并重置请求的槽位。也可以参见处理不愉快的路径。
action_revert_fallback_events 恢复TwoStageFallbackPolicy期间发生的事件。参看回退操作。
action_default_ask_affirmation 请用户确认他们的意图。建议使用自定义action 覆盖此默认操作,以获得更有意义的提示。
action_default_ask_rephrase 要求用户重新表述他们的意图。
action_back 撤消最后一条用户消息(就好像用户没有发送它,机器人也没有反应一样)。如果策略配置中包含映射策略,则可以通过输入/back在对话期间触发。

所有默认action都可以覆盖。为此,请将 action 名称添加到domain中的 actions 列表中:

actions:
- action_default_ask_affirmation

然后,Rasa将调用你的action endpoint,并将其视为所有其他自定义action。

你可能感兴趣的:(Rasa)