问题现象
在 Rasa 某个 action 中,使用了 FollowUpAction 的方式, 但是在执行过程中,出现了多余返回的问题。
我起初以为是类似之前遇到的 对话机器人 Rasa(二十四):两例多返回额外消息的 bug 定位 ,是因为 slot set 导致的,或者 form loop 未标记结束导致的。
但是,经过一段一段代码逐一注释,并插入调试返回之后。发现问题的根源是 FollowUpAction 的使用。
return [
FollowUpAction("action_next_step"),
SetSlot("slot_name", "value"),
]
不推荐使用 FollowUpAction
https://github.com/RasaHQ/rasa-sdk/issues/151
不推荐使用 followup action, 推荐使用 story。
解决方案
将 FollowUpAction 的逻辑,抽象成一个函数,其他地方直接调用这个函数,不使用 followup action 的方式。
对应的原有的 next action, 直接调用这个封装好的函数即可。
TODO
- 清理掉项目中其他地方不必要的 FollowUpAction
调试技巧
在遇到 rasa 中诡异的返回时,可以简化 action 的逻辑,直接返回调试信息。 通过排除法,逐步缩小问题范围。
例如,一个 action 中有多个逻辑分支,可以将每个分支的逻辑逐一注释掉,或者替换为简单的返回语句。 或者,直接在 action 开始就返回调试信息,并 return。
FollowUpAction 是否需要在 story / rule 中注明
我没有找到对应的文档,于是问了 AI,AI 说并不需要,因为这是 action 强制返回的内容。
我觉得也有道理,毕竟,如果 action 都强制返回了 FollowUpAction 了,在 Story 中再注明,是否会引起执行两次都未可知。
VSCode 排查技巧
vscode 中搜索文件内容时,如何使用正则包含 FollowupAction 但是不包含 action_deactivate_loop
^(?=.*FollowupAction)(?!.*action_deactivate_loop).+$
查看合集
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式