【发布时间】:2018-12-29 20:30:21
【问题描述】:
我正在尝试将 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 结果,我将 dailogs 称为
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 意图重定向到适当的对话框。
但我在上述代码中面临两个挑战:
- intentsDialog 匹配 qna 时,并且 qna 没有直接的 ans 并提供选项供选择。在这种情况下,我无法捕获用户选择的选项并将其发送到 qna 主动学习代码。(我覆盖 qnaMakerDialog.defaultWaitNextMessage 以将新问题存储到 KB)
- 当 intentsDialog 与 qna 和 luis 不匹配时,即使在这种情况下,我也希望将数据发送到 qna 主动学习部分但无法发送。
有没有其他方法,比如不使用 IntentDialog 并将上下文转发到 qna。提前致谢。
【问题讨论】:
标签: node.js botframework azure-language-understanding qnamaker