Как добавить LUIS в существующий бот QnA? - PullRequest
0 голосов
/ 04 июля 2019

У меня есть существующий бот 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 в этот бот?

1 Ответ

1 голос
/ 09 июля 2019

Вы можете добавить LUIS к существующему боту QnA, но вы по сути будете копировать большой код из этого образца , так что почти быстрее просто начать с образца и скопировать любой код, который вы хотите сохранить от существующего QnA Bot.

Ваша OnMessageActivity должна выглядеть не так, как this , где он напрямую вызывает клиент qnamaker, а выглядеть как this , где ввод пользователя передается в приложение диспетчеризации 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 и * 1020. * класс в вашем проекте вместе с другими изменениями.

Весь процесс задокументирован здесь .

...