Rasa机器人action_default_fallback未识别问题求助
Rasa回退动作无法识别问题排查方案
一、代码语法与缩进错误(核心原因)
你提供的actions.py存在多处语法问题,会导致动作类无法被正确加载:
- 缩进混乱:
run方法内的代码块(如user_message、url、headers等)缩进不一致,Python对缩进严格要求,必须统一用4个空格缩进。 - 字符串未闭合:错误处理部分的
return "Sorry, I couldn't generate a response at the moment.缺少闭合双引号,触发语法错误。 - 依赖未导入:代码使用了
requests但未导入,需在文件顶部添加import requests,同时确保已安装依赖(执行pip install requests)。 - 返回值不符合要求:动作的
run方法必须返回List[Dict[Text, Any]]类型,原代码错误返回字符串。
修正后的actions.py示例:
from typing import Text, Dict, Any, List from rasa_sdk import Action, Tracker from rasa_sdk.executor import CollectingDispatcher import requests class ActionDefaultFallback(Action): def name(self) -> Text: return "action_default_fallback" def run( self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any], ) -> List[Dict[Text, Any]]: # 获取用户最新消息 user_message = tracker.latest_message.get('text') url = 'https://api.openai.com/v1/chat/completions' headers = { 'Authorization': 'Bearer sk-xxxxxxxxxxxxxxxxxxxxxxXD', 'Content-Type': 'application/json' } data = { 'model': "gpt-3.5-turbo", 'messages': [{'role': 'user', 'content': user_message}], 'max_tokens': 100 } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: ai_response = response.json()['choices'][0]['message']['content'] dispatcher.utter_message(ai_response) else: dispatcher.utter_message(text="Sorry, I couldn't generate a response at the moment.") return []
二、确认domains.yml的动作注册
确保domains.yml的actions列表中正确包含该动作,格式如下:
actions: - action_default_fallback # 其他自定义动作...
三、正确启动动作服务器
自定义动作需要单独运行动作服务器,不能仅启动Rasa核心服务:
- 执行命令启动动作服务:
rasa run actions
- 同时启动Rasa主服务:
rasa run --enable-api
四、验证Config.yml配置
你的config.yml中回退相关配置是正确的,可再次确认:
FallbackClassifier的阈值设置合理,确保能触发回退RulePolicy的core_fallback_action_name与动作类返回的名称完全一致(注意大小写和引号)
内容的提问来源于stack exchange,提问作者karan
相关产品推荐
相关产品推荐

