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得到答案后,我会立即结束对话,但结果仍然是错误的。我能够通过调度工具根据意图执行单个对话。请在这里找到我的答案-