我正在尝试将luis与有效的QNA主动学习机器人集成。 我用Luis和QNA对话框创建了意图对话框
var luisRecognizer = new builder.LuisRecognizer(config.luisEndPoint)
luisRecognizer.onFilter(function(context, result, callback) {
if (result.intent != 'None' && result.score < 0.8) {
callback(null, { intent: 'None', score: 0});
} else {
callback(null, result);
}
});
const qnaRecognizer = new cognitiveServices.QnAMakerRecognizer({
knowledgeBaseId: process.env.KBID,
endpointHostName: process.env.HOST_NAME,
authKey: process.env.SUBSCRIPTION_KEY,
top: 4
});
var feedbackTool = new feedbackTool.FeedbackTool();
bot.library(feedbackTool.createLibrary());
const qnaMakerDialog = new cognitiveServices.QnAMakerDialog({
recognizers: [qnaRecognizer],
defaultMessage: DefaultMessageQNA,
qnaThreshold: qnaThreshold,
feedbackLib:feedbackTool
});
var intentsDialog = new builder.IntentDialog({ recognizers: [luisRecognizer, qnaMakerDialog ] });
bot.dialog('/', intentsDialog);
,并且根据luis结果,iam将dailog称为
intentsDialog.matches("someIntent", [someIntent.getDialog()]);
intentsDialog.matches("anotherIntent", [anotherIntent.getDialog()]);
intentsDialog.matches('qna', [
function (session, args, next) {
//problem 1
qnaMakerDialog.invokeAnswer(session, args, qnaThreshold, defaultMessageQNA)
}
]);
intentsDialog.onDefault( [
function (session) {
//problem 2
session.send('Sorry, I don\'t know that.');
}
]);
此代码为有效的QNA提供正确的结果,并根据luis意图将其重定向到适当的对话框。
但是我在上面的代码中面临2个挑战:
还有其他没有使用IntentDialog并将上下文转发到qna的方法吗?预先感谢。
答案 0 :(得分:0)
对于第一个问题,我认为根本原因可能是您没有将适当的值设置为threshold
。
请参考https://github.com/Microsoft/BotBuilder-CognitiveServices/blob/master/Node/lib/QnAMakerDialog.js#L74上的源代码:
if (qnaMakerResult.score >= threshold && qnaMakerResult.answers.length > 0) {
if (this.isConfidentAnswer(qnaMakerResult) || this.qnaMakerTools == null) {
this.respondFromQnAMakerResult(session, qnaMakerResult);
this.defaultWaitNextMessage(session, qnaMakerResult);
}
else {
this.qnaFeedbackStep(session, qnaMakerResult);
}
}
else {
session.send(noMatchMessage);
this.defaultWaitNextMessage(session, qnaMakerResult);
}
threshold
的默认值为0.3
,因此您的问题可能会进入else
条件,您可以设置较低的threshold
以使您的请求进入{{1 }}。
顺便说一句,主动学习不适用于QnA标记,您可以在https://github.com/Microsoft/BotBuilder/issues/4884上监测问题的进展。
对于第二个问题,您当然可以在常规对话框中使用this.qnaFeedbackStep(session, qnaMakerResult);
来实现LUIS和QnA标记机器人。请考虑以下代码段:
UniversalBot