目录
默认行为(
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将启动新的对话会话,并在以下情况下执行:
- 在每次新谈话开始时
- 用户在
domain的session 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
此action由action_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的一部分。
本文详细介绍了Rasa中的各种默认Action,如监听、重启、会话开始,以及如何通过自定义Action进行个性化定制。重点讲解了如何覆盖action_session_start的行为,以及如何在会话中处理用户请求和数据传递。
1313

被折叠的 条评论
为什么被折叠?



