LUIS 中具有多个 QnA Maker 知识库和意图的聊天机器人 - sdk v4 C#

我正在开发一个机器人,目前通过调度工具将 1 KB 映射到 LUIS 中的一个 Intent。我按照这篇文章创建了调度。


我想在同一个 QnA 服务中创建更多知识库,并通过创建调度文件将它们映射到多个意图。我关注的 Microsoft 文章使用Caseswitch 语句来确定多个意图。这对我来说似乎非常依赖代码。


问题是:如果我通过调度文件创建多个意图和知识库,是否有办法摆脱这些 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 的名称发生更改时也必须更改代码。有什么想法如何绕过这个吗?


隔江千里
浏览 75回答 1
1回答

翻阅古今

Microsoft 提供了一个利用认知服务 API 的 QnA Maker 软件包,您可以从那里下载并存储所有 KB、其 ID 和数据的列表。https://www.nuget.org/packages/Microsoft.Bot.Builder.AI.QnA/https://westus.dev.cognitive.microsoft.com/docs/services/5a93fcf85b4ccd136866eb37/operations/knowledgebases_getknowledgebasesforuser除此之外,您还必须创建自己的意图与您想要定位的知识库之间的关系图。不过,一旦完成此操作,接收意图并根据您的映射分派到适当的知识库就变得很简单。
打开App,查看更多内容
随时随地看视频慕课网APP