4

我正在使用带有 Node.js SDK 的 Microsoft Bot Framework 开发一个聊天机器人。我已经集成了 LUIS 和 QnA maker,但如果可能的话,我想创建这个场景。以以下链接为例,特别是本节:

机器人可以通过多种方式实现 LUIS 和 QnA Maker 的混合:首先调用 LUIS,如果没有意图满足特定阈值分数,即触发“无”意图,则调用 QnA Maker。或者,为 QnA Maker 创建一个 LUIS 意图,为您的 LUIS 模型提供映射到“QnAIntent”的示例 QnA 问题。

举个例子:我有我的 QnA KB,其中有一对:“你是谁?” /“嗨,我是你的机器人!”。然后我有我的 Luis 应用程序来识别这个称为"common"的意图。所以,如果我写信给我的机器人:“你是谁?” 它会回答“嗨,我是你的机器人!” 相反,如果我写“告诉我你是谁”,它会识别与问题相关的 LUIS 意图,但它不会回答“嗨,我是你的机器人!”就像我想象的那样.

所以我想象的是:我问“告诉我你是谁”这个问题——>机器人触发共同意图(LUIS)——>然后我希望机器人会回答我查看 QnA KB——>“嗨,我是你的机器人!”

是否可以?

希望这段代码可以帮助:

var intents = new builder.IntentDialog({ recognizers[luisRecognizer,qnarecognizer] });

bot.dialog('/', intents);

intents.matches('common_question', [
    function (session, args, next) {
        session.send('Intent common');
        qnarecognizer.recognize(session, function (error, result) {
            session.send('answerEntity.entity');
        });
    } 
]);
4

3 回答 3

2

您必须将用户消息转发到QnaMaker与 LUIS 检测到的意图关联的方法/对话框。看看这篇文章(https://blog.botframework.com/2017/11/17/qna-maker-node-js-bots/)了解如何QnAMaker实现Node.js

就像是:

var recognizer = new cognitiveservices.QnAMakerRecognizer({
    knowledgeBaseId: 'set your kbid here', 
    subscriptionKey: 'set your subscription key here'});

var context = session.toRecognizeContext();

recognizer.recognize(context, function (error, result) { // your code... }

您还应该探索示例并尝试了解一切是如何工作的:https ://github.com/Microsoft/BotBuilder-CognitiveServices/tree/master/Node/samples/QnAMaker

如果您的问题变化很大;QnA 可能无法检测到您预期的问题,在这种情况下,您将不得不更多地训练您的知识库(就像您在 LUIS 中使用话语/意图所做的那样)

于 2018-01-10T20:23:00.907 回答
1

我写这篇文章是因为我想更多地练习 node,这是使用 node 的借口,但是 Ezequiel 告诉你的是完全正确的。我还将在您的 GitHub 问题上发布。这是一个功能齐全的节点应用程序,可以满足您的需求

var builder = require('botbuilder');
var restify = require('restify');
var cog = require('botbuilder-cognitiveservices');



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: "APP ID",
    appPassword: "APP PASSWORD"
});
server.post('/api/messages', connector.listen());

var bot = new builder.UniversalBot(connector, function(session) {
    session.send('Sorry, I did not understand \'%s\'. Type \'help\' if you need assistance.', session.message.text);
});

var recognizer = new builder.LuisRecognizer("https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/{LUIS APP ID}?subscription-key={LUIS KEY}&verbose=true&timezoneOffset=0&q=");

bot.recognizer(recognizer);
var qnaRecognizer = new cog.QnAMakerRecognizer({
    knowledgeBaseId: 'QNA APP ID',
    subscriptionKey: 'QNA SUBSCRIPTION KEY'
}); 

bot.dialog('Common', function(session) {
    var query = session.message.text;        
    cog.QnAMakerRecognizer.recognize(query, 'https://westus.api.cognitive.microsoft.com/qnamaker/v2.0/knowledgebases/{QNA APP ID}}/generateAnswer', '{QNA SUBSCRIPTION KEY}', 1, 'intentName', (error, results) => {
        session.send(results.answers[0].answer)    
    })    
}).triggerAction({
    matches: 'Common'
});
于 2018-01-11T00:28:06.877 回答
1

截至 2018 年(BotBuilder V4)

您现在可以使用Dispatch Command Line工具在多个机器人模块(例如 LUIS 模型和 QnA)之间分派意图。

因此,首先您将进入 LUIS 应用程序,该应用程序将根据分数决定重定向到另一个 LUIS 应用程序或 QnA。

使用 LUIS 作为调度服务的调度工具示例

于 2018-10-29T18:58:54.753 回答