我有一个 QnA 机器人,我正在尝试为其添加双语支持。我的目标是使用 Azure 中的文本翻译器认知服务根据用户的初始联系人识别用户的语言,将其翻译成英语以搜索 QnA 知识库,然后将答案翻译回用户的语言。
QnA 机器人作为 Web 服务托管在 Azure 上。我在编程方面有初级水平的知识,我在网络上找到的一些支持远远超出了我的头脑。
将文本转换器与 QnA 机器人集成的最佳方法是什么?
QnA 机器人只是一个与 QnA Maker API 交互的机器人。
因此,在你的情况下,更简单的处理方法是在查询 QnA Maker 之前翻译收到的消息,然后在获得回复后对其回复执行反向翻译。
如果在此处查看 QnA Maker 的机器人生成器示例,可以看到使用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中的文本翻译 API 进行翻译。它可以自动检测输入语言(但如果您已经知道它,最好提供值(。
然后,您必须翻译回复中的response[0].Answer
。
翻译器 API 的参考如下:https://learn.microsoft.com/en-us/azure/cognitive-services/translator/reference/v3-0-translate
注意:有一个库目前正在机器人生成器示例中进行有关翻译的实验:https://github.com/microsoft/BotBuilder-Samples/tree/master/experimental/multilingual-luis/csharp_dotnetcore/Libraries/Microsoft.Bot.Builder.AI.Translation
我没有在我的回复中提到它,因为我没有时间检查并且由于它的实验状态。