如何在现有的QnA机器人中添加LUIS?

时间:2019-07-04 18:27:49

标签: c# bots luis azure-bot-service

我有一个现有的QnA机器人(C#,SDK-v4),现在我希望向其中添加LUIS,而无需使用LUIS模板创建新的机器人。

我的QnABot.cs文件-

public class QnABot : ActivityHandler
    {
        private readonly IConfiguration _configuration;
        private readonly ILogger<QnABot> _logger;
        private readonly IHttpClientFactory _httpClientFactory;


        public QnABot(IConfiguration configuration, ILogger<QnABot> logger, IHttpClientFactory httpClientFactory)
        {
            _configuration = configuration;
            _logger = logger;
            _httpClientFactory = httpClientFactory;
        }

        protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
        {
            var httpClient = _httpClientFactory.CreateClient();

            var qnaMaker = new QnAMaker(new QnAMakerEndpoint
            {
                KnowledgeBaseId = _configuration["QnAKnowledgebaseId"],
                EndpointKey = _configuration["QnAAuthKey"],
                Host = GetHostname()
            },
            null,
            httpClient);

            _logger.LogInformation("Calling QnA Maker");

            // The actual call to the QnA Maker service.
            var response = await qnaMaker.GetAnswersAsync(turnContext);
            if (response != null && response.Length > 0)
            {
                awaitturnContext.SendActivityAsync(
              MessageFactory.Text(response[0].Answer), cancellationToken);
            }
            else
            {
                await turnContext.SendActivityAsync(MessageFactory.Text("No QnA Maker answers were found."), cancellationToken);
            }
        }

        private string GetHostname()
        {
            var hostname = _configuration["QnAEndpointHostName"];
            if (!hostname.StartsWith("https://"))
            {
                hostname = string.Concat("https://", hostname);
            }

            if (!hostname.EndsWith("/qnamaker"))
            {
                hostname = string.Concat(hostname, "/qnamaker");
            }

            return hostname;
        }
    }

我知道可以使用知识库分发调度LUIS应用程序的调度工具,但是我不知道如何在该机器人中处理Luis意图。 如何将LUIS集成到该机器人中?

1 个答案:

答案 0 :(得分:1)

您可以将LUIS添加到现有的QnA Bot中,但是实际上您将从this sample复制很多代码,因此从示例开始复制并复制要保留的任何代码几乎更快现有的QnA Bot。

您的OnMessageActivity应该从直接调用qnamaker客户端的thisthis的相似,其中用户的输入传递到LUIS调度应用程序,该应用程序确定将用户路由到的目的。

用户的路由是在[DispatchToTopIntent] https://github.com/microsoft/BotBuilder-Samples/blob/master/samples/csharp_dotnetcore/14.nlp-with-dispatch/Bots/DispatchBot.cs#L51)方法内处理的,case语句中的字符串与门户中LUIS应用程序下的意图名称匹配。

无需赘言,您需要在机器人Microsoft.Bot.Builder.Ai.LUIS中包含一些其他软件包,并且需要在其中创建IBotServices接口和BotServices类。您的项目以及其他更改。

整个过程记录在here中。