在 LUIS 中具有多个 QnA Maker 知识库和意图的聊天机器人 - sdk v4 C#
Chatbot with Multiple QnA Maker Knowledge Base and Intents in LUIS - sdk v4 C#
我正在开发一个机器人,目前有一个 KB 通过调度工具映射到 LUIS 中的一个 Intent。我按照 this 文章创建了调度。
我想在同一个 QnA 服务中创建更多 KB,并通过创建调度文件将它们映射到多个意图。我关注的 Microsoft 文章使用 Case
switch 语句来确定多个意图。这对我来说似乎非常依赖代码。
问题是:如果我通过调度文件创建多个意图和知识库,有没有办法摆脱这些 case switch 语句?或者我必须为每个知识库创建多个 case switch 语句,以便机器人映射到正确的知识库?
我有以下代码:
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 的名称时更改代码。任何想法如何绕过这个?
Microsoft 提供了一个使用认知服务的 QnA Maker 包 API,您可以从那里下载并存储所有 KB、它们的 ID 和它们的数据的列表。
https://www.nuget.org/packages/Microsoft.Bot.Builder.AI.QnA/
除此之外,您还必须创建自己的意图和您要定位的知识库之间的关系图。不过,一旦你完成了这项工作,接收意图并根据你的映射分派到适当的 KB 就是一件简单的事情。
我正在开发一个机器人,目前有一个 KB 通过调度工具映射到 LUIS 中的一个 Intent。我按照 this 文章创建了调度。
我想在同一个 QnA 服务中创建更多 KB,并通过创建调度文件将它们映射到多个意图。我关注的 Microsoft 文章使用 Case
switch 语句来确定多个意图。这对我来说似乎非常依赖代码。
问题是:如果我通过调度文件创建多个意图和知识库,有没有办法摆脱这些 case switch 语句?或者我必须为每个知识库创建多个 case switch 语句,以便机器人映射到正确的知识库?
我有以下代码:
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 的名称时更改代码。任何想法如何绕过这个?
Microsoft 提供了一个使用认知服务的 QnA Maker 包 API,您可以从那里下载并存储所有 KB、它们的 ID 和它们的数据的列表。
https://www.nuget.org/packages/Microsoft.Bot.Builder.AI.QnA/
除此之外,您还必须创建自己的意图和您要定位的知识库之间的关系图。不过,一旦你完成了这项工作,接收意图并根据你的映射分派到适当的 KB 就是一件简单的事情。