使用文本翻译器制作多语言QnA Bot

时间:2019-10-16 19:24:59

标签: azure-bot-service azure-cognitive-services

我有一个想要添加双语支持的QnA机器人。我的目标是使用Azure中的文本翻译器认知服务根据用户的初始联系来识别用户的语言,将其翻译为英语以搜索QnA知识库,然后将答案翻译回用户的语言。

QnA机器人作为Web服务托管在Azure上。我在编程方面具有初学者的知识,并且在网络上找到的一些支持超出了我的脑海。

将文本翻译器与QnA机器人集成的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

您的QnA机器人只是与QnA Maker API交互的机器人。

因此,在您的情况下,更简单的处理方法是在查询QnA Maker之前先翻译接收到的消息,然后在收到答复后对其答复进行反向翻译。

如果您查看QnA Maker here的Bot Builder示例,则可以看到使用Microsoft.Bot.Builder.AI.QnA的查询:

protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
    var httpClient = _httpClientFactory.CreateClient();

    var qnaMaker = new QnAMaker(new QnAMakerEndpoint
    {
        KnowledgeBaseId = _configuration["QnAKnowledgebaseId"],
        EndpointKey = _configuration["QnAEndpointKey"],
        Host = _configuration["QnAEndpointHostName"]
    },
    null,
    httpClient);

    _logger.LogInformation("Calling QnA Maker");

    // The actual call to the QnA Maker service.
    var response = await qnaMaker.GetAnswersAsync(turnContext);
    if (response != null && response.Length > 0)
    {
        await turnContext.SendActivityAsync(MessageFactory.Text(response[0].Answer), cancellationToken);
    }
    else
    {
        await turnContext.SendActivityAsync(MessageFactory.Text("No QnA Maker answers were found."), cancellationToken);
    }
}

如您所见,呼叫await qnaMaker.GetAnswersAsync(turnContext)直接使用turnContext,而不是文本本身。

在进行此调用之前,您必须修改“活动”文本。在这里,您可以使用Microsoft的Translator Text API进行翻译。它可以自动检测输入语言(但如果您已经知道,最好提供该值)。

然后,您必须在回复中翻译response[0].Answer

翻译器API的参考在这里:https://docs.microsoft.com/en-us/azure/cognitive-services/translator/reference/v3-0-translate

注意:有一个库目前在Bot Builder示例中与翻译有关:https://github.com/microsoft/BotBuilder-Samples/tree/master/experimental/multilingual-luis/csharp_dotnetcore/Libraries/Microsoft.Bot.Builder.AI.Translation

我没有在答复中提及它,因为由于实验状态,我没有时间检查。