对话机器人 Rasa(二十三):重置 slot 的值

文章目录

    需求

    在每次 rasa form 获取用户输入之后,将这个过程中用到的 slot 值重置。
    即,置为 None。

    防止下次进入同一个 form 时,slot 非空的情况导致未提示用户输入就进入之后的流程。

    slot 重置

    custom action 中,return 列表中加入 SlotSet 即可。例如:

    在获取用户名之后,将用户名重置:

    return [
    	SlotSet("name", None),
    ]
    

    错误的做法

    SlotSet("name", None),
    
    return [
    ]
    

    这样,并不会生效。

    custom action 中 return SlotSet 和不 return,有什么区别

    在 Rasa 的自定义动作(custom action)中,使用 return SlotSet(...) 将会设置一个或多个 slot 的值,并将其返回给 Rasa 对话引擎。而不返回 SlotSet 对象,则不会更新或设置任何 slot 的值。

    区别在于返回 SlotSet 对象时,Rasa 会将更新后的 slot 值应用于当前对话的跟踪器(Tracker),并将其存储在后续对话中使用。这样,Rasa 将了解到该 slot 的最新值,并可以在后续的对话中使用它来进行条件判断、回答用户问题等。

    注意

    细心会发现这里设置 slot 为 None,并没有同步体现在 story 或 rule 中。实际测试确实没有问题。

    但是,一定要注意:

    slot,action 凡是在 custom action 中 return 的,在 story 中都需要准确写出,否则会导致 slot 值设置失败,一直为 None。

    除非是 slot 为 None 的情况,不需要在 story 中体现。但是为了逻辑清晰,还是加上比较好。

    查看合集

    📖 对话机器人 Rasa 中文系列教程

    参考

    • https://forum.rasa.com/t/reset-slot-after-the-forms-complete/35355/7
    • https://forum.rasa.com/t/reset-slots/49918/10

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式