需求
在每次 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 中体现。但是为了逻辑清晰,还是加上比较好。
查看合集
参考
- https://forum.rasa.com/t/reset-slot-after-the-forms-complete/35355/7
- https://forum.rasa.com/t/reset-slots/49918/10
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式