Ajouter la compréhension du langage naturel à votre botAdd natural language understanding to your bot

s’applique à : SDK v4APPLIES TO: SDK v4

La capacité à comprendre ce que veut dire votre utilisateur du point de vue de la conversation et du contexte peut être une tâche difficile, mais peut donner à votre bot un sens de la conversation plus naturel.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. Le service de compréhension langagière, appelé Language Understanding (LUIS) , est un service d’API cloud qui vous permet justement de faire cela ; votre bot peut ainsi reconnaître l’intention des messages de l’utilisateur, prendre en charge un langage plus naturel de l’utilisateur et mieux orienter le flux de la conversation.Language Understanding (LUIS) is a cloud-based API service that 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.

Cette rubrique vous guide dans l’ajout de LUIS à une application de réservation de vol pour reconnaître les différentes intentions et entités contenues dans les entrées utilisateur.This topic walks you through adding LUIS to a flight booking application to recognize different intents and entities contained within user input.

PrérequisPrerequisites

À propos de cet exempleAbout this sample

Cet exemple de bot de base montre l’exemple d’une application de réservation de vols d’un aéroport.This core bot sample shows an example of an airport flight booking application. Elle utilise un service LUIS pour reconnaître les entrées utilisateur et retourner les premières intentions LUIS reconnues.It uses a LUIS service to recognize the user input and return the top recognized LUIS intent.

Le modèle de langage contient trois intentions : Book Flight, Cancel et None.The language model contains three intents: Book Flight, Cancel, and None. LUIS va utiliser ces intentions pour comprendre ce que l’utilisateur voulait dire lorsqu’il a envoyé un message au bot.LUIS will use these intents to understand what the user meant when they send a message to the bot. Le modèle de langage définit également des entités que LUIS peut extraire de l’entrée de l’utilisateur, notamment l’aéroport d’origine ou de destination.The language model also defines entities that LUIS can extract from the user's input, such as the origin or destination airport.

Après chaque traitement d’entrée utilisateur, DialogBot enregistre l’état actuel de UserState et de ConversationState.After each processing of user input, DialogBot saves the current state of both UserState and ConversationState. Lorsque toutes les informations nécessaires sont réunies, l’exemple de code crée une réservation de vol de démonstration.Once all the required information has been gathered the coding sample creates a demo flight booking reservation. Dans cet article, nous allons aborder les aspects LUIS de cet exemple.In this article we'll be covering the LUIS aspects of this sample. Toutefois, le flux général de l’exemple est présenté ci-dessous :However, the general flow of the sample is shown below:

  • OnMembersAddedAsync est appelé lorsqu’un nouvel utilisateur est connecté et affiche une carte de bienvenue.OnMembersAddedAsync is called when a new user is connected and displays a welcome card.
  • OnMessageActivityAsync est appelé pour chaque entrée d’utilisateur reçue.OnMessageActivityAsync is called for each user input received.

Flux de la logique de l’exemple LUIS

Le module OnMessageActivityAsync exécute le dialogue approprié par le biais de la méthode d’extension de dialogue Run.The OnMessageActivityAsync module runs the appropriate dialog through the Run dialog extension method. La boîte de dialogue principale appelle alors l’assistance LUIS pour rechercher les intentions utilisateur les mieux notées.Then the main dialog calls the LUIS helper to find the the top scoring user intent. Si la meilleure intention pour l’entrée de l’utilisateur retourne « BookFlight », l’assistance remplit les informations de l’utilisateur retournées par LUIS.If the top intent for the user input returns "BookFlight", the helper fills out information from the user that LUIS returned. Après cela, le dialogue principal démarre BookingDialog, qui obtient des informations supplémentaires selon les besoins de l’utilisateur, par exemple :After that, the main dialog starts the BookingDialog, which acquires additional information as needed from the user such as:

  • Origin la ville d’origineOrigin the originating city
  • TravelDate la date de réservation du volTravelDate the date to book the flight
  • Destination la ville de destinationDestination the destination city

Cet article explique comment ajouter LUIS à un bot.This article covers how to add LUIS to a bot. Pour plus d’informations sur l’utilisation de dialogues ou de l’état, consultez le guide pratique pour collecter les entrées utilisateur avec une invite de dialogue ou enregistrer les données d’utilisateur et de conversation, respectivement.For information about using dialogs or state, see how to gather user input using a dialog prompt or save user and conversation data, respectively.

Créer une application LUIS dans le portail LUISCreate a LUIS app in the LUIS portal

  1. Connectez-vous au portail LUIS.Sign in to the LUIS portal.

    • Si vous n’avez pas encore de compte, créez-en un.If you don't already have an account, create one.
    • Si vous n’avez pas encore de ressource de création, créez-en une.If you don't already have an authoring resource, create one.
    • Pour plus d’informations, consultez la documentation de LUIS relative à la manière de vous connecter au portail LUIS.For more information, see the LUIS documentation on how to sign in to the LUIS portal.
  2. Dans la page Mes applications, cliquez sur Nouvelle application de conversation, puis sélectionnez Importer en tant que JSON.On the My Apps page, click New app for conversation and select Import as JSON.

  3. Dans la boîte de dialogue Importer une nouvelle application :In the Import new app dialog:

    1. Sélectionnez le fichier FlightBooking.json dans le dossier CognitiveModels de l’exemple.Choose the FlightBooking.json file in the CognitiveModels folder of the sample.
    2. Entrez FlightBooking en tant que nom facultatif de l’application, puis cliquez sur Terminé.Enter FlightBooking as the optional name of the app, and click Done.
  4. Vous pouvez être invité à mettre à niveau vos entités composites.You may be prompted to upgrade your composite entities. Vous pouvez ignorer cela et cliquer sur me le rappeler plus tard:You can ignore this and click Remind me later:

    ignorer les entités composites

  5. Entraînez et publiez votre application.Train and publish your app. Pour plus d’informations, reportez-vous à la documentation de LUIS relative à la manière d’entraîner et de publier une application dans l’environnement de production.For more information, see the LUIS documentation on how to train and publish an app to the production environment.

Pourquoi utiliser des entitésWhy use entities

Les entités LUIS permettent à votre bot de comprendre intelligemment certains éléments ou événements qui diffèrent des intentions standard.LUIS entities allow your bot to intelligently understand certain things or events that are different than the standard intents. Vous pouvez ainsi collecter des informations supplémentaires auprès de l’utilisateur, ce qui permet à votre bot de répondre plus intelligemment ou même d’ignorer certaines questions visant à obtenir ces mêmes informations.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. En plus des définitions des trois intentions LUIS « Réserver le vol », « Annuler » et « Aucune », le fichier FlightBooking.json contient un ensemble d’entités, telles que « From.Airport » et « 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'. Ces entités permettent à LUIS de détecter et de retourner des informations supplémentaires contenues dans l’entrée d’origine de l’utilisateur, lorsque celui-ci fait une nouvelle demande de réservation de voyage.These entities allow LUIS to detect and return additional information contained within the user's original input when they request a new travel booking.

Obtenir les valeurs de connexion à votre application LUISObtain values to connect to your LUIS app

Une fois votre application LUIS publiée, vous pouvez y accéder à partir de votre bot.Once your LUIS app is published, you can access it from your bot. Vous devrez enregistrer plusieurs valeurs pour accéder à votre application LUIS à partir de votre bot.You will need to record several values to access your LUIS app from within your bot. Vous pouvez récupérer ces informations à l’aide du portail LUIS.You can retrieve that information using the LUIS portal.

Récupérer des informations sur l’application à partir du portail LUIS.aiRetrieve application information from the LUIS.ai portal

Le fichier de paramètres (appsettings.json, .env ou config.py) agit comme lieu de rassemblement pour toutes les références de service.The settings file (appsettings.json, .env or config.py) acts as the place to bring all service references together in one place. Les informations que vous récupérez sont ajoutées à ce fichier dans la section suivante.The information you retrieve will be added to this file in the next section.

  1. Sélectionnez votre application LUIS publiée à partir du portail luis.ai.Select your published LUIS app from luis.ai.
  2. Ouvrez votre application LUIS publiée, et sélectionnez l’onglet MANAGE (Gérer).With your published LUIS app open, select the MANAGE tab.
  3. Sélectionnez l’onglet paramètres sur le côté gauche et enregistrez la valeur affichée pour ID d’application en tant que <YOUR_APP_ID> .Select the Settings tab on the left side and record the value shown for Application ID as <YOUR_APP_ID>.

    Gérer l’application LUIS - Informations sur l’applicationManage LUIS app - Application Information

  4. Sélectionnez l’onglet Azure Resources (Ressources Azure) à gauche, puis sélectionnez le groupe Authoring Resource (Ressource de création).Select the Azure Resources tab on the left side and select the Authoring Resource group. Notez la valeur associée à Location (Emplacement) au format <YOUR_REGION> et à Primary Key (clé primaire) au format <YOUR_AUTHORING_KEY>.Record the value shown for Location as <YOUR_REGION> and Primary Key as <YOUR_AUTHORING_KEY>.

    Gérer les informations de création d’applications LUISManage LUIS app - Authoring Information

Mettre à jour le fichier de paramètresUpdate the settings file

Ajoutez les informations demandées pour accéder à votre application LUIS, y compris l’ID d’application, la clé de création et la région dans le fichier appsettings.json.Add the information required to access your LUIS app including application id, authoring key, and region into the appsettings.json file. Il s’agit des valeurs que vous avez enregistrées précédemment à partir de votre application LUIS publiée.These are the values you saved previously from your published LUIS app. Notez que le nom d’hôte d’API doit être au format <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": ""
}

Configurer votre bot pour qu’il utilise votre application LUISConfigure your bot to use your LUIS app

Vérifiez que le package NuGet Microsoft.Bot.Builder.AI.Luis est installé pour votre projet.Be sure that the Microsoft.Bot.Builder.AI.Luis NuGet package is installed for your project.

Pour vous connecter au service LUIS, le bot tire (pull) du fichier appsetting.json les informations que vous avez ajoutées précédemment.To connect to the LUIS service, the bot pulls the information you added above from the appsetting.json file. La classe FlightBookingRecognizer contient le code avec vos paramètres à partir du fichier appsetting.json et interroge le service LUIS en appelant la méthode RecognizeAsync.The FlightBookingRecognizer class contains code with your settings from the appsetting.json file and queries the LUIS service by calling RecognizeAsync method.

FlightBookingRecognizer.csFlightBookingRecognizer.cs

public class FlightBookingRecognizer : IRecognizer
{
    private readonly LuisRecognizer _recognizer;

    public FlightBookingRecognizer(IConfiguration configuration)
    {
        var luisIsConfigured = !string.IsNullOrEmpty(configuration["LuisAppId"]) && !string.IsNullOrEmpty(configuration["LuisAPIKey"]) && !string.IsNullOrEmpty(configuration["LuisAPIHostName"]);
        if (luisIsConfigured)
        {
            var luisApplication = new LuisApplication(
                configuration["LuisAppId"],
                configuration["LuisAPIKey"],
                "https://" + configuration["LuisAPIHostName"]);
            // Set the recognizer options depending on which endpoint version you want to use.
            // More details can be found in https://docs.microsoft.com/en-gb/azure/cognitive-services/luis/luis-migration-api-v3
            var recognizerOptions = new LuisRecognizerOptionsV3(luisApplication)
            {
                PredictionOptions = new Bot.Builder.AI.LuisV3.LuisPredictionOptions
                {
                    IncludeInstanceData = true,
                }
            };

            _recognizer = new LuisRecognizer(recognizerOptions);
        }
    }

    // Returns true if luis is configured in the appsettings.json and initialized.
    public virtual bool IsConfigured => _recognizer != null;

    public virtual async Task<RecognizerResult> RecognizeAsync(ITurnContext turnContext, CancellationToken cancellationToken)
        => await _recognizer.RecognizeAsync(turnContext, cancellationToken);

    public virtual async Task<T> RecognizeAsync<T>(ITurnContext turnContext, CancellationToken cancellationToken)
        where T : IRecognizerConvert, new()
        => await _recognizer.RecognizeAsync<T>(turnContext, cancellationToken);
}

Le FlightBookingEx.cs contient la logique d’extraction De, À et la TravelDate ; ii étend la classe partielle FlightBooking.cs utilisée pour stocker les résultats de LUIS lors de l’appel de FlightBookingRecognizer.RecognizeAsync<FlightBooking> à partir de la MainDialog.cs.The FlightBookingEx.cs contains the logic to extract From, To and TravelDate; it extends the partial class FlightBooking.cs used to store LUIS results when calling FlightBookingRecognizer.RecognizeAsync<FlightBooking> from the MainDialog.cs.

CognitiveModels\FlightBookingEx.csCognitiveModels\FlightBookingEx.cs

// Extends the partial FlightBooking class with methods and properties that simplify accessing entities in the luis results
public partial class FlightBooking
{
    public (string From, string Airport) FromEntities
    {
        get
        {
            var fromValue = Entities?._instance?.From?.FirstOrDefault()?.Text;
            var fromAirportValue = Entities?.From?.FirstOrDefault()?.Airport?.FirstOrDefault()?.FirstOrDefault();
            return (fromValue, fromAirportValue);
        }
    }

    public (string To, string Airport) ToEntities
    {
        get
        {
            var toValue = Entities?._instance?.To?.FirstOrDefault()?.Text;
            var toAirportValue = Entities?.To?.FirstOrDefault()?.Airport?.FirstOrDefault()?.FirstOrDefault();
            return (toValue, toAirportValue);
        }
    }

    // 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.
    public string TravelDate
        => Entities.datetime?.FirstOrDefault()?.Expressions.FirstOrDefault()?.Split('T')[0];
}

LUIS est à présent configuré et connecté pour votre bot.LUIS is now configured and connected for your bot.

Tester le botTest the bot

Téléchargez et installez la dernière version de Bot Framework Emulator.Download and install the latest Bot Framework Emulator

  1. Exécutez l’exemple en local sur votre machine.Run the sample locally on your machine. Si vous avez besoin d’instructions, consultez le fichier readme de l’exemple en C#, l’exemple en JS ou l’exemple en Python.If you need instructions, refer to the readme file for the C# Sample, JS Sample or Python Sample.

  2. Dans l’émulateur, tapez un message tel que « voyage à Paris » ou « passage de Paris à Berlin ».In the Emulator, type a message such as "travel to paris" or "going from paris to berlin". Utilisez n’importe quel énoncé trouvé dans le fichier FlightBooking.json pour l’apprentissage de l’intention « Réserver un vol ».Use any utterance found in the file FlightBooking.json for training the intent "Book flight".

Entrée de réservation de LUIS

Si la meilleure intention retournée à partir de LUIS correspond à « Réserver un vol », votre bot pose des questions supplémentaires jusqu’à ce qu’il possède suffisamment de renseignements stockés pour créer une réservation de voyage.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. À ce stade, il retourne ces informations de réservation à votre utilisateur.At that point it will return this booking information back to your user.

Résultat de réservation de LUIS

À partir d’ici, la logique du code de bot est réinitialisée et vous pouvez continuer à créer d’autres réservations.At this point the code bot logic will reset and you can continue to create additional bookings.

Informations supplémentairesAdditional information

Pour plus d’informations sur LUIS, consultez sa documentation :For more about LUIS, see the LUIS documentation:

Étapes suivantesNext steps