Rasa SDK编写自定义行为

本文介绍了如何使用Rasa SDK创建自定义行为。行为是Rasa中执行任务的组件,通过覆盖Action.name和Action.run方法实现。Tracker类用于表示会话状态,Dispatcher则用于与用户交互。文中还列举了如SlotSet、ActionExecuted等关键事件类的使用示例。
摘要由CSDN通过智能技术生成

行为(Actions)

Action类是任何自定义行为的基类。要定义自定义行为,请创建action类的子类,并覆盖两个必需的方法namerun。当行为服务器收到运行操作的请求时,它将根据其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]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值