我正在开发一个机器人,该机器人目前已通过调度工具将1 KB映射到LUIS中的一个Intent。我按照this的文章来创建调度。
我想在同一QnA服务中创建更多KB,并通过创建调度文件将它们映射到多个意图。我遵循的Microsoft文章使用Case
switch语句来确定多个意图。这似乎非常依赖我的代码。
问题是:如果我创建多个意图并且KB的直通分发文件有办法摆脱这些大小写转换语句?还是我必须为每个知识库创建多个大小写转换语句,以便该bot映射到正确的知识库?
我有以下代码:
private async Task DispatchToTopIntentAsync(ITurnContext<IMessageActivity>
turnContext, string intent, RecognizerResult recognizerResult,
CancellationToken cancellationToken)
{
switch (intent)
{
case "l_HomeAutomation":
await ProcessHomeAutomationAsync(turnContext,
recognizerResult.Properties["luisResult"] as LuisResult,
cancellationToken);
break;
case "l_Weather":
await ProcessWeatherAsync(turnContext, recognizerResult.Properties["luisResult"] as LuisResult, cancellationToken);
break;
//case "q_sample-qna":
case "q_CivicSampleFAQ":
await ProcessSampleQnAAsync(turnContext, cancellationToken);
break;
default:
_logger.LogInformation($"Dispatch unrecognized intent: {intent}.");
// await turnContext.SendActivityAsync(MessageFactory.Text($"Dispatch unrecognized intent: {intent}."), cancellationToken);
break;
}
}
基本上,案例q_CivicSampleFAQ
确定所处理的意图应获得QnA Maker KB的答复。如果我有多个KB,则可以创建多个案例,但这会限制我每次拥有新KB或即使旧KB的名称已更改时也要更改代码。有想法如何绕过这个吗?
答案 0 :(得分:1)
Microsoft提供了一个QnA Maker软件包,该软件包利用了Cognitive Services API,您可以从那里下载并存储所有KB,它们的ID和数据的列表。
https://www.nuget.org/packages/Microsoft.Bot.Builder.AI.QnA/
除此之外,您还必须在意图和要定位的知识库之间创建自己的关系图。不过,一旦完成此操作,只需接收一个意图并根据您的映射将其分配到适当的KB即可。