Как методы LUIS intent в коде бота версии 3 должны быть написаны в bot Framework версии 4?

#c# #botframework #azure-language-understanding

#c# #botframework #azure-понимание языка

Вопрос:

Я пытаюсь следовать этой статье из Microsoft Docs, чтобы перенести наш код версии 3 в версию 4.

Однако я не уверен, как переписать диалоговое окно Luis. Что нужно сделать?

Я добавил приведенный ниже код в onturnasync, но не уверен, как теперь переписать метод возобновления AfterFAQ.

Пожалуйста, помогите мне переписать эти существующие методы Luis:

       //The LUIS dialog service call the back the method if the conversation is part of Greeting intent
    [LuisIntent("Greetings")]
    public async Task Greetings(IDialogContext context, IAwaitable<IMessageActivity> activity, LuisResult result)
    {
        needMoreInformation = false;
        qnaInvalidMessageCount = 0;
        var messageToForward = await activity;
        string[] supportList = { "HELP", "FEEDBACK", "SUPPORT", "ESCALATE", "AGENT" };
        string qnaAnswer;

        if (messageToForward.Text == null || supportList.Any(x => x == messageToForward.Text.ToUpper()))
        {
            await context.PostAsync("Please reach out to ...");
            context.Wait(MessageReceived);
        }
        else if (GreetingColl.TryGetValue(messageToForward.Text.Trim().ToLower(), out qnaAnswer))
        {
            await context.PostAsync(qnaAnswer);
            context.Wait(MessageReceived);
        }
        else
        {
            await context.Forward(new QnAGreetingsDialog(), AfterFAQDialog, messageToForward, CancellationToken.None);
        }

    }
  

измененный код:

  public async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken))
    {
        if (turnContext.Activity.Type == ActivityTypes.Message)
        {
          ...
           var luisResults = await botServices.LuisServices[LuisKey].RecognizeAsync(turnContext, cancellationToken);
                    var topScoringIntent = luisResults?.GetTopScoringIntent();
                    var topIntent = topScoringIntent.Value.intent;                        

                    // Continue the current dialog
                    var dialogResult = await dc.ContinueDialogAsync();
                    // if no one has responded,
                    if (!dc.Context.Responded)
                    {
                        // examine results from active dialog
                        switch (dialogResult.Status)
                        {
                            case DialogTurnStatus.Empty:
                                switch (topIntent)
                                {
                                    case NoneIntent:

                                    case GreetingsIntent:
                                        await dc.BeginDialogAsync(nameof(QnAGreetingsDialog));
                                        break;

                                    case CredentialsIntent:


                                    case ContactusIntent:
                                        await LuisVar.Feedback(turnContext);
                                        break;

                                    case FeedbackIntent:
                                        await LuisVar.Feedback(turnContext);
                                        break;

                                    default:
                                        // No intent identified, provide some help to the user
                                        await dc.Context.SendActivityAsync("I didn't understand what you just said to me.");
                                        break;
                                }

                                break;

                            case DialogTurnStatus.Waiting:
                                // The active dialog is waiting for a response from the user, so do nothing.
                                break;

                            case DialogTurnStatus.Complete:
                                await dc.EndDialogAsync();
                                break;

                            default:
                                await dc.CancelAllDialogsAsync();
                                break;
                        }
                    }

                }
            }
  

Комментарии:

1. Это все здесь, мой друг… learn.microsoft.com/en-us/azure/bot-service /…

2. Спасибо за предложение @Skin . Теперь у меня готова базовая структура. Пожалуйста, расскажите мне немного больше о переписывании — взяв этот простой метод в качестве примера: обратная связь с публичной асинхронной задачей (IDialogContext context, IAwaitable<IMessageActivity> activity, LuisResult результат) { needMoreInformation = false; qnaInvalidMessageCount = 0; var messageToForward = ожидание активности; ожидание контекста.PostAsync(«Пожалуйста, свяжитесь с.»); контекст. Подождите (получено сообщение); }

3. Пожалуйста, не публикуйте многострочный код в комментариях Stack Overflow. Он не будет отформатирован, поэтому его очень сложно прочитать. Вам нужно отредактировать свой вопрос, чтобы включить код.

4. Конечно. @KyleDelaney, я отредактировал свой вопрос — добавил два основных метода luis intent в существующий бот версии 3, который я хочу перенести на версию 4.

Ответ №1:

если ваш вопрос касается ядра Bot Framework v4, шаги PFB для извлечения намерений:

  1. сначала вам нужно внедрить сервисы LUIS в сервисы с ключом в bot framework.
  2. Извлеките объект результата распознавания, используя приведенный ниже код
 var luisResults = await services.LuisServices[LuisKey].RecognizeAsync(turnContext, default(CancellationToken));
  

Ключ LUIS — это ключ, используемый при внедрении службы LUIS.

  1. вот как вы можете извлекать намерения, используя объект RecognizerResult.
 luisResults.GetTopIntent(luisThresholdScore).intent;
  

Комментарии:

1. да, @Sarang, я смог достичь этой точки, просмотрев доступные образцы. Я отредактировал свой пост и добавил код из своего приложения v4. Однако теперь я поражен переписыванием метода resume в коде v3

2. @Tanmayee — Вы хотели бы задать новый вопрос о вашей новой проблеме?

3. да, я все еще на том же этапе, хотя я внес необходимые изменения в свое новое приложение. Пожалуйста, помогите мне найти замену Context. подождите в коде v3

4. Я добавил метод resume в v3, как и другой метод, который принимает dialogcontext в качестве параметра и вызывает этот метод из begindialog. Однако элемент управления не ожидает, пока пользователь не установит флажок. Это завершает диалоговое окно (я вызываю метод resume здесь, поскольку context.wait отсутствует). Следовательно, после установки пользователем флажка ответа нет

5. @Tanmayee — Вы опубликовали новый вопрос?