Adicionar reconhecimento de idioma natural ao seu botAdd natural language understanding to your bot

APLICA-SE A: simv4 SDK não v3 SDK APPLIES TO: yesSDK v4 no SDK v3

A capacidade de entender o que seu usuário quer dizer contextualmente e em conversas pode ser uma tarefa difícil, mas pode dar ao seu bot uma sensação de conversa mais natural.The ability to understand what your user means conversationally and contextually can be a difficult task, but can provide your bot a more natural conversation feel. O Language Understanding, chamado LUIS, permite que você faça exatamente isso para que seu bot possa reconhecer a intenção das mensagens do usuário, permitir uma linguagem mais natural do seu usuário e direcionar melhor o fluxo de conversação.Language Understanding, called LUIS, enables you to do just that so that your bot can recognize the intent of user messages, allow for more natural language from your user, and better direct the conversation flow. Este tópico explica como adicionar LUIS a um aplicativo de reservas de voo para reconhecer intenções e entidades diferentes contidas na entrada do usuário.This topic walks you through adding LUIS to a flight booking application to recognize different intents and entities contained within user input.

Pré-requisitosPrerequisites

Sobre este exemploAbout this sample

Este exemplo de codificação de core bot mostra um exemplo de um aplicativo de reservas de voo do aeroporto.This core bot coding sample shows an example of an airport flight booking application. Ele usa um serviço do LUIS para reconhecer a entrada do usuário e retornar a melhor intenção reconhecida pelo LUIS.It uses a LUIS service to recognize the user input and return the the top recognized LUIS intent.

Após cada processamento da entrada do usuário, DialogBot salva o estado atual de UserState e ConversationState.After each processing of user input, DialogBot saves the current state of both UserState and ConversationState. Após a coleta de todas as informações necessárias, o exemplo de codificação cria uma reserva de reserva de voo de demonstração.Once all the required information has been gathered the coding sample creates a demo flight booking reservation. Neste artigo, abordaremos os aspectos LUIS deste exemplo.In this article we'll be covering the LUIS aspects of this sample. No entanto, o fluxo geral do exemplo é mostrado a seguir:However, the general flow of the sample is shown below:

  • OnMembersAddedAsync é chamado quando um novo usuário é conectado e exibe um cartão de boas-vindas.OnMembersAddedAsync is called when a new user is connected and displays a welcome card.
  • OnMessageActivityAsync é chamado em cada entrada do usuário recebida.OnMessageActivityAsync is called for each user input received.

Fluxo lógico do exemplo do LUIS

O módulo OnMessageActivityAsync executa o diálogo apropriado por meio do método de extensão de diálogo Run.The OnMessageActivityAsync module runs the appropriate dialog through the Run dialog extension method. Esse diálogo principal chama o auxiliar do LUIS para localizar a intenção do usuário com melhor pontuação.That main dialog calls the LUIS helper to find the the top scoring user intent. Se a melhor intenção da entrada do usuário retornar "Book_Flight", o auxiliar preencherá as informações do usuário que o LUIS retornou e iniciará o BookingDialog, que adquirirá informações adicionais conforme a necessidade do usuário, como:If the top intent for the user input returns "Book_Flight", the helper fills out information from the user that LUIS returned, and starts the BookingDialog, which acquires additional information as needed from the user such as

  • Origin A cidade de origem.Origin the originating city.
  • TravelDate A data da reserva do voo.TravelDate the date to book the flight.
  • Destination A cidade de destino.Destination the destination city.

Para obter detalhes sobre outros aspectos do exemplo, como diálogos ou estado, confira Coletar entradas do usuário usando um prompt de diálogo ou Salvar dados do usuário e da conversa.For details on the other aspects of the sample like dialogs or state, see Gather user input using a dialog prompt or Save user and conversation data.

Criar um aplicativo LUIS no portal do LUISCreate a LUIS app in the LUIS portal

Entrar no portal do LUIS para criar sua própria versão do exemplo de aplicativo LUIS.Sign in to the LUIS portal to create your own version of the sample LUIS app. Você pode criar e gerenciar seus aplicativos em Meus Aplicativos.You can create and manage your applications on My Apps.

  1. Selecione Importar novos aplicativos.Select Import new app.
  2. Clique em Escolher arquivo do aplicativo (formato JSON)...Click Choose App file (JSON format)...
  3. Selecione o arquivo FlightBooking.json localizado na parta CognitiveModels do exemplo.Select FlightBooking.json file located in the CognitiveModels folder of the sample. No Nome opcional, insira FlightBooking.In the Optional Name, enter FlightBooking. Esse arquivo contém três intenções: “Reservar voo”, “Cancelar” e “Nenhum”.This file contains three intents: 'Book Flight', 'Cancel', and 'None'. Vamos usar essas intenções para entender o que o usuário pretende ao enviar uma mensagem ao bot.We'll use these intents to understand what the user meant when they send a message to the bot.
  4. Treine o aplicativo.Train the app.
  5. Publique o aplicativo no ambiente de produção.Publish the app to production environment.

Por que usar entidades?Why use entities

As entidades LUIS permitem que seu bot entenda determinadas coisas ou eventos diferentes das intenções padrão.LUIS entities allow your bot to intelligently understand certain things or events that are different than the standard intents. Assim, você pode coletar mais informações do usuário, o que permite que seu bot responda de forma mais inteligente ou ignore algumas perguntas nas quais ele pede essas informações ao usuário.This enables you to gather extra information from the user, which lets your bot respond more intelligently or possibly skip certain questions where it asks the user for that information. Além das definições das três intenções do LUIS (“Reservar voo, “Cancelar” e “Nenhum”), o arquivo FlightBooking.json também contém um conjunto de entidades, como “From.Airport” e “To.Airport”.Along with definitions for the three LUIS intents 'Book Flight', 'Cancel', and 'None' the FlightBooking.json file also contains a set of entities such as 'From.Airport' and 'To.Airport'. Essas entidades permitem que o LUIS detecte e retorne informações adicionais contidas na entrada original do usuário, quando ele solicitar uma nova reserva de viagem.These entities allow LUIS to detect and return additional information contained within the user's original input when they request a new travel booking.

Para obter informações de como as informações de entidade aparecem no resultado do LUIS, confira Extrair dados de texto de enunciado com intenções e entidades.For information on how entity information appears in a LUIS result, see Extract data from utterance text with intents and entities.

Obter valores para conectar ao seu aplicativo LUISObtain values to connect to your LUIS app

Após a publicação de seu aplicativo LUIS, acesse-o no bot.Once your LUIS app is published, you can access it from your bot. Será necessário registrar vários valores para acessar seu aplicativo LUIS no bot.You will need to record several values to access your LUIS app from within your bot. Você pode recuperar essas informações usando o portal do LUIS.You can retrieve that information using the LUIS portal.

Recupere as informações do aplicativo no portal LUIS.aiRetrieve application information from the LUIS.ai portal

O arquivo de configurações (appsettings.json ou .env) age como um único local para reunir todas as referências de serviço.The settings file (appsettings.json or .env) acts as the place to bring all service references together in one place. As informações que você recupera serão adicionadas a esse arquivo na próxima seção.The information you retrieve will be added to this file in the next section.

  1. Marque seu aplicativo LUIS publicado em luis.ai.Select your published LUIS app from luis.ai.
  2. Com o aplicativo LUIS publicado aberto, escolha a guia GERENCIAR. Gerenciar aplicativo LUISWith your published LUIS app open, select the MANAGE tab. Manage LUIS app
  3. Escolha a guia Informações do Aplicativo no lado esquerdo, registre o valor mostrado para ID do Aplicativo como <ID_DO_SEU_APLICATIVO>.Select the Application Information tab on the left side, record the value shown for Application ID as <YOUR_APP_ID>.
  4. Escolha a guia Chaves e Pontos de Extremidade no lado esquerdo, registre o valor mostrado para Chave de Criação como <SUA_CHAVE_DE_CRIAÇÃO>.Select the Keys and Endpoints tab on the left side, record the value shown for Authoring Key as <YOUR_AUTHORING_KEY>.
  5. Role para baixo até o final da página, registre o valor mostrado para Região como <YOUR_REGION>.Scroll down to the end of the page, record the value shown for Region as <YOUR_REGION>.

Atualizar o arquivo de configuraçõesUpdate the settings file

Adicione as informações necessárias para acessar o aplicativo LUIS, incluindo ID do aplicativo, chave de criação e região, ao arquivo appsettings.json.Add the information required to access your LUIS app including application id, authoring key, and region into the appsettings.json file. Estes são os valores que você salvou anteriormente de seu aplicativo LUIS publicado.These are the values you saved previously from your published LUIS app. Lembre-se de que o nome do host da API deve estar no formato <your region>.api.cognitive.microsoft.com.Note that the API host name should be in the format <your region>.api.cognitive.microsoft.com.

appsetting.jsonappsetting.json

{
  "MicrosoftAppId": "",
  "MicrosoftAppPassword": "",
  "LuisAppId": "",
  "LuisAPIKey": "",
  "LuisAPIHostName": ""
}

Configure seu bot para usar seu aplicativo LUISConfigure your bot to use your LUIS app

Verifique se o pacote do NuGet Microsoft.Bot.Builder.AI.Luis está instalado para o seu projeto.Be sure that the Microsoft.Bot.Builder.AI.Luis NuGet package is installed for your project.

Para se conectar ao serviço do LUIS, o bot extrai as informações adicionadas acima do arquivo appsetting.json.To connect to the LUIS service, the bot pulls the information you added above from the appsetting.json file. A classe LuisHelper contém código que importa as configurações do arquivo appsetting.json e consultas o serviço do LUIS chamando o método RecognizeAsync.The LuisHelper class contains code that imports your settings from the appsetting.json file and queries the LUIS service by calling RecognizeAsync method. Se a melhor intenção retornada for “Book_Flight”, ele procurará entidades que contenham as informações To, From e TravelDate.If the top intent returned is 'Book_Flight' it then checks for entities containing the booking To, From, and TravelDate information.

LuisHelper.csLuisHelper.cs

public static class LuisHelper
{
    public static async Task<BookingDetails> ExecuteLuisQuery(IConfiguration configuration, ILogger logger, ITurnContext turnContext, CancellationToken cancellationToken)
    {
        var bookingDetails = new BookingDetails();

        try
        {
            // Create the LUIS settings from configuration.
            var luisApplication = new LuisApplication(
                configuration["LuisAppId"],
                configuration["LuisAPIKey"],
                "https://" + configuration["LuisAPIHostName"]
            );

            var recognizer = new LuisRecognizer(luisApplication);

            // The actual call to LUIS
            var recognizerResult = await recognizer.RecognizeAsync(turnContext, cancellationToken);

            var (intent, score) = recognizerResult.GetTopScoringIntent();
            if (intent == "Book_flight")
            {
                // We need to get the result from the LUIS JSON which at every level returns an array.
                bookingDetails.Destination = recognizerResult.Entities["To"]?.FirstOrDefault()?["Airport"]?.FirstOrDefault()?.FirstOrDefault()?.ToString();
                bookingDetails.Origin = recognizerResult.Entities["From"]?.FirstOrDefault()?["Airport"]?.FirstOrDefault()?.FirstOrDefault()?.ToString();

                // This value will be a TIMEX. And we are only interested in a Date so grab the first result and drop the Time part.
                // TIMEX is a format that represents DateTime expressions that include some ambiguity. e.g. missing a Year.
                bookingDetails.TravelDate = recognizerResult.Entities["datetime"]?.FirstOrDefault()?["timex"]?.FirstOrDefault()?.ToString().Split('T')[0];
            }
        }
        catch (Exception e)
        {
            logger.LogWarning($"LUIS Exception: {e.Message} Check your LUIS configuration.");
        }

        return bookingDetails;
    }
}

Agora, o LUIS está configurado e conectado ao seu bot.LUIS is now configured and connected for your bot.

Testar o botTest the bot

Baixe e instale o Bot Framework Emulator mais recenteDownload and install the latest Bot Framework Emulator

  1. Execute o exemplo localmente em seu computador.Run the sample locally on your machine. Se você precisar de instruções, veja Exemplo de C# ou Exemplo de JS no arquivo LEIAME.If you need instructions, refer to the readme file for either the C# Sample or JS Sample.

  2. No emulador, digite uma mensagem, como "viagem para paris" ou "ir de paris para berlim".In the emulator, type a message such as "travel to paris" or "going from paris to berlin". Use qualquer enunciado encontrado no arquivo FlightBooking.json para treinar a intenção "Reservar voo".Use any utterance found in the file FlightBooking.json for training the intent "Book flight".

Entrada de reserva do LUIS

Se a melhor intenção retornada pelo LUIS for "Reservar voo", seu bot fará perguntas adicionais até que tenha informações suficientes armazenadas para criar uma reserva de viagem.If the top intent returned from LUIS resolves to "Book flight" your bot will ask additional questions until it has enough information stored to create a travel booking. Nesse ponto, ele retornará essas informações de reserva para o usuário.At that point it will return this booking information back to your user.

Resultado da reserva do LUIS

Nesse momento, a lógica de bot do código reiniciará e você poderá continuar a criar reservas adicionais.At this point the code bot logic will reset and you can continue to create additional bookings.

Próximas etapasNext steps