行为(Actions)
Action
类是任何自定义行为的基类。要定义自定义行为,请创建action
类的子类,并覆盖两个必需的方法name
和run
。当行为服务器收到运行操作的请求时,它将根据其name
方法的返回值调用操作。
自定义行为框架如下所示:
class MyCustomAction(Action):
def name(self) -> Text:
return "action_name"
async def run(
self, dispatcher, tracker: Tracker, domain: Dict[Text, Any],
) -> List[Dict[Text, Any]]:
return []
方法(Methods)
Action.name
定义行为的名称。此方法返回的名称是bot的domain
中使用的名称。
- Returns:
Name of action - Return type:
str
Action.run
async Action.run(dispatcher, tracker, domain)
run
方法执行action
的side effects。
参数(Parameters)
- dispatcher:用于将消息发送回用户的调度器。使用
dispatcher.utter_message()
或任何其他rasa_sdk.executor.CollectingDispatcher
方法。请参阅调度器的文档 - tracker:当前用户的状态跟踪程序。您可以使用
tracker.get_slot(slot_name)
访问插槽值,最新的用户消息是tracker.latest_message.text
和任何其他rasa_sdk.Tracker
属性。请参阅跟踪器的文档。 - domain:机器人的
domain
Returns
rasa_sdk.events.Event
实例的列表。请参阅events文档。
Return type
List[Dict[str, Any]]
Example
在一个餐馆机器人中,如果用户说“给我找一个墨西哥餐馆”,你的机器人就可以执行ActionCheckRestaurants
的操作,它可能是这样的:
from typing import Text, Dict, Any, List
from rasa_sdk import Action
from rasa_sdk.events import SlotSet
class ActionCheckRestaurants(Action):
def name(self) -> Text:
return "action_check_restaurants"
def run(self,
dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
cuisine = tracker.get_slot('cuisine')
q = "select * from restaurants where cuisine='{0}' limit 1".format(cuisine)
result = db.query(q)
return [SlotSet("matches", result if result is not None else [])]
此操作查询数据库以查找与请求的菜肴匹配的餐厅,并使用找到的餐厅列表设置matches
槽的值。
Tracker
Tracker
类表示一个Rasa会话跟踪器。它允许您在自定义操作中访问bot的内存。您可以通过Tracker
属性和方法获取有关过去事件和当前会话状态的信息。
Attributes
以下是Tracker
对象的属性:
sender_id
- 与机器人对话的人的唯一ID。slots
- 可按“ref”域中的定义填充的插槽列表。latest_message
- 包含最新消息属性的字典:意图、实体和文本。events
- 所有先前事件的列表。active_loop
- 当前活动循环的名称。latest_action_name
- bot执行的最后一个操作的名称。
Methods
Tracker
中可用的方法有:
Tracker.current_state
将当前跟踪器状态作为对象返回。
- Return type
Dict[str, Any]
Tracker.is_paused
说明跟踪器当前是否暂停。
- Return type
bool
Tracker.get_latest_entity_values
获取在最新消息中为传递的实体类型以及可选角色和组找到的实体值。如果您只对给定类型的第一个实体感兴趣,请使用:
next(tracker.get_latest_entity_values(“my_entity_name”), None)
如果找不到实体,则默认结果为None
。
- Parameters
entity_type
– 实体类型entity_role
– 可选择实体角色entity_group
– 可选实体组
- Returns
实体值列表。 - Return type
Iterator[str]