You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rasa 1.X中正确使用UserUttered事件?——Rasa 1.5.3自动纠错场景回退动作报错问题

解决Rasa 1.5.3中UserUttered事件在默认回退动作里的使用问题

你遇到的问题核心是动作返回值格式不符合Rasa SDK要求,我来帮你拆解问题并给出落地的修正方案:

直接报错原因:返回单个事件而非事件列表

你的run方法直接返回了UserUttered对象,但Rasa SDK明确要求动作的run方法必须返回事件的列表(list),单个事件会导致Core处理器无法正确处理,从而抛出你看到的错误。

修正后的完整代码示例

下面是调整后的代码,不仅修复了返回值问题,还补充了优化对话流程的必要处理:

from rasa_sdk import Action
from rasa_sdk.events import UserUttered, UserUtteranceReverted

class ActionDefaultFallback(Action):
    def name(self):
        return "action_default_fallback"

    def run(self, dispatcher, tracker, domain):
        # 获取用户的原始输入文本
        original_text = tracker.latest_message['text']
        # 调用你的自定义拼写纠正工具
        correct_text = my_custom_spellcheck.correct(original_text)

        # 如果纠正前后文本一致,说明无法修正,直接返回默认提示
        if correct_text == original_text:
            dispatcher.utter_message(text="抱歉,我没太理解你的意思,可以再详细说一下吗?")
            return []

        # 1. 先回退之前无法解析的原始输入,避免它留在对话轨迹中干扰后续流程
        events = [UserUtteranceReverted()]
        # 2. 添加纠正后的用户输入事件,让Rasa自动重新运行NLU流水线解析
        events.append(UserUttered(text=correct_text, parse_data=None))
        
        # 给用户一个反馈,告知已修正输入
        dispatcher.utter_message(text=f"我猜你想说的是:{correct_text}?")
        
        return events

几个关键细节说明

  • 必须返回事件列表:所有要触发的对话事件都要放在列表里返回,这是Rasa SDK的硬性要求,也是解决你当前报错的核心。
  • 回退原始输入:使用UserUtteranceReverted可以把之前无法解析的用户输入从对话轨迹中移除,避免错误的输入记录影响后续的意图识别和对话状态。
  • 自动触发NLU重解析:给UserUttered设置parse_data=None,Rasa会自动对纠正后的文本重新运行NLU流水线,生成对应的意图和实体解析结果,这样后续的对话流程就能正确响应了。
  • 用户反馈:添加提示消息告知用户输入已修正,能提升对话的透明度和用户体验。

另外,还要确保你的动作服务器正常运行,并且Rasa Core的配置文件中正确配置了action_endpoint,这样动作返回的事件才能被Core正确接收和处理。

内容的提问来源于stack exchange,提问作者gfyhser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 05:27:46