在 rasa 中遇到错误 运行 自定义操作
Encountering error running custom actions in rasa
我最近开始研究 rasa。我的聊天机器人很简单。每当用户提出问题时,机器人都会从 sqlite3
数据库中过滤数据并 return 结果。我添加了训练示例,为流程创建了故事,并编写了一个自定义操作来从数据库中过滤数据。对于自定义操作,我指定了一个端点并启动了操作服务器。到目前为止,这是我的代码
actions.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)
endpoints.yml
action_endpoint:
url: "http://localhost:5055/"
对于 运行 端点,我 运行 在单独的终端中输入以下代码 window
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.
这就是我的操作端点服务器 returned
127.0.0.1 - - [2019-09-09 11:07:23] "POST / HTTP/1.1" 404 342 0.005443
我不确定,我做错了什么。我检查了代码 actions.py 文件。我似乎没有在那里犯任何错误。
[编辑 1]
我在网上查找并发现了这个 tutorial。
在本教程中,端点定义为
action_endpoint:
url: "http://localhost:5055/webhook"
现在我对我的代码进行了同样的尝试。当我 运行 具有更新代码的聊天机器人时,我在 action_server
中得到以下异常
Exception: No registered Action found for name 'action_testAction'.
[编辑 2]
运行在调试模式下启用操作服务器的结果
(base) SASHAANKs-MacBook-Pro:speechbot2 sashaanksekar$ rasa run actions -vv
2019-09-09 19:38:33 INFO rasa_sdk.endpoint - Starting action endpoint server...
2019-09-09 19:38:38 INFO rasa_sdk.endpoint - Action endpoint is up and running. on ('0.0.0.0', 5055)
2019-09-09 19:39:06 DEBUG rasa_sdk.executor - Received request to run 'action_testAction'
2019-09-09 19:39:06 ERROR flask.app - Exception on /webhook [POST]
Traceback (most recent call last):
File "/Users/sashaanksekar/anaconda3/lib/python3.7/site-packages/flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "/Users/sashaanksekar/anaconda3/lib/python3.7/site-packages/flask/app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/sashaanksekar/anaconda3/lib/python3.7/site-packages/flask_cors/extension.py", line 161, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
File "/Users/sashaanksekar/anaconda3/lib/python3.7/site-packages/flask/app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users/sashaanksekar/anaconda3/lib/python3.7/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/Users/sashaanksekar/anaconda3/lib/python3.7/site-packages/flask/app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/sashaanksekar/anaconda3/lib/python3.7/site-packages/flask/app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/sashaanksekar/anaconda3/lib/python3.7/site-packages/flask_cors/decorator.py", line 128, in wrapped_function
resp = make_response(f(*args, **kwargs))
File "/Users/sashaanksekar/anaconda3/lib/python3.7/site-packages/rasa_sdk/endpoint.py", line 59, in webhook
response = executor.run(action_call)
File "/Users/sashaanksekar/anaconda3/lib/python3.7/site-packages/rasa_sdk/executor.py", line 246, in run
"No registered Action found for name '{}'.".format(action_name)
Exception: No registered Action found for name 'action_testAction'.
请帮帮我
您收到 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 或其他任何东西)。
希望对您有所帮助。
编辑:
Make sure that the name of the action
file matches.
运行 rasa run actions --actions action -vv
产量
(chatbot) PS C:\Users\user\Documents\Python\rasa-test> python -m rasa_sdk --actions action -vv
2019-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.py
import sqlite3
from rasa_sdk import Action
class 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"
class 的名称是 'TestAction','name' 函数的 return 值是 'action_testAction'。所以错误是 - 您在域文件中使用的操作名称与此 class 中此 'name' 方法编辑的名称 return 不匹配。在 NLU 训练数据和域文件中使用此 'action_testAction'。
我最近开始研究 rasa。我的聊天机器人很简单。每当用户提出问题时,机器人都会从 sqlite3
数据库中过滤数据并 return 结果。我添加了训练示例,为流程创建了故事,并编写了一个自定义操作来从数据库中过滤数据。对于自定义操作,我指定了一个端点并启动了操作服务器。到目前为止,这是我的代码
actions.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)
endpoints.yml
action_endpoint:
url: "http://localhost:5055/"
对于 运行 端点,我 运行 在单独的终端中输入以下代码 window
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.
这就是我的操作端点服务器 returned
127.0.0.1 - - [2019-09-09 11:07:23] "POST / HTTP/1.1" 404 342 0.005443
我不确定,我做错了什么。我检查了代码 actions.py 文件。我似乎没有在那里犯任何错误。
[编辑 1]
我在网上查找并发现了这个 tutorial。
在本教程中,端点定义为
action_endpoint:
url: "http://localhost:5055/webhook"
现在我对我的代码进行了同样的尝试。当我 运行 具有更新代码的聊天机器人时,我在 action_server
中得到以下异常Exception: No registered Action found for name 'action_testAction'.
[编辑 2]
运行在调试模式下启用操作服务器的结果
(base) SASHAANKs-MacBook-Pro:speechbot2 sashaanksekar$ rasa run actions -vv
2019-09-09 19:38:33 INFO rasa_sdk.endpoint - Starting action endpoint server...
2019-09-09 19:38:38 INFO rasa_sdk.endpoint - Action endpoint is up and running. on ('0.0.0.0', 5055)
2019-09-09 19:39:06 DEBUG rasa_sdk.executor - Received request to run 'action_testAction'
2019-09-09 19:39:06 ERROR flask.app - Exception on /webhook [POST]
Traceback (most recent call last):
File "/Users/sashaanksekar/anaconda3/lib/python3.7/site-packages/flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "/Users/sashaanksekar/anaconda3/lib/python3.7/site-packages/flask/app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/sashaanksekar/anaconda3/lib/python3.7/site-packages/flask_cors/extension.py", line 161, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
File "/Users/sashaanksekar/anaconda3/lib/python3.7/site-packages/flask/app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users/sashaanksekar/anaconda3/lib/python3.7/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/Users/sashaanksekar/anaconda3/lib/python3.7/site-packages/flask/app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/sashaanksekar/anaconda3/lib/python3.7/site-packages/flask/app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/sashaanksekar/anaconda3/lib/python3.7/site-packages/flask_cors/decorator.py", line 128, in wrapped_function
resp = make_response(f(*args, **kwargs))
File "/Users/sashaanksekar/anaconda3/lib/python3.7/site-packages/rasa_sdk/endpoint.py", line 59, in webhook
response = executor.run(action_call)
File "/Users/sashaanksekar/anaconda3/lib/python3.7/site-packages/rasa_sdk/executor.py", line 246, in run
"No registered Action found for name '{}'.".format(action_name)
Exception: No registered Action found for name 'action_testAction'.
请帮帮我
您收到 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 或其他任何东西)。
希望对您有所帮助。
编辑:
Make sure that the name of the
action
file matches.
运行 rasa run actions --actions action -vv
产量
(chatbot) PS C:\Users\user\Documents\Python\rasa-test> python -m rasa_sdk --actions action -vv
2019-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.py
import sqlite3
from rasa_sdk import Action
class 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"
class 的名称是 'TestAction','name' 函数的 return 值是 'action_testAction'。所以错误是 - 您在域文件中使用的操作名称与此 class 中此 'name' 方法编辑的名称 return 不匹配。在 NLU 训练数据和域文件中使用此 'action_testAction'。