我有一个想要添加双语支持的QnA机器人。我的目标是使用Azure中的文本翻译器认知服务根据用户的初始联系来识别用户的语言,将其翻译为英语以搜索QnA知识库,然后将答案翻译回用户的语言。
QnA机器人作为Web服务托管在Azure上。我在编程方面具有初学者的知识,并且在网络上找到的一些支持超出了我的脑海。
将文本翻译器与QnA机器人集成的最佳方法是什么?
答案 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
我没有在答复中提及它,因为由于实验状态,我没有时间检查。