如何在 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();
        }
    }
});