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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:09:18