BotBuilder Python-处理多个对话框和意图
我有以下代码来处理多个意图 代码BotBuilder Python-处理多个对话框和意图,python,botframework,bots,azure-language-understanding,Python,Botframework,Bots,Azure Language Understanding,我有以下代码来处理多个意图 代码 async def on_message_activity(self, turn_context: TurnContext): recognizer_result = await self.luis.recognize(self.recognizer, turn_context) intent = self.luis.get_top_intent(recognizer_result) await self.process_intent(t
async def on_message_activity(self, turn_context: TurnContext):
recognizer_result = await self.luis.recognize(self.recognizer, turn_context)
intent = self.luis.get_top_intent(recognizer_result)
await self.process_intent(turn_context, recognizer_result, intent)
async def process_intent(self, turn_context: TurnContext, recognizer_result, intent):
if intent == 'Greeting_Wishes':
await greeting_wishes(turn_context, user_info)
elif intent == 'Greeting_Question':
await greeting_question(turn_context)
elif intent == 'Movement':
dialog = Movement(recognizer_result)
await DialogHelper.run_dialog(
dialog,
turn_context,
self.dialog_state
)
问题
None
任何帮助都将不胜感激 我最终拥有了一个主对话框,并根据其他意图扩展了其他对话框。请看下面的代码示例
async def on_message_activity(self, turn_context: TurnContext):
recognizer_result = await self.luis.recognize(self.recognizer, turn_context)
intent = self.luis.get_top_intent(recognizer_result)
await self.process_intent(turn_context, recognizer_result, intent)
async def process_intent(self, turn_context: TurnContext, recognizer_result, intent):
if intent == "Greeting_Wishes" and not entity:
await greeting_wishes(turn_context, user_info)
return
if intent == "Greeting_Question" and not entity:
await greeting_question(turn_context)
return
dialog = MainDialog(self.luis, intent, recognizer_result)
await DialogHelper.run_dialog(
dialog,
turn_context,
self.conversation_state.create_property("DialogState")
)
主对话框.py
在主对话框中,我将检查意图并开始相应的对话框
class MainDialog(ComponentDialog):
def __init__(self, luis, intent, recognizer_result):
super(MainDialog, self).__init__(MainDialog.__name__)
self.luis = luis
self.intent = intent
self.recognizer_result = recognizer_result
self.add_dialog(SampleDialog1())
self.add_dialog(SampleDialog2())
self.add_dialog(
WaterfallDialog(
"main_dialog_id", [self.main_step]
)
)
self.initial_dialog_id = "main_dialog_id"
async def main_step(self, step_context: WaterfallStepContext) -> DialogTurnResult:
dialog_detail = self.luis.get_entities(self.intent, self.recognizer_result)
if self.intent == "one":
return await step_context.begin_dialog(SampleDialog1.__name__, dialog_detail)
elif self.intent == "two":
return await step_context.begin_dialog(SampleDialog2.__name__, dialog_detail)
请看我对Github问题的回答。一旦我们缩小了你的问题范围,我会把答案贴在这里。@moustacheman,你能找到答案吗。我在Github上查看了Wailes提供的解决方案,想了解您是否对其进行了任何添加以使其正常工作。@Vijay我最终只有一个对话框
MainDialog
,请查看下面我的答案。@moustacheman我看不到您的答案@维杰:很抱歉耽搁了,现在看看。这很好。但是,当用户从SampleDialog1向第一个问题发送输入时(假设它有多个问题需要用户输入),最终会产生不同的意图。这不是一个问题吗?谢谢@moustacheman。我刚测试过,效果很好。我发表上述评论的原因是,如果我没有任何意图,我希望它直接指向QnA,而不是进入对话。这也可以从主对话框内部实现,但是我在DialogTurnStatus.Waiting上遇到了一个属性错误。当我从QnA得到答案后,我会立即结束对话,但结果仍然是错误的。我能够通过调度工具根据意图执行单个对话。请在这里找到我的答案-