RaSa2.5.x行为之五:默认行为(Default Actions)


默认行为( Default Actions)是默认情况下内置到对话管理器中的行为。其中大多数都是根据特定的会话情况自动预测的。您可能需要自定义这些来个性化您的助手。
这些 Actions中的每一个都有一个默认行为,在下面进行了描述。要覆盖此默认行为,请编写一个 custom action,其 name()方法返回与默认 action相同的名称:

class ActionRestart(Action):

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

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

      # custom behavior

      return [...]

将此action添加到domain文件的action部分,以便助手知道如何使用自定义定义而不是默认定义:

actions:
  - action_restart

警告
将此操作添加到domain文件后,使用rasa train--force重新训练模型。否则Rasa不知道你改变了什么,可能会跳过重新训练你的对话模式。

action_listen

预计此action将发出信号,表示助手不应执行任何操作,并等待下一个用户输入。

action_restart

action重置整个会话历史记录,包括在对话过程中设置的任何插槽。
如果模型配置中包含RulePolicy,则会话中的用户可以通过发送“/restart”消息来触发它。如果您在域中定义了一个utter_restart响应,它也会发送给用户。

action_session_start

action将启动新的对话会话,并在以下情况下执行:

  • 在每次新谈话开始时
  • 用户在domainsession configuration中,通过session_expiration_time参数定义的时间段内处于非活动状态后
  • 当用户在会话期间发送"/session_start"消息时

action将重置会话跟踪器,但默认情况下不会清除任何已设置的插槽。

自定义(Customization)

会话启动操作(session start action)的默认行为是获取所有现有插槽,并将它们转移到下一个会话中。假设您不想携带所有插槽,而只携带用户名和他们的电话号码。要做到这一点,您需要使用如下所示的自定义操作覆盖action_session_start

from typing import Any, Text, Dict, List
from rasa_sdk import Action, Tracker
from rasa_sdk.events import SlotSet, SessionStarted, ActionExecuted, EventType

class ActionSessionStart(Action):
    def name(self) -> Text:
        return "action_session_start"

    @staticmethod
    def fetch_slots(tracker: Tracker) -> List[EventType]:
        """Collect slots that contain the user's name and phone number."""

        slots = []
        for key in ("name", "phone_number"):
            value = tracker.get_slot(key)
            if value is not None:
                slots.append(SlotSet(key=key, value=value))
        return slots

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

        # the session should begin with a `session_started` event
        events = [SessionStarted()]

        # any slots that should be carried over should come after the
        # `session_started` event
        events.extend(self.fetch_slots(tracker))

        # an `action_listen` should be added at the end as a user message follows
        events.append(ActionExecuted("action_listen"))

        return events

如果要访问与触发会话启动的用户消息一起发送的元数据,可以访问特殊槽session_started_metadata

from typing import Any, Text, Dict, List
from rasa_sdk import Action, Tracker
from rasa_sdk.events import SessionStarted, ActionExecuted


class ActionSessionStart(Action):
    def name(self) -> Text:
        return "action_session_start"

    async def run(
      self, dispatcher, tracker: Tracker, domain: Dict[Text, Any]
    ) -> List[Dict[Text, Any]]:
        metadata = tracker.get_slot("session_started_metadata")

        # Do something with the metadata
        print(metadata)

        # the session should begin with a `session_started` event and an `action_listen`
        # as a user message follows
        return [SessionStarted(), ActionExecuted("action_listen")]

action_default_fallback

action撤消上一次user-bot交互,并发送utter_default响应(如果已定义)。如果启用了回退机制,则由低动作预测置信度触发。

action_deactivate_loop

此操作将停用活动循环并重置请求的插槽。在handling unhappy paths in forms时使用。

action_revert_fallback_events

弃用

action_two_stage_fallback

这是一个回退循环,可用于处理低NLU置信度。阅读更多关于handling low NLU confidence

action_default_ask_affirmation

actionaction_two_stage_fallback循环使用。它要求用户确认其消息的意图。此操作可以定制为更个性化,以适应您的特定用例。

action_default_ask_rephrase

如果用户拒绝显示action_default_ask_affirmation的意图,action_two_stage_fallback循环将使用此操作。它要求用户重新表述他们的消息。

action_back

action撤消上一次user-bot交互。如果配置了RulePolicy,用户可以通过向助手发送“/back”消息来触发它。

Form Action

默认情况下,Rasa使用FormAction来处理任何form logic。您可以通过向domain中添加具有form名称的自定义操作,用自定义操作覆盖此默认操作。重写form的默认操作只能在从Rasa开源1迁移到2的过程中使用。在这种情况下,您可以重写默认操作,以指示Rasa使用,不推荐使用的FormAction,它是Rasa SDK的一部分。

参考

  1. 官方文档
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值