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

文章目录

    问题现象

    在 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 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式