如何在bot框架版本4中编写版本3 bot代码中的LUIS intent方法?

问题描述 投票:0回答:1

我试图关注Microsoft Docs中的this文章,以便将我们的版本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;
                        }
                    }

                }
            }
c# botframework luis
1个回答
0
投票

如果你的问题是关于Bot Framework核心v4,PFB步骤来获取意图:

  1. 首先,您需要在服务器中使用密钥在bot框架中注入LUIS服务。
  2. 使用下面的代码获取识别器结果对象
var luisResults = await services.LuisServices[LuisKey].RecognizeAsync(turnContext, default(CancellationToken));

LUIS密钥是注入LUIS服务时使用的密钥。

  1. 这是你如何使用RecognizerResult对象获取意图。
luisResults.GetTopIntent(luisThresholdScore).intent;
© www.soinside.com 2019 - 2024. All rights reserved.