如果一组固定的槽位无法满足您对表单的需求,我们强烈建议使用所需槽位
功能,该功能允许根据用户在表单中的输入动态更改表单中所需的槽位。 这是一个例子。
用户:我想预订一家中餐厅。
机器人:你想坐在外面吗?
用户:是/否
机器人:你想坐在阴凉处还是阳光下? / 请提供额外的偏好
这是用户和餐厅预订助理之间的对话。 助手要求用户填写seat
槽位。 如果用户回答是
,机器人需要询问详细信息。 但是,如果用户回答否
,机器人将不会收集座位偏好槽。 我们可以通过下面的代码来实现这个对话。
class ValidateRestaurantForm(FormValidationAction):
def name(self) -> Text:
return "validate_restaurant_form"
async def required_slots(
self,
domain_slots: List[Text],
dispatcher: "CollectingDispatcher",
tracker: "Tracker",
domain: "DomainDict",
) -> List[Text]:
additional_slots = ["outdoor_seating"]
if tracker.slots.get("outdoor_seating") is True:
# 如果用户想坐在外面,请询问
# 如果他们想坐在阴凉处或阳光下。
additional_slots.append("shade_or_sun")
return additional_slots + domain_slots
required_slots
函数返回表单需要收集的槽列表。 在聊天机器人请求填充任何槽位之前,rasa 将执行required_slots
函数来确定应收集哪些槽位。 因此,我们可以使用 tracker.get_slot 函数来获取之前填充的槽位,然后返回需要收集的槽位。 请注意,如果您不需要动态更改所需的插槽,则无需触及此功能。 PromptDialog会根据表单图自动生成所需的槽位。
当您单击 Slots
节点,然后选择编辑节点时,该功能可用。 它将显示在右侧面板上。