Нет ответа от сервиса QnA при интеграции LUIS и QnA servie - PullRequest
1 голос
/ 13 июня 2019

Я пытаюсь объединить сервис LUIS и QnA в одном боте.Я использовал образец кода, доступный на Github , чтобы получить ответ для намерения.Я пытался с тем же кодом -

var restify = require('restify');
var builder = require('botbuilder');
var cognitiveservices = require('./node_modules/botbuilder-cognitiveservices/lib/botbuilder-cognitiveservices');
var botbuilder_azure = require("botbuilder-azure");

var server = restify.createServer();
server.listen(process.env.port || process.env.PORT || 3978, function () {
    console.log('%s listening to %s', server.name, server.url);
});

var connector = new builder.ChatConnector({
    appId: process.env.MicrosoftAppId,
    appPassword: process.env.MicrosoftAppPassword,
    openIdMetadata: process.env.BotOpenIdMetadata
});

server.post('/api/messages', connector.listen());

var tableName = 'botdata';
var azureTableClient = new botbuilder_azure.AzureTableClient(tableName, process.env['AzureWebJobsStorage']);
var tableStorage = new botbuilder_azure.AzureBotStorage({ gzipData: false }, azureTableClient);


var bot = new builder.UniversalBot(connector);
//bot.set('storage', new builder.MemoryBotStorage());         // Register in-memory state storage
bot.set('storage', tableStorage);

var luisAppId = process.env.LuisAppId;
 var luisSubscriptionKey = process.env.LuisAPIKey;
 var luisApiHostName = process.env.LuisApiHostName || 'westus.api.cognitive.microsoft.com';
 var luisModelUrl = 'https://' + luisApiHostName + '/luis/v2.0/apps/' + luisAppId + '?subscription-key=' + luisSubscriptionKey;

var recognizer = new builder.LuisRecognizer(luisModelUrl);


var qnarecognizer = new cognitiveservices.QnAMakerRecognizer({
    knowledgeBaseId: process.env.QnAKnowledgebaseId,
    authKey: process.env.QnAAuthKey,
    });

var intents = new builder.IntentDialog({ recognizers: [recognizer, qnarecognizer] });
bot.dialog('/', intents);

intents.matches('azureBotDevelopment', [
    function (session, args, next) {
        var answerEntity = builder.EntityRecognizer.findEntity(args.entities, 'answer');
        session.send(answerEntity.entity);
    }
]);

intents.onDefault([
    function(session){
        session.send('Sorry!! No match!!');
    }
]);

Когда я запускаю этого бота в веб-чате, на каждый вопрос он отвечает Oops. Something went wrong and we need to start over. В онлайн-редакторе это выдает следующую ошибку -

Error: QnA request returned a 404 code with body: [object Object]
    at Request._callback (D:\home\site\wwwroot\node_modules\botbuilder-cognitiveservices\lib\QnAMakerRecognizer.js:98:37)
    at Request.self.callback (D:\home\site\wwwroot\node_modules\request\request.js:185:22)
    at emitTwo (events.js:106:13)
    at Request.emit (events.js:191:7)
    at Request.<anonymous> (D:\home\site\wwwroot\node_modules\request\request.js:1161:10)
    at emitOne (events.js:96:13)
    at Request.emit (events.js:188:7)
    at IncomingMessage.<anonymous> (D:\home\site\wwwroot\node_modules\request\request.js:1083:12)
    at IncomingMessage.g (events.js:291:16)
    at emitNone (events.js:91:20)
    at IncomingMessage.emit (events.js:185:7)
    at endReadableNT (_stream_readable.js:974:12)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickDomainCallback (internal/process/next_tick.js:122:9)

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

1 Ответ

0 голосов
/ 21 июня 2019

Организация вашего кода, как показано ниже, должна работать.Я протестировал это с помощью веб-чата и эмулятора с положительными результатами.

По сути, bot.recognizer действует как промежуточное ПО, передавая возвращенное намерение LUIS в бот и сопоставляя его с любыми триггерами, которым назначено одинаковое значение.Для QnA передача связанного распознавателя в диалоговое окно позволяет сопоставить ввод пользователя в базе знаний QnA, а затем вернуть соответствующий ответ.

var bot = new builder.UniversalBot(connector);
bot.set('storage', new builder.MemoryBotStorage());

var luisAppId = process.env.LuisAppId;
var luisAPIKey = process.env.LuisAPIKey;
var luisAPIHostName = process.env.LuisAPIHostName  // 'westus.api.cognitive.microsoft.com';

const LuisModelUrl = 'https://' + luisAPIHostName + '/luis/v2.0/apps/' + luisAppId + '?subscription-key=' + luisAPIKey;

var luisRecognizer = new builder.LuisRecognizer(LuisModelUrl);

var qnarecognizer = new cognitiveservices.QnAMakerRecognizer({
    knowledgeBaseId: process.env.QnAKnowledgebaseId,
    authKey: process.env.QnAAuthKey,
    endpointHostName: process.env.QnAEndpointHostName
});

var basicQnAMakerDialog = new cognitiveservices.QnAMakerDialog({
    recognizers: [qnarecognizer],
    defaultMessage: 'No match! Try changing the query terms!',
    qnaThreshold: 0.3
});

bot.recognizer(luisRecognizer);

bot.dialog('/', basicQnAMakerDialog);

bot.dialog('GreetingDialog',[
    (session) => {
        session.send('You reached the Greeting intent. You said \'%s\'.', session.message.text);
        builder.Prompts.text(session, "What is your name?");
    },
    (session, results) => {
        session.userData.name = results.response;
        session.send("Glad you could make it, " + session.userData.name);
        builder.Prompts.text(session, "Ask me something!");
    },
    (session, results) => {
        session.conversationData.question = results.response;
        session.send(session.conversationData.question + " is an interesting topic!")
        session.endDialog();
    }
]).triggerAction({
    matches: 'Greeting'
})

bot.dialog('HelpDialog',
    (session) => {
        session.send('You reached the Help intent. You said \'%s\'.', session.message.text);
        session.endDialog();
    }
).triggerAction({
    matches: 'Help'
})

Вы должны знать, что SDK v3 будут терять своиподдержка наступит в декабре 2019 года. В то время новые боты v3 не будут доступны через Azure.Я бы порекомендовал вам рассмотреть возможность создания своего бота с использованием более новой v4 SDK .Вы можете прочитать больше об этом в реализации v4 здесь .

Надежда на помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...