对话机器人 Rasa(四十):一则 FollowUpAction 引起的随机返回问题

更新日期: 2025-05-21 阅读次数: 245 字数: 461 分类: AI

问题现象

在 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).+$

查看合集

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

微信关注我哦 👍

大象工具微信公众号

我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式