将Bois框架Luis与QnA集成为Intent,然后在进入QnA之后重新询问用户

时间:2018-08-03 03:21:20

标签: c# botframework luis qnamaker

我正在尝试创建一个QnA对话框的FAQ意图,进入该意图后应该向用户重新询问。

下面是我的代码,以便集成luis和QnA:

 [LuisIntent("FAQ")]
    public async Task FAQ(IDialogContext context, LuisResult result)
    {
        await context.PostAsync("FAQ");
        await context.Forward(new QnADialog(), ResumeAfterQnA, context.Activity, CancellationToken.None);

    }
    private async Task ResumeAfterQnA(IDialogContext context, IAwaitable<object> result)
    {
        await context.PostAsync("Back to Intent");
        context.Wait(MessageReceived);

    }

在“ QnA”对话框中:

[Serializable]
[QnAMakerService("endpoint", "knowledge base id", "subscription key")]
public class QnADialog : QnAMakerDialog<object>
{
    public bool flag = false;

    public override async Task DefaultMatchHandler(IDialogContext context, string originalQueryText, QnAMakerResult result)
    {


        if (result.Answers.Length > 0 && result.Answers.FirstOrDefault().Score > 0.75 && flag)
        {
            await context.PostAsync(result.Answers.FirstOrDefault().Answer);
            await context.PostAsync("To continue using the FAQ please type another question, if not type no");
        }
        else if (originalQueryText.Contains("no"))
        {
            context.Done(true);
        }
        else
        {
            await base.DefaultMatchHandler(context, originalQueryText,result);
            flag = true;
        }
    }

}

测试结果如下: enter image description here 我希望在欢迎使用FAQ后无法显示“找不到匹配的知识库(KB)”,但是我很努力地这样做,我已经查看了文档样本,但是没有类似的样本与我的问题有关。

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

  

我希望在欢迎使用常见问题解答后不显示“ KB中找不到很好的匹配项”

根据您的代码和要求,我在DefaultMatchHandler方法中修改了代码,该方法对我有用,您可以参考它。

public override async Task DefaultMatchHandler(IDialogContext context, string originalQueryText, QnAMakerResult result)
{
    if (result.Answers.Length > 0 && result.Answers.FirstOrDefault().Score > 0.75 && flag)
    {
        await context.PostAsync(result.Answers.FirstOrDefault().Answer);
        await context.PostAsync("To continue using the FAQ please type another question, if not type no");
    }
    else if (originalQueryText.Contains("no"))
    {
        context.Done(true);
    }
    else
    {
        //detect if originalQueryText contains "faq"
        if (!originalQueryText.ToLower().Contains("faq"))
        {
            await base.DefaultMatchHandler(context, originalQueryText, result);
        }
        flag = true;
    }
}

测试结果:

enter image description here