如何在 Azure Bot Service 上同时使用英语和法语 QnaMaker?
How to use both English and French QnaMaker on Azure Bot Service at the same time?
我们有一个聊天机器人和它旁边的一个按钮,可以在英语和法语之间切换机器人的语言。我还有一个包含英语和法语问题的 QnAmaker。有没有办法让我们在机器人处于英语模式时只处理英语问题?法语也一样。
Note: my bot react like this:
user: what is teww?
Do you mean this, select one of question below: BOT
1. French question
2. English question
3 French question
我想防止这种情况发生,我正在考虑创建两个 qnamaker,一个用于法语,一个用于英语。但是我不知道如何处理 azure bot 服务中的 qna 更改?有解决办法吗?
平台:Azure 机器人服务
Node.JS
微软 QnA Maker
是的,您可以为您的英语和法语问题创建 2 个单独的 QnAMaker 知识库。您可以利用 Text Analytics API to detect user input language in bot's recevie
middleware which shows at Determine the locale by using analytics.
请参考以下代码片段:
var recognizer1 = new cognitiveservices.QnAMakerRecognizer({
knowledgeBaseId: <knowledgeBaseId_1>,
subscriptionKey: <subscriptionKey_1>,
top: 4
});
var basicQnAMakerDialog = new cognitiveservices.QnAMakerDialog({
recognizers: [recognizer1],
qnaThreshold: 0.3,
});
var recognizer2 = new cognitiveservices.QnAMakerRecognizer({
knowledgeBaseId: <knowledgeBaseId_2>,
subscriptionKey: <subscriptionKey_2>,
top: 4
});
var basicQnAMakerDialog2 = new cognitiveservices.QnAMakerDialog({
recognizers: [recognizer2],
qnaThreshold: 0.3,
});
bot.dialog('en', basicQnAMakerDialog);
bot.dialog('zh', basicQnAMakerDialog2);
bot.dialog('/', [(session, args) => {
switch (session.preferredLocale()) {
case 'zh':
session.replaceDialog('zh', args)
break;
case 'en-US':
default:
session.replaceDialog('en', args)
break;
}
}])
bot.use({
receive: function (event, next) {
if (event.text) {
var options = {
method: 'POST',
url: 'https://westus2.api.cognitive.microsoft.com/text/analytics/v2.0/languages?numberOfLanguagesToDetect=1',
body: {
documents: [{
id: 'message',
text: event.text
}]
},
json: true,
headers: {
'Ocp-Apim-Subscription-Key': '230f82f08c014accbd067ddc2c0ea98f'
}
};
request(options, function (error, response, body) {
if (!error && body) {
if (body.documents && body.documents.length > 0) {
var languages = body.documents[0].detectedLanguages;
if (languages && languages.length > 0) {
event.textLocale = languages[0].iso6391Name;
}
}
}
next();
});
} else {
next();
}
}
});
我们有一个聊天机器人和它旁边的一个按钮,可以在英语和法语之间切换机器人的语言。我还有一个包含英语和法语问题的 QnAmaker。有没有办法让我们在机器人处于英语模式时只处理英语问题?法语也一样。
Note: my bot react like this:
user: what is teww?
Do you mean this, select one of question below: BOT
1. French question
2. English question
3 French question
我想防止这种情况发生,我正在考虑创建两个 qnamaker,一个用于法语,一个用于英语。但是我不知道如何处理 azure bot 服务中的 qna 更改?有解决办法吗?
平台:Azure 机器人服务 Node.JS 微软 QnA Maker
是的,您可以为您的英语和法语问题创建 2 个单独的 QnAMaker 知识库。您可以利用 Text Analytics API to detect user input language in bot's recevie
middleware which shows at Determine the locale by using analytics.
请参考以下代码片段:
var recognizer1 = new cognitiveservices.QnAMakerRecognizer({
knowledgeBaseId: <knowledgeBaseId_1>,
subscriptionKey: <subscriptionKey_1>,
top: 4
});
var basicQnAMakerDialog = new cognitiveservices.QnAMakerDialog({
recognizers: [recognizer1],
qnaThreshold: 0.3,
});
var recognizer2 = new cognitiveservices.QnAMakerRecognizer({
knowledgeBaseId: <knowledgeBaseId_2>,
subscriptionKey: <subscriptionKey_2>,
top: 4
});
var basicQnAMakerDialog2 = new cognitiveservices.QnAMakerDialog({
recognizers: [recognizer2],
qnaThreshold: 0.3,
});
bot.dialog('en', basicQnAMakerDialog);
bot.dialog('zh', basicQnAMakerDialog2);
bot.dialog('/', [(session, args) => {
switch (session.preferredLocale()) {
case 'zh':
session.replaceDialog('zh', args)
break;
case 'en-US':
default:
session.replaceDialog('en', args)
break;
}
}])
bot.use({
receive: function (event, next) {
if (event.text) {
var options = {
method: 'POST',
url: 'https://westus2.api.cognitive.microsoft.com/text/analytics/v2.0/languages?numberOfLanguagesToDetect=1',
body: {
documents: [{
id: 'message',
text: event.text
}]
},
json: true,
headers: {
'Ocp-Apim-Subscription-Key': '230f82f08c014accbd067ddc2c0ea98f'
}
};
request(options, function (error, response, body) {
if (!error && body) {
if (body.documents && body.documents.length > 0) {
var languages = body.documents[0].detectedLanguages;
if (languages && languages.length > 0) {
event.textLocale = languages[0].iso6391Name;
}
}
}
next();
});
} else {
next();
}
}
});