目录
默认行为(
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
的一部分。