赞
踩
本文继续围绕工业级业务对话平台和框架Rasa 的微服务四大组件进行解析。Rasa基于微服务架构的SDK提供了Actions,Tracker,Dispatcher和Events来帮助对话机器人开发人员实现自定义的actions。
一、Rasa微服务四大组件全解
Action是任何自定义action的父类,为了自定义一个action,需要继承Action并覆写Action中的两个必需的方法:name和run。Rasa action server在接收到执行一个action的request时,会根据name方法返回的值来调用这个action。
自定义action的框架样例如下,name方法返回的值必须是唯一的:
方法name:定义了action的name,它被用于注册微服务。
返回action_name,类型为str
方法run:执行action的业务逻辑。
参数:
-dispatcher:dispatcher用于发送消息给用户,用法为dispatcher.utter_message()或参考CollectingDispatcher相关API说明
-tracker:当前用户的状态跟踪器,你可以使用tracker.get_slot(slot_name)访问slots的值,可以使用tracker.latest_message.text从tracker中获取用户最新消息,以及获取tracker中其它的属性值。
-domain:对话机器人的domain系统配置
返回events列表,类型为List[Dict[str, Any]]
下面是一个具体action实现样例,在run方法里首先从tracker中取得slot “cuisine”的值(在实体提取阶段会从用户输入中提取entity信息并通过全局slot设置机制设置slot “cuisine”的值),然后根据这个条件调用数据库查询所匹配的餐馆列表,并通过SlotSet event把查询结果设为slot “matches”的值:
关于Tracker:
Tracker类用于表示一个Rasa对话状态跟踪器tracker。你可以在自定义action里通过tracker访问对话机器人的对话状态信息,如通过Tracker的属性和方法来获取过去发生的events的信息和当前对话状态的信息。
Attributes:
-sender_id - 与对话机器人交互的用户的唯一ID
-slots - 在domain里定义的可以被填充的slots list
-latest_message - 一个 dictionary,包含了最新用户消息的属性:intent, entities 和text
-events - 所有过去发生的events list
-active_loop - 当前执行的active loop的名称
-latest_action_name - 对话机器人执行的上一个action的名称
Methods:
-current_state:返回当前tracker的状态信息
返回类型:Dict[str, Any]
-is_paused:表示当前tracker是否暂停,即是否对话机器人停止对用户的响应
返回类型:bool
-get_latest_entity_values:从最新用户消息中根据传入的entity type和可选参数role和group获取找到的entity的值,如果你只对一个给定entity type的第一个entity感兴趣,可以使用:
如果没有entity找到,就会返回None。
参数说明:
entity_type – 感兴趣的entity type
entity_role – (可选)感兴趣的entity role
entity_group – 可选)感兴趣的entity group
返回entity的值的list
返回类型:Iterator[str]
-get_latest_input_channel: 获取最新的UserUttered event的输入channel的名称
返回类型:Optional[str]
-events_after_latest_restart:返回最近一次对话重启后发生的events list
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。