将 onEnabled 方法与 QnAMakerRecognizer 结合使用
Using onEnabled method with QnAMakerRecognizer
我正在尝试将 onEnabled
方法与 QnAMakerRecognizer 一起使用,这样我就可以拥有多个 QnAMakerRecognizers,并且可以选择启用和禁用哪个。我试过遵循这个 example 并尝试了类似的东西,但我收到一条错误消息:
TypeError: (intermediate value).onEnabled is not a function
如何正确使用onEnable
方法?
示例代码:
var bot = new builder.UniversalBot(connector);
var qnarecognizer1 = new cognitiveservices.QnAMakerRecognizer({
knowledgeBaseId: knowledgeId,
subscriptionKey: subscriptionId,
qnaThreshold:0.3,
top:1})
.onEnabled(function (session, callback) {
// Check to see if this recognizer should be enabled
if (session.conversationData.useqna1) {
callback(null, true);
} else {
callback(null, false);
}
});
var qnarecognizer2 = new cognitiveservices.QnAMakerRecognizer({
knowledgeBaseId: knowledgeId,
subscriptionKey: subscriptionId,
qnaThreshold:0.3,
top:1})
.onEnabled(function (session, callback) {
// Check to see if this recognizer should be enabled
if (session.conversationData.useqna2) {
callback(null, true);
} else {
callback(null, false);
}
});
var intentrecognizer = new builder.IntentDialog();
var intents = new builder.IntentDialog({ recognizers: [intentrecognizer, qnarecognizer1, qnarecognizer2] });
bot.dialog('/', intents);
intents.matches('qna', [
function (session, args, next) {
args.entities.forEach(function(element) {
session.send(element.entity);
}, this);
}
]);
intents.matchesAny([/hi/i, /main menu/i], [
function (session) {
builder.Prompts.choice(session, "Hi, What would you like to ask me about?", ["Service1","Service2"],{ listStyle: builder.ListStyle.button});
},
function (session, result) {
var selection = result.response.entity;
switch (selection) {
case "Service1":
session.conversationData.useqna1 = true;
session.conversationData.useqna2 = false;
session.send('You can now ask me anything about '+selection+'. Type \'main menu\' anytime to choose a different topic.')
session.endConversation();
return
case "Service2":
session.conversationData.useqna1 = false;
session.conversationData.useqna2 = true;
session.send('You can now ask me anything about '+selection+'. Type \'main menu\' anytime to choose a different topic.')
session.endConversation();
return
}
}
])
QnAMakerRecognizer 没有实现 Bot Builder IntentRecognizer,也没有 onEnabled 方法。
编辑:
我已经在 BotBuilder-CognitiveServices 存储库中为此提交了一个问题:https://github.com/Microsoft/BotBuilder-CognitiveServices/issues/62
在我们的项目中,我们结束了类似的解决方法。
我们克隆了识别原型函数并检查了 enabling/disabling 识别器的 conversationData 布尔值。
希望对你有用 ;)
qnaRecognizer.__proto__['_recognize'] = qnaRecognizer.__proto__['recognize']
qnaRecognizer.__proto__.recognize = function (context, cb) {
if(!context.conversationData || !context.conversationData.ignoreQnARecognizers){
return qnaRecognizer.__proto__._recognize.apply(this, [context, cb]);
} else {
cb(null, null);
}
}
我正在尝试将 onEnabled
方法与 QnAMakerRecognizer 一起使用,这样我就可以拥有多个 QnAMakerRecognizers,并且可以选择启用和禁用哪个。我试过遵循这个 example 并尝试了类似的东西,但我收到一条错误消息:
TypeError: (intermediate value).onEnabled is not a function
如何正确使用onEnable
方法?
示例代码:
var bot = new builder.UniversalBot(connector);
var qnarecognizer1 = new cognitiveservices.QnAMakerRecognizer({
knowledgeBaseId: knowledgeId,
subscriptionKey: subscriptionId,
qnaThreshold:0.3,
top:1})
.onEnabled(function (session, callback) {
// Check to see if this recognizer should be enabled
if (session.conversationData.useqna1) {
callback(null, true);
} else {
callback(null, false);
}
});
var qnarecognizer2 = new cognitiveservices.QnAMakerRecognizer({
knowledgeBaseId: knowledgeId,
subscriptionKey: subscriptionId,
qnaThreshold:0.3,
top:1})
.onEnabled(function (session, callback) {
// Check to see if this recognizer should be enabled
if (session.conversationData.useqna2) {
callback(null, true);
} else {
callback(null, false);
}
});
var intentrecognizer = new builder.IntentDialog();
var intents = new builder.IntentDialog({ recognizers: [intentrecognizer, qnarecognizer1, qnarecognizer2] });
bot.dialog('/', intents);
intents.matches('qna', [
function (session, args, next) {
args.entities.forEach(function(element) {
session.send(element.entity);
}, this);
}
]);
intents.matchesAny([/hi/i, /main menu/i], [
function (session) {
builder.Prompts.choice(session, "Hi, What would you like to ask me about?", ["Service1","Service2"],{ listStyle: builder.ListStyle.button});
},
function (session, result) {
var selection = result.response.entity;
switch (selection) {
case "Service1":
session.conversationData.useqna1 = true;
session.conversationData.useqna2 = false;
session.send('You can now ask me anything about '+selection+'. Type \'main menu\' anytime to choose a different topic.')
session.endConversation();
return
case "Service2":
session.conversationData.useqna1 = false;
session.conversationData.useqna2 = true;
session.send('You can now ask me anything about '+selection+'. Type \'main menu\' anytime to choose a different topic.')
session.endConversation();
return
}
}
])
QnAMakerRecognizer 没有实现 Bot Builder IntentRecognizer,也没有 onEnabled 方法。
编辑: 我已经在 BotBuilder-CognitiveServices 存储库中为此提交了一个问题:https://github.com/Microsoft/BotBuilder-CognitiveServices/issues/62
在我们的项目中,我们结束了类似的解决方法。
我们克隆了识别原型函数并检查了 enabling/disabling 识别器的 conversationData 布尔值。
希望对你有用 ;)
qnaRecognizer.__proto__['_recognize'] = qnaRecognizer.__proto__['recognize']
qnaRecognizer.__proto__.recognize = function (context, cb) {
if(!context.conversationData || !context.conversationData.ignoreQnARecognizers){
return qnaRecognizer.__proto__._recognize.apply(this, [context, cb]);
} else {
cb(null, null);
}
}