如何在单个 Node.js 机器人中集成 LUIS 和 QnA Maker 服务?
How to integrate LUIS and QnA Maker services in single Node.js bot?
我正在使用带有 Node.js SDK 的 Microsoft Bot Framework 开发聊天机器人。我已经集成了 LUIS 和 QnA maker,但如果可能的话,我想创建这个场景。以以下 link 为例,尤其是本节:
There are a few ways that a bot may implement a hybrid of LUIS and QnA Maker:
Call LUIS first, and if no intent meets a specific threshold score, i.e., "None" intent is triggered, then call QnA Maker. Alternatively, create a LUIS intent for QnA Maker, feeding your LUIS model with example QnA questions that map to "QnAIntent."
举个例子:
我有 QnA 知识库,其中有一对:" who are you?" / "Hi I'm your bot! "。然后我有我的 Luis 应用程序识别这个名为 "common" 的意图。
所以,如果我写信给我的机器人:“你是谁?” 它会回答 "Hi I'm your bot! "
相反,如果我写 " 告诉我你是谁 它会识别与问题相关的 LUIS 意图,但它不会像我想象的那样回答 "Hi I'm your bot! "。
所以我想象的是:我问问题 "Tell me who you are" --> 机器人触发通用意图 (LUIS) --> 然后我希望机器人会回答我查看 QnA KB - -> "Hi I'm your bot! "
可能吗?
希望这段代码能有所帮助:
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');
});
}
]);
您必须将用户消息从与 LUIS 检测到的意图关联的 method/dialog 转发到 QnaMaker
。查看这篇文章 (https://blog.botframework.com/2017/11/17/qna-maker-node-js-bots/),了解如何在 Node.js
中实现 QnAMaker
类似于:
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 中使用 utterances/intents)
我写这篇文章是因为我想更多地练习 node,这是使用 node 的借口,但 Ezequiel 告诉你的是完全正确的。我也会 post 解决您的 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 年(BotBuilder V4)
您现在可以使用 Dispatch 命令行 工具跨多个机器人模块(例如 LUIS 模型和 QnA)调度意图。
首先,您将进入 LUIS 应用程序,该应用程序将根据分数决定重定向到另一个 LUIS 应用程序或 QnA。
我正在使用带有 Node.js SDK 的 Microsoft Bot Framework 开发聊天机器人。我已经集成了 LUIS 和 QnA maker,但如果可能的话,我想创建这个场景。以以下 link 为例,尤其是本节:
There are a few ways that a bot may implement a hybrid of LUIS and QnA Maker: Call LUIS first, and if no intent meets a specific threshold score, i.e., "None" intent is triggered, then call QnA Maker. Alternatively, create a LUIS intent for QnA Maker, feeding your LUIS model with example QnA questions that map to "QnAIntent."
举个例子: 我有 QnA 知识库,其中有一对:" who are you?" / "Hi I'm your bot! "。然后我有我的 Luis 应用程序识别这个名为 "common" 的意图。 所以,如果我写信给我的机器人:“你是谁?” 它会回答 "Hi I'm your bot! " 相反,如果我写 " 告诉我你是谁 它会识别与问题相关的 LUIS 意图,但它不会像我想象的那样回答 "Hi I'm your bot! "。
所以我想象的是:我问问题 "Tell me who you are" --> 机器人触发通用意图 (LUIS) --> 然后我希望机器人会回答我查看 QnA KB - -> "Hi I'm your bot! "
可能吗?
希望这段代码能有所帮助:
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');
});
}
]);
您必须将用户消息从与 LUIS 检测到的意图关联的 method/dialog 转发到 QnaMaker
。查看这篇文章 (https://blog.botframework.com/2017/11/17/qna-maker-node-js-bots/),了解如何在 Node.js
QnAMaker
类似于:
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 中使用 utterances/intents)
我写这篇文章是因为我想更多地练习 node,这是使用 node 的借口,但 Ezequiel 告诉你的是完全正确的。我也会 post 解决您的 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 年(BotBuilder V4)
您现在可以使用 Dispatch 命令行 工具跨多个机器人模块(例如 LUIS 模型和 QnA)调度意图。
首先,您将进入 LUIS 应用程序,该应用程序将根据分数决定重定向到另一个 LUIS 应用程序或 QnA。