猿问

在 rasa 中运行自定义操作时遇到错误

我最近开始研究 rasa。我的聊天机器人很简单。每当用户提出问题时,机器人都会从sqlite3数据库中过滤数据并返回结果。我添加了训练示例,为流程创建了故事,并编写了一个自定义操作来过滤数据库中的数据。对于自定义操作,我指定了一个端点并启动了操作服务器。到目前为止,这是我的代码


动作.py

from typing import Any, Text, Dict, List

from rasa_core_sdk import Action, Tracker

import sqlite3


class TestAction(Action):


    def name(self) -> Text:

        return "action_testAction"


    def run(self, dispatcher, tracker, domain):


        UserId = tracker.get_slot('UserID')

        query = 'SELECT User_name FROM sales WHERE UserID=?'


        conn = sqlite3.connect("test.db")

        cursor = conn.cursor()

        cursor.execute(query, (UserId,))

        name = cursor.fetchall()


        msg = 'Hello {}!'.format(name)

        dispatcher.utter_message(msg)

端点.yml

action_endpoint:

  url: "http://localhost:5055/"

为了运行端点,我在单独的终端窗口中运行了以下代码


python -m rasa_sdk --actions actions

但是当我使用rasa shell --endpoints endpoints.yml基于此链接的命令运行程序时,出现以下错误


rasa.core.processor  - Encountered an exception while running action 'action_testAction'. Bot will continue, but the actions events are lost. Please check the logs of your action server for more information.

这是我的动作端点服务器返回的


127.0.0.1 - - [2019-09-09 11:07:23] "POST / HTTP/1.1" 404 342 0.005443

我不确定,我做错了什么。我检查了代码 actions.py 文件。我似乎没有在那里犯任何错误。


四季花海
浏览 649回答 2
2回答

眼眸繁星

您收到Exception: No registered Action found for name 'action_testAction'.错误的原因是因为您在运行操作服务器时出现第一个异常,即因为:rasa.core.processor  - Encountered an exception while running action 'action_testAction'. Bot will continue, but the actions events are lost. Please check the logs of your action server for more information.尝试debug mode使用调试标志运行操作服务器,以查看代码中的问题所在-vv。rasa run actions -vv(问题可能是因为您可能没有导入 Action 或 sqlite3 或其他任何东西)。希望有帮助。编辑:确保action文件名匹配。运行rasa run actions --actions action -vv产量(chatbot) PS C:\Users\user\Documents\Python\rasa-test> python -m rasa_sdk --actions action -vv2019-09-09 21:02:56 INFO     rasa_sdk.endpoint  - Starting action endpoint server... 2019-09-09 21:02:56 INFO     rasa_sdk.executor  - Registered function for 'action_testAction'.2019-09-09 21:02:56 INFO     rasa_sdk.endpoint  - Action endpoint is up and running. on ('0.0.0.0', 5055)       action.pyimport sqlite3from rasa_sdk import Actionclass TestAction(Action):    def name(self):        return "action_testAction"    def run(self, dispatcher, tracker, domain):        UserId = tracker.get_slot('UserID')        query = 'SELECT User_name FROM sales WHERE UserID=?'        conn = sqlite3.connect("test.db")        cursor = conn.cursor()        cursor.execute(query, (UserId,))        name = cursor.fetchall()        msg = 'Hello {}!'.format(name)        dispatcher.utter_message(msg)

小唯快跑啊

我遇到了这个错误,简单的解决方案是在 actions.py 文件的下面部分中观察错误和代码。class TestAction(Action):    def name(self) -> Text:        return "action_testAction"类的名称是'TestAction','name'函数的返回值是'action_testAction'。所以错误是 - 您在域文件中使用的操作的名称与此类中此“名称”方法返回的名称不匹配。在 NLU 训练数据和域文件中使用此“action_testAction”。
随时随地看视频慕课网APP

相关分类

Python
我要回答