我正在使用 Bot Framework 和 Node.js 开发一个聊天机器人。我的目的是用菜单引导用户。我想用户打开机器人,它会自动提示:“嗨,我是你的机器人,你在找什么? - option1 - option2”
一旦用户点击其中一个选项,他可以问我几个与该选项相关的问题,我想我会附上一个特定的 QnA Maker 知识库。
我尝试在网上搜索,并寻找发布在 Github 上的示例,但没有太大帮助。任何人都可以帮我举一个实际的例子吗?提前致谢。
我正在使用 Bot Framework 和 Node.js 开发一个聊天机器人。我的目的是用菜单引导用户。我想用户打开机器人,它会自动提示:“嗨,我是你的机器人,你在找什么? - option1 - option2”
一旦用户点击其中一个选项,他可以问我几个与该选项相关的问题,我想我会附上一个特定的 QnA Maker 知识库。
我尝试在网上搜索,并寻找发布在 Github 上的示例,但没有太大帮助。任何人都可以帮我举一个实际的例子吗?提前致谢。
您可以使用prompts.Choice来执行此操作。这将为用户提供每个选项的按钮 - 用户可以单击它们或键入响应。
因此,如果您定义了QnAMaker 对话框...
var recognizer = new cognitiveservices.QnAMakerRecognizer({
knowledgeBaseId: 'set your kbid here',
subscriptionKey: 'set your subscription key here'});
var basicQnAMakerDialog = new cognitiveservices.QnAMakerDialog({
recognizers: [recognizer],
defaultMessage: 'No match! Try changing the query terms!',
qnaThreshold: 0.3
});
bot.dialog('/QnAMakerDialogue', basicQnAMakerDialog);
您可以根据用户选择的内容使用replaceDialog切换到此对话框...
function (session, results) {
builder.Prompts.choice(session, "Hi I'm your bot you what are you looking for?", ["Ask a question", "Other cool stuff"], {listStyle: builder.ListStyle.button});
},
function (session, results) {
if(results.response) {
switch (results.response.entity) {
case 'Ask a question':
session.replaceDialog('/QnAMakerDialogue');
case 'Other cool stuff':
session.replaceDialog('/CoolStuffDialog');
default:
session.send("Something went horribly wrong");
return;
}
}
}
如果您的用户已回复他们想提出问题,您将需要提示该问题。为此,我有时会使用包装对话 QnAPromptDialogue ...
function (session,args,next) {
//if the user just entered 'ask question' or similar, prompt for the actual question
var regex = new RegExp("^ask .*");
if(regex.test(session.message.text)) {
builder.Prompts.text(session, "Go ahead, what is your question?");
} else {
next();
}
},
function (session, results) {
session.replaceDialog('/QnAMakerDialogue');
}
可能不适用于每个人,但包括以防万一。
一般来说,您可以创建多个 QnAmaker 服务,并在您的机器人应用程序中定义多个 QnAMakerRecognizer
具有不同kb
s 的服务,然后根据您自己的条件在机器人瀑布中利用 来匹配问题recognize()
。QnAMakerRecognizer
快速示例:
var recognizer1 = new cognitiveservices.QnAMakerRecognizer({
knowledgeBaseId: <knowledgeBaseId>,
subscriptionKey: <subscriptionKey>
});
var recognizer2 = new cognitiveservices.QnAMakerRecognizer({
knowledgeBaseId: <knowledgeBaseId>,
subscriptionKey: <subscriptionKey>
});
let QNARecognizer;
bot.dialog('/', [(session, args) => {
var msg = new builder.Message(session)
.text("Select a choice")
.suggestedActions(
builder.SuggestedActions.create(
session, [
builder.CardAction.imBack(session, "option1", "option1"),
builder.CardAction.imBack(session, "option2", "option2"),
]
)
);
builder.Prompts.choice(session, msg, ["option1", "option2"]);
}, (session, results,next) => {
console.log(results);
session.userData.kb = results.response.entity;
switch (results.response.entity) {
case 'option1':
QNARecognizer = recognizer1;
break;
case 'option2':
QNARecognizer = recognizer2;
break;
default:
session.endDialog('not matched');
}
builder.Prompts.text(session,'please ask your quesion');
}, (session, results) => {
QNARecognizer.recognize(session,(err,result)=>{
session.send(result.answers[0].answer);
})
}
])