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

时间:2019-04-20 09:48:01

标签: c# botframework luis

我正在尝试阅读Microsoft文档中的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;
                        }
                    }

                }
            }

1 个答案:

答案 0 :(得分: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;