Как добавить QnA Maker в образец CoreBot - PullRequest
1 голос
/ 20 апреля 2020

Я работаю над ботом на основе образца C# Core-Bot.

Как добавить экземпляр QnA Maker? Он должен вызываться, если намерение "none".

Спасибо

РЕДАКТИРОВАТЬ:

 switch (topIntent)
        {
            case "None":
                //connect with QnA Maker
                return await stepContext.BeginDialogAsync(nameof(QnADialog), topIntent, cancellationToken);

Как должен выглядеть QnADialog?

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

С обновленной областью простого создания коннектора QnA Maker для базы данных chit-chat я создал отдельный ответ для ясности. Для получения дополнительной информации об опциях вызова QnA Maker от вашего бота, проверьте другой ответ.

Сначала вам нужно создать соединитель / распознаватель. Вы можете вызвать API напрямую, но это намного проще. Затем просто вызовите распознаватель в вашем операторе switch. Лично я всегда устанавливал сообщение по умолчанию здесь, а не в службе QnA Maker, но это зависит от вас.

const { QnAMaker } = require('botbuilder-ai');

constructor() {
    this.qnaRecognizer = new QnAMaker({
        knowledgeBaseId: process.env.kbid,
        endpointKey: process.env.endpointKey,
        host: process.env.hostname
    });
}

// <<LUIS call and other code here>>

switch (topIntent) {
    case "None":
        //connect with QnA Maker
        // Set value for number of answers and confidence threshold, e.g. 1, 0.5
        const qnaResult = await this.qnaRecognizer.generateAnswer(context.activity.text, QNA_TOP_N, QNA_CONFIDENCE_THRESHOLD);
        if (!qnaResult || qnaResult.length === 0 || !qnaResult[0].answer) {
            await turnContext.sendActivity(`I'm sorry, I don't know how to help with that.`);
        } else {
            await context.sendActivity(qnaResult[0].answer);
        }
    break;
}

Если вы хотите, я тоже могу поделиться примером диалога, но мой намного сложнее (диалоговое окно имеет два вложенных вызова, один для бизнес-КБ и второй для чит-чата, и эти вызовы обрабатываются в отдельной вспомогательной функции, которая вызывает API напрямую, а не с помощью соединителя / распознавателя). Я думаю, что этого должно быть достаточно для ваших нужд.

0 голосов
/ 20 апреля 2020

У вас есть проблема c внутри core-бота? Если бы вы могли поделиться некоторым кодом и добавить больше указаний о том, что вы пытаетесь сделать, мы могли бы дать более конкретный c ответ.

Я использую аналогичную функцию и основываюсь на моем образец бота для отправки (nodejs, но также должна быть версия C#). По сути, вы просто вызываете функцию QnA Maker, если намерение None. Или действительно, вы можете просто создать регистр по умолчанию, который будет захватывать None, а также любое другое намерение, которое вы не определили явно.

В приведенном выше примере вызывается локальная функция, но вы также можете легко вызвать диалоговое окно QnA Maker или используйте любой другой метод вызова QnA Maker для этого случая по умолчанию. Там можно вставить любые образцы для вызова QnA Maker. Я на самом деле поменял местами свой вызов функции go для вызова помощника для экспериментального образца QnA Maker с подсказками, который вызывается как диалог, поэтому я могу подтвердить, что оба метода работают.

Редактировать: В nodejs я вызываю диалог внутри оператора switch. Из-за того, как я это настроил, мне нужно выполнить дополнительную обработку, чтобы получить фактическую активность для отправки. Как я уже отметил, это было основано на экспериментальном QnA Maker с подсказкой образца.

default:
    var processResult = await this.qnaDialog.processAsync(userDialog.qnaState, context.activity);
    userDialog.qnaState = processResult[0];
    await this.userDialogStateAccessor.set(context,userDialog);
    var output = processResult[1];
    await dc.context.sendActivity(output);      
    break;
...