Ajouter la compréhension du langage naturel à votre bot

S'APPLIQUE À : SDK v4

Remarque

Compréhension du langage (LUIS) sera mis hors service le 1er octobre 2025. À compter du 1er avril 2023, vous ne pourrez pas créer de nouvelles ressources LUIS. Une version plus récente de Compréhension du langage est désormais disponible dans le cadre d'Azure AI Language.

Compréhension du langage conversationnel (CLU), une fonctionnalité d'Azure AI Language, est la version mise à jour de LUIS. Pour plus d'informations sur la prise en charge de compréhension du langage dans le kit de développement logiciel (SDK) Bot Framework, consultez Compréhension du langage naturel.

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. 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.

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.

Remarque

Les kits de développement logiciel (SDK) JavaScript, C# et Python bot Framework continueront d'être pris en charge. Toutefois, le kit de développement logiciel (SDK) Java est mis hors service avec une prise en charge finale à long terme qui prend fin en novembre 2023. Seuls les correctifs de sécurité et de bogues critiques au sein de ce référentiel seront entrepris.

Les bots existants créés avec le kit de développement logiciel (SDK) Java continueront de fonctionner.

Pour la nouvelle génération de bots, envisagez d'utiliser Power Virtual Agents et découvrez comment choisir la solution de chatbot appropriée.

Pour plus d'informations, consultez L'avenir de la construction de bots.

Prérequis

À propos de cet exemple

Cet exemple de bot de base montre l’exemple d’une application de réservation de vols d’un aéroport. Elle utilise un service LUIS pour reconnaître les entrées utilisateur et retourner les premières intentions LUIS reconnues.

Le modèle de langage contient trois intentions : Book Flight, Cancel et None. LUIS va utiliser ces intentions pour comprendre ce que l’utilisateur voulait dire lorsqu’il a envoyé un message au 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.

Après chaque traitement d’entrée utilisateur, DialogBot enregistre l’état actuel de UserState et de ConversationState. Lorsque toutes les informations nécessaires sont réunies, l'exemple de code crée une réservation de vol de démonstration. Dans cet article, nous allons aborder les aspects LUIS de cet exemple. Toutefois, le flux général de l'exemple est :

  • OnMembersAddedAsync est appelé lorsqu’un nouvel utilisateur est connecté et affiche une carte de bienvenue.
  • OnMessageActivityAsync est appelé pour chaque entrée d’utilisateur reçue.

Class diagram outlining the structure of the C# sample.

Le module OnMessageActivityAsync exécute le dialogue approprié par le biais de la méthode d’extension de dialogue Run. La boîte de dialogue principale appelle alors l’assistance LUIS pour rechercher les intentions utilisateur les mieux notées. 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. Après cela, le dialogue principal démarre BookingDialog, qui obtient des informations supplémentaires selon les besoins de l’utilisateur, par exemple :

  • Origin la ville d’origine
  • TravelDate la date de réservation du vol
  • Destination la ville de destination

Cet article explique comment ajouter LUIS à un 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.

Créer une application LUIS dans le portail LUIS

  1. Connectez-vous au portail LUIS et, si nécessaire, créez un compte et une ressource de création.
  2. Sur la page des applications de conversation dans LUIS, sélectionnez Importer, puis Importer en JSON.
  3. Dans le dialogue Importer une nouvelle application :
    1. Sélectionnez le fichier FlightBooking.json dans le dossier CognitiveModels de l’exemple.
    2. Entrez FlightBooking en tant que nom facultatif de l'application, puis sélectionnez Terminé.
  4. Le site peut afficher comment créer une application LUIS efficace et mettre à niveau vos dialogues d'entités composites. Vous pouvez ignorer ces dialogues et continuer.
  5. Entraînez votre application, puis publiez la dans l'environnement de production. Pour plus d'informations, consultez la documentation de LUIS relative à la manière d'entraîner et de publier une application.

Pourquoi utiliser des entités

Les entités LUIS permettent à votre bot de comprendre les événements au-delà des intentions standard. Ainsi, vous pouvez recueillir des informations supplémentaires auprès des utilisateurs, ce qui permet à votre bot de poser des questions et de répondre de manière plus intelligente. 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, comme « From.Airport » et « 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.

Obtenir les valeurs de connexion à votre application LUIS

Une fois votre application LUIS publiée, vous pouvez y accéder à partir de votre bot. Vous devrez enregistrer plusieurs valeurs pour accéder à votre application LUIS à partir de votre bot. Vous pouvez récupérer ces informations à l’aide du portail LUIS.

Récupérer les informations de l’application à partir du portail LUIS.ai

Le fichier de paramètres (appsettings.json, .env ou config.py) agit comme lieu de rassemblement pour toutes les références de service. Les informations que vous récupérez sont ajoutées à ce fichier dans la section suivante.

  1. Sélectionnez votre application LUIS publiée à partir du portail luis.ai.

  2. Ouvrez votre application LUIS publiée, et sélectionnez l’onglet MANAGE (Gérer).

  3. Sélectionnez l'onglet Paramètres sur le côté gauche et enregistrez la valeur indiquée pour l'ID de l'application comme étant < YOUR_APP_ID>.

    Screenshot of the Manage page displaying your application ID.

  4. Sélectionnez Ressources Azure, puis ressource de prédiction. Enregistrez la valeur indiquée pour l'emplacement sous la forme <YOUR_REGION> et la clé primaire sous la forme <YOUR_AUTHORING_KEY>.

    Screenshot of the Manage page displaying your location and primary key.

    Vous pouvez également utiliser la région et la clé primaire pour votre ressource de création.

Mettre à jour le fichier de paramètres

Ajoutez les informations demandées pour accéder à votre application LUIS, notamment l'ID d'application, la clé de création et la région dans le fichier appsettings.json. À l'étape précédente, vous avez récupéré ces valeurs à partir de votre application LUIS publiée. Le nom d'hôte de l'API doit être au format <your region>.api.cognitive.microsoft.com.

appsetting.json

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

Configurer votre bot pour qu’il utilise votre application LUIS

Vérifiez que le package NuGet Microsoft.Bot.Builder.AI.Luis est installé pour votre projet.

Pour se connecter au service LUIS, le bot utilise les informations que vous avez ajoutées au fichier appsetting.json. 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.

FlightBookingRecognizer.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.

CognitiveModels\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.

Tester le bot

Téléchargez et installez la dernière version de Bot Framework Emulator.

  1. Exécutez l’exemple en local sur votre machine. Si vous avez besoin d'instructions, consultez le fichier README de l'exemple C#, de l'exemple JS ou de l'exemple Python.

  2. Dans l'émulateur, saisissez un message, par exemple « voyage à paris » ou « aller de Paris à Berlin ». Utilisez n’importe quel énoncé trouvé dans le fichier FlightBooking.json pour l’apprentissage de l’intention « Réserver un vol ».

Si l'intention principale renvoyée par LUIS est « Réserver un vol », votre bot posera d'autres questions jusqu'à ce qu'il ait stocké suffisamment d'informations pour créer une réservation de voyage. À ce stade, il retourne ces informations de réservation à votre utilisateur.

À ce stade, la logique du bot de code est réinitialisée et vous pouvez continuer à créer d'autres réservations.

Informations supplémentaires

Pour plus d’informations sur LUIS, consultez sa documentation :

Conseil

Les différentes parties du kit de développement logiciel (SDK) définissent des classes d'entités ou des éléments distincts. Pour les entités de message, consultez Types d'entités et d'activités.