Интеграция бот-фреймворка Луиса с QnA в качестве намерения, а затем повторный запрос пользователя после перехода к QnA

Я пытаюсь создать намерение FAQ, которое действует как диалог QnA, который должен повторно спрашивать пользователя после входа в намерение.

Ниже мой код для интеграции 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;
        }
    }

}

Результат теста следующий:  введите здесь описание изображения я бы хотел, чтобы после приветствия в разделе часто задаваемых вопросов не отображалось сообщение" Хорошее совпадение в KB "не отображалось, но мне это не удается, я уже смотрю в образцах документации, но с моей проблемой нет аналогичных образцов.

Любая помощь будет оценена


person user3646742    schedule 03.08.2018    source источник


Ответы (1)


я бы хотел, чтобы сообщение "В базе знаний не найдено подходящих совпадений" не отображалось после приветствия в разделе часто задаваемых вопросов

Основываясь на вашем коде и требованиях, я изменил код в методе 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;
    }
}

Результат теста:

введите здесь описание изображения

person Fei Han    schedule 03.08.2018