具有多个QnA Maker知识库和LUIS意图的Chatbot-sdk v4 C#

时间:2019-08-22 22:26:13

标签: c# botframework chatbot luis qnamaker

我正在开发一个机器人,该机器人目前已通过调度工具将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的名称已更改时也要更改代码。有想法如何绕过这个吗?

1 个答案:

答案 0 :(得分:1)

Microsoft提供了一个QnA Maker软件包,该软件包利用了Cognitive Services 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即可。