Как добавить LUIS в существующий бот QnA?

У меня есть бот 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 в этого бота?


person Kailash Kumawat    schedule 04.07.2019    source источник
comment
github.com/microsoft/BotBuilder- Samples / tree / master / samples / этот образец должен помочь вам начать работу.   -  person Matt Stannett    schedule 05.07.2019


Ответы (1)


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

Ваша 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 один, и вам нужно будет создать _ 2_ интерфейс и _ 3_ вместе с другими изменениями.

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

person Matt Stannett    schedule 09.07.2019