Rasa平台可交互聊天机器人调用action.py无输出排查求助
解决Rasa机器人数据库查询无输出的问题
咱们一步步排查你的问题——基础功能正常但数据库相关请求没反应,大概率是配置或意图关联环节出了问题,结合你给出的代码,我整理了几个关键修复点:
1. 必须在domain.yml中注册自定义意图
你的domain.yml里的intents列表只包含了agent.acquaintance和agent.age,但你定义的pf.uan.number意图完全没被添加进去。Rasa要求所有用到的意图都必须在domain中声明,否则机器人无法正确关联意图和对应的动作。
另外你原来的intents写法还缺了列表符号-,这也是语法错误!修改后的domain.yml的intents部分应该是:
intents: - agent.acquaintance - agent.age - pf.uan.number
2. 修正Stories的格式规范
你的Stories.md里的Story 87格式有两处小问题:故事名称需要用##开头,而且动作行必须缩进(2个空格或1个制表符)。修正后:
## Story 87 * pf.uan.number - action_db
建议其他故事比如story 02也统一用##开头,保持格式一致,避免Rasa解析时出问题。
3. 给Action增加异常处理(防患于未然)
虽然你说终端没报错,但还是建议给数据库操作加上异常捕获,避免因为数据库连接失败、查询结果为空等隐性问题导致无输出。修改后的action.py如下:
from __future__ import absolute_import from __future__ import division from __future__ import unicode_literals from rasa_core_sdk import Action import pymysql class ActionDb(Action): def name(self): return 'action_db' def run(self, dispatcher, tracker, domain): print("Hello1111") try: db = pymysql.connect("xyz.net","admin","abcdefg","dbname") cursor = db.cursor() str1='PF_UAN_Number' # 用参数化查询避免SQL注入,更安全 query = "SELECT COL_2 FROM csv_db1.TABLE_2 WHERE COL_1 = %s" cursor.execute(query, (str1,)) data = cursor.fetchone() print(data) if data: dispatcher.utter_message(data[0]) else: dispatcher.utter_message("抱歉,我暂时找不到这个信息。") db.close() # 记得关闭数据库连接,避免资源泄漏 except Exception as e: print(f"数据库操作出错: {e}") dispatcher.utter_message("查询过程中出现了一点小问题,请稍后再试。") return []
这里做了几个实用优化:
- 捕获所有异常,终端会打印错误信息,同时给用户友好反馈
- 用参数化查询替代字符串拼接,避免SQL注入风险
- 处理查询结果为空的情况,不会因为
data[0]报错 - 主动关闭数据库连接,避免资源浪费
4. 重新训练模型并测试
完成以上修改后,需要重新训练Rasa的NLU和Core模型:
rasa train nlu rasa train core
然后分别启动动作服务器和机器人:
# 第一个终端启动动作服务 rasa run actions # 第二个终端启动机器人测试 rasa shell
现在再测试“什么是PF UAN编号?”,应该就能看到预期的输出了。
内容的提问来源于stack exchange,提问作者sheel
相关产品推荐
相关产品推荐

