BotBuilder Python - Обработка нескольких диалогов и намерений - PullRequest
0 голосов
/ 25 мая 2020

У меня есть следующий код для обработки нескольких намерений:

Код

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
        )

Проблема

  1. Приветственное намерение работает нормально
  2. Намерение движения правильно переносится в настроенный диалог, но после запроса пары вводов пользователю и когда пользователь вводит их значение, он либо возвращается к приветствию, либо никуда не идет с тех пор. намерение: None

Может ли кто-нибудь помочь, как обрабатывать несколько намерений с помощью диалогов?

Любая помощь будет принята с благодарностью!

1 Ответ

1 голос
/ 30 июня 2020

В итоге у меня был один главный диалог, а другие диалоги были расширены в зависимости от другого намерения. Посмотрите на приведенный ниже пример кода:

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")
    )

main_dialog.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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...