在 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/

https://westus.dev.cognitive.microsoft.com/docs/services/5a93fcf85b4ccd136866eb37/operations/knowledgebases_getknowledgebasesforuser

除此之外,您还必须创建自己的意图和您要定位的知识库之间的关系图。不过,一旦你完成了这项工作,接收意图并根据你的映射分派到适当的 KB 就是一件简单的事情。