我正在使用带有Node.js SDK的Microsoft Bot Framework开发聊天机器人。我已经集成了LUIS和QnA制造商,但我想创建这种情况,如果可能的话。举例说明以下link,特别是本节:
机器人可以通过几种方式实现LUIS和QnA Maker的混合: 首先调用LUIS,如果没有意图达到特定的阈值分数,即"无"意图被触发,然后调用QnA Maker。 或者,为QnA Maker创建一个LUIS意图,为您的LUIS模型提供示例QnA问题,这些问题映射到" QnAIntent。"
只是一个例子: 我有我的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');
});
}
]);
答案 0 :(得分:2)
您必须从与LUIS检测到的意图关联的方法/对话框将用户消息转发到QnaMaker
。请查看这篇文章(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可能无法检测到您所期望的问题,在这种情况下,您将需要更多地训练您的KB(就像您在LUIS中使用话语/意图一样)
答案 1 :(得分:1)
我之所以写这个是因为我想要更多的节点练习,这是使用节点的借口,但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'
});
答案 2 :(得分:1)
截至2018年(BotBuilder V4)
您现在可以使用 Dispatch命令行工具在多个机器人模块(例如LUIS模型和QnA)之间分配意图。
因此,首先您将进入LUIS应用程序,该应用程序将根据得分决定重定向到另一个LUIS应用程序或QnA。