如何解决rasa nlu 后备正在返回意图而不是问题
我正在使用 rasa(版本 2),并通过 this configuration 集成了 FallbackClassifier
。
但这会返回意图名称,而不是带有是和否按钮的任何问题。如果我按是,它会向用户提出问题
Did you mean intent_name
对话是这样的
它应该显示问题而不是显示 intent_name。我错过了什么吗?
在控制台上
ERROR rasa_sdk.endpoint - No registered action found for
name 'action_default_fallback'.
解决方法
在后备策略中,rasa 显示最可能意图的选项。
默认情况下,Rasa 显示用于回退的原始意图名称,因为我们没有提供任何映射配置。因此,如果它找到意图 make_reserverations
,它将显示
Did you mean make_reserverations?
并提供两个按钮是和否。
要显示自定义或用户友好的短语,需要实现操作 action_default_ask_affirmation
您必须在 actions.py
中创建一个类class ActionDefaultAskAffirmation(Action):
"""Asks for an affirmation of the intent if NLU threshold is not met."""
def name(self):
return "action_default_ask_affirmation"
def __init__(self):
self.intent_mappings = {}
# read the mapping of 'intent and valid question' from a csv and store it in a dictionary
with open(
INTENT_DESCRIPTION_MAPPING_PATH,newline="",encoding="utf-8"
) as file:
csv_reader = csv.reader(file)
for row in csv_reader:
self.intent_mappings[row[0]] = row[1]
def run(self,dispatcher,tracker,domain):
# from the list of intents get the second higher predicted intent
# first will be nlu_fallback
predicted_intent_info = tracker.latest_message["intent_ranking"][1]
# get the most likely intent name
intent_name = predicted_intent_info["name"]
# get the prompt for the intent
intent_prompt = self.intent_mappings[intent_name]
# Create the affirmation message and add two buttons to it.
# Use '/<intent_name>' as payload to directly trigger '<intent_name>'
# when the button is clicked.
message = "Did you mean '{}'?".format(intent_prompt)
buttons = [
{"title": "Yes","payload": "/{}".format(intent_name)},{"title": "No","payload": "/out_of_scope"},]
dispatcher.utter_message(message,buttons=buttons)
return []
然后需要像这样映射csv文件
//intent_name,User_Friendly_Phrase
bot_challenge,I am bot
然后在 actions
TwoStageFallback
实际上看起来很成功。我认为问题在于,当您成功确认意图 mood_great
时,您的助手不知道接下来要运行哪个操作,因此触发 action_core_fallback
(在 RulePolicy
配置中配置)(请参阅更多信息请参见文档 here)。
您是否将 action_default_fallback
添加到您的域文件中?如果您这样做了:在这种情况下,您需要定义一个适当的 custom action。如果您不想覆盖默认实现,您可以从域文件中删除 action_default_fallback
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。