Hinzufügen von Features zum Verstehen natürlicher Sprache zu Ihrem BotAdd natural language understanding to your bot

gilt für: SDK v4APPLIES TO: SDK v4

Die Fähigkeit zu verstehen, was Ihr Benutzer in einer Konversation und im Kontext meint, kann eine schwierige Aufgabe sein, Ihrem Bot aber ein natürlicheres Sprachgefühl verleihen.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. Language Understanding (LUIS) ist ein cloudbasierter API-Dienst, der Ihnen genau dies ermöglicht, sodass Ihr Bot die Absicht von Benutzernachrichten bestimmen, mehr natürliche Sprache von Ihrem Benutzer erkennen und den Konversationsablauf besser steuern kann.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.

In diesem Thema wird Schritt für Schritt erläutert, wie Sie LUIS einer Anwendung zur Flugbuchung hinzufügen, um verschiedene Absichten und Entitäten zu erkennen, die in der Eingabe des Benutzers enthalten sind.This topic walks you through adding LUIS to a flight booking application to recognize different intents and entities contained within user input.

VoraussetzungenPrerequisites

Informationen zu diesem BeispielAbout this sample

Dieses Core Bot-Beispiel zur Sprachgenerierung veranschaulicht eine Flugbuchungsanwendung.This core bot sample shows an example of an airport flight booking application. Im Beispiel wird ein LUIS-Dienst verwendet, um die Benutzereingabe zu erkennen und die erkannte LUIS-Absicht mit der höchsten Bewertung zurückzugeben.It uses a LUIS service to recognize the user input and return the top recognized LUIS intent.

Das Sprachmodell enthält drei Absichten: Book Flight, Cancel und None.The language model contains three intents: Book Flight, Cancel, and None. LUIS verwendet diese Absichten, um zu verstehen, was der Benutzer gemeint hat, als er eine Nachricht an den Bot gesendet hat.LUIS will use these intents to understand what the user meant when they send a message to the bot. Das Sprachmodell definiert außerdem Entitäten, die LUIS aus der Eingabe des Benutzers extrahieren kann, z. B. den Start- oder den Zielflughafen.The language model also defines entities that LUIS can extract from the user's input, such as the origin or destination airport.

Nach jeder Verarbeitung der Benutzereingabe speichert DialogBot den aktuellen Zustand von UserState und ConversationState.After each processing of user input, DialogBot saves the current state of both UserState and ConversationState. Nachdem alle erforderlichen Informationen erfasst wurden, erstellt das Codebeispiel eine Demobuchungsreservierung für einen Flug.Once all the required information has been gathered the coding sample creates a demo flight booking reservation. In diesem Artikel werden die LUIS-Aspekte des Beispiels behandelt.In this article we'll be covering the LUIS aspects of this sample. Den allgemeinen Flow für das Beispiel zeigt das unten stehende Diagramm:However, the general flow of the sample is shown below:

  • OnMembersAddedAsync wird aufgerufen, wenn ein neuer Benutzer verbunden und eine Begrüßungskarte angezeigt wird.OnMembersAddedAsync is called when a new user is connected and displays a welcome card.
  • OnMessageActivityAsync wird für jede empfangene Benutzereingabe aufgerufen.OnMessageActivityAsync is called for each user input received.

Logikflow des LUIS-Beispiels

Das OnMessageActivityAsync-Modul führt den entsprechenden Dialog über die Run-Dialogerweiterungsmethode aus.The OnMessageActivityAsync module runs the appropriate dialog through the Run dialog extension method. Der Hauptdialog ruft dann das LUIS-Hilfsprogramm auf, um die Benutzerabsicht mit der höchsten Bewertung zu ermitteln.Then the main dialog calls the LUIS helper to find the the top scoring user intent. Wenn für die Benutzereingabe als am höchsten bewertete Absicht „BookFlight“ (Flug buchen) zurückgegeben wird, fügt das Hilfsprogramm die Informationen des Benutzers ein, der von LUIS zurückgegeben wurde.If the top intent for the user input returns "BookFlight", the helper fills out information from the user that LUIS returned. Anschließend wird vom Hauptdialog der BookingDialog gestartet, mit dem zusätzliche Informationen nach Bedarf vom Benutzer abgerufen werden, z. B.:After that, the main dialog starts the BookingDialog, which acquires additional information as needed from the user such as:

  • Origin: StartortOrigin the originating city
  • TravelDate: Datum, für das der Flug gebucht werden sollTravelDate the date to book the flight
  • Destination: ZielortDestination the destination city

In diesem Artikel wird beschrieben, wie Sie einem Bot LUIS hinzufügen.This article covers how to add LUIS to a bot. Informationen über die Verwendung von Dialogen oder Zustandsinformationen finden Sie unter Erfassen von Benutzereingaben mit einer Dialogeingabeaufforderung bzw. Speichern von Benutzer- und Unterhaltungsdaten.For information about using dialogs or state, see how to gather user input using a dialog prompt or save user and conversation data, respectively.

Erstellen einer LUIS-App im LUIS-PortalCreate a LUIS app in the LUIS portal

  1. Melden Sie sich beim LUIS-Portal an.Sign in to the LUIS portal.

    • Wenn Sie noch kein Konto besitzen, erstellen Sie eins.If you don't already have an account, create one.
    • Wenn Sie noch nicht über eine Erstellungsressource verfügen, erstellen Sie eine.If you don't already have an authoring resource, create one.
    • Weitere Informationen finden Sie in der LUIS-Dokumentation zum Anmelden beim LUIS-Portal.For more information, see the LUIS documentation on how to sign in to the LUIS portal.
  2. Klicken Sie auf der Seite Meine Apps auf die Option + Neue App für Unterhaltung, und wählen Sie dann Als JSON importieren aus.On the My Apps page, click New app for conversation and select Import as JSON.

  3. Im Dialogfeld Neue App importieren:In the Import new app dialog:

    1. Wählen Sie im Ordner CognitiveModels des Beispiels die Datei FlightBooking.json aus.Choose the FlightBooking.json file in the CognitiveModels folder of the sample.
    2. Geben Sie FlightBooking als optionalen Namen der App ein, und klicken Sie auf Fertig.Enter FlightBooking as the optional name of the app, and click Done.
  4. Möglicherweise werden Sie aufgefordert, ihre zusammengesetzten Entitäten zu aktualisieren.You may be prompted to upgrade your composite entities. Sie können dies ignorieren und später auf Erinnern klicken:You can ignore this and click Remind me later:

    ignore-composite-entities

  5. Trainieren und veröffentlichen Sie Ihre App.Train and publish your app. Weitere Informationen finden Sie in der LUIS-Dokumentation zum Trainieren und Veröffentlichen einer App in der Produktionsumgebung.For more information, see the LUIS documentation on how to train and publish an app to the production environment.

Gründe für die Verwendung von EntitätenWhy use entities

Mit LUIS-Entitäten kann Ihr Bot auf intelligente Weise bestimmte Dinge oder Ereignisse verstehen, die von Standardabsichten abweichen.LUIS entities allow your bot to intelligently understand certain things or events that are different than the standard intents. So können Sie zusätzliche Informationen vom Benutzer sammeln, um die Antwort des Bots intelligenter zu gestalten oder auch bestimmte Fragen zu überspringen, mit denen diese Informationen vom Benutzer abgefragt werden.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. Neben den Definitionen für die drei LUIS-Absichten „Book Flight“ (Flug buchen), „Cancel“ (Abbrechen) und „None“ (Keine) enthält die Datei „FlightBooking.json“ auch eine Gruppe von Entitäten, z. B. „From.Airport“ und „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'. Mithilfe dieser Entitäten kann LUIS zusätzliche Informationen in der ursprünglichen Eingabe des Benutzers erkennen und zurückgeben, wenn der Benutzer eine neue Buchung anfordert.These entities allow LUIS to detect and return additional information contained within the user's original input when they request a new travel booking.

Abrufen von Werten zum Herstellen einer Verbindung mit Ihrer LUIS-AppObtain values to connect to your LUIS app

Nachdem Ihre LUIS-App veröffentlicht wurde, können Sie von Ihrem Bot aus darauf zugreifen.Once your LUIS app is published, you can access it from your bot. Sie müssen sich mehrere Werte notieren, um von Ihrem Bot aus auf Ihre LUIS-App zugreifen zu können.You will need to record several values to access your LUIS app from within your bot. Sie können diese Informationen mit dem LUIS-Portal abrufen.You can retrieve that information using the LUIS portal.

Abrufen von Anwendungsinformationen aus dem Portal „LUIS.ai“Retrieve application information from the LUIS.ai portal

In der Einstellungsdatei (appsettings.json, .env oder config.py) werden alle Dienstverweise an einer Stelle zusammengefasst.The settings file (appsettings.json, .env or config.py) acts as the place to bring all service references together in one place. Die von Ihnen abgerufenen Informationen werden dieser Datei im nächsten Abschnitt hinzugefügt.The information you retrieve will be added to this file in the next section.

  1. Wählen Sie Ihre veröffentlichte LUIS-App unter luis.ai aus.Select your published LUIS app from luis.ai.
  2. Wählen Sie bei geöffneter veröffentlichter LUIS-App die Registerkarte VERWALTEN.With your published LUIS app open, select the MANAGE tab.
  3. Wählen Sie auf der linken Seite die Registerkarte Einstellungen aus, und noten Sie sich den Für Anwendungs-ID angezeigten Wert als <YOUR_APP_ID> .Select the Settings tab on the left side and record the value shown for Application ID as <YOUR_APP_ID>.

    Verwalten der LUIS-App: AnwendungsinformationenManage LUIS app - Application Information

  4. Wählen Sie auf der linken Seite die Registerkarte Azure-Ressourcen und dann die Gruppe Erstellungsressource aus.Select the Azure Resources tab on the left side and select the Authoring Resource group. Notieren Sie den für Standort angezeigten Wert als <YOUR_REGION> und den Primärschlüssel als <YOUR_AUTHORING_KEY>.Record the value shown for Location as <YOUR_REGION> and Primary Key as <YOUR_AUTHORING_KEY>.

    Verwalten der LUIS-App : ErstellungsinformationenManage LUIS app - Authoring Information

Aktualisieren der EinstellungsdateiUpdate the settings file

Fügen Sie in der appsettings.json-Datei die erforderlichen Informationen für den Zugriff auf Ihre LUIS-App hinzu (einschließlich Anwendungs-ID, Erstellungsschlüssel und Region).Add the information required to access your LUIS app including application id, authoring key, and region into the appsettings.json file. Dies sind die Werte, die Sie zuvor aus Ihrer veröffentlichten LUIS-App gespeichert haben.These are the values you saved previously from your published LUIS app. Beachten Sie, dass der API-Hostname im Format <your region>.api.cognitive.microsoft.com angegeben werden muss.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": ""
}

Konfigurieren Sie Ihren Bot für die Verwendung Ihrer LUIS-AppConfigure your bot to use your LUIS app

Stellen Sie sicher, dass das NuGet-Paket Microsoft.Bot.Builder.AI.Luis für Ihr Projekt installiert ist.Be sure that the Microsoft.Bot.Builder.AI.Luis NuGet package is installed for your project.

Zum Herstellen einer Verbindung mit dem LUIS-Dienst pullt der Bot die Informationen, die Sie oben hinzugefügt haben, aus der Datei „appsetting.json“.To connect to the LUIS service, the bot pulls the information you added above from the appsetting.json file. Die FlightBookingRecognizer-Klasse enthält Code mit Ihren Einstellungen aus der Datei „appsetting.json“ und fragt den LUIS-Dienst durch das Aufrufen der RecognizeAsync-Methode ab.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);
}

Die Datei FlightBookingEx.cs enthält die Logik zum Extrahieren der Werte von From, To und TravelDate. Die verwendete partielle Klasse FlightBooking.cs wird erweitert, um LUIS-Ergebnisse beim Aufrufen von FlightBookingRecognizer.RecognizeAsync<FlightBooking> aus MainDialog.cs zu speichern.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 ist jetzt für Ihren Bot konfiguriert und verbunden.LUIS is now configured and connected for your bot.

Testen des BotsTest the bot

Laden Sie die aktuelle Version von Bot Framework Emulator herunter, und installieren Sie sie.Download and install the latest Bot Framework Emulator

  1. Führen Sie das Beispiel lokal auf Ihrem Computer aus.Run the sample locally on your machine. Wenn Sie Anweisungen benötigen, lesen Sie die README Datei für das C#-Beispiel, JS-Beispiel oder Python-Beispiel.If you need instructions, refer to the README file for the C# Sample, JS Sample or Python Sample.

  2. Geben Sie im Emulator eine Nachricht ein, z.B. "Travel to paris" (Nach Paris reisen) oder "Going from paris to lassen".In the Emulator, type a message such as "travel to paris" or "going from paris to berlin". Verwenden Sie alle Äußerungen in der Datei „FlightBooking.json“ zum Trainieren der Absicht „Book flight“ (Flug buchen).Use any utterance found in the file FlightBooking.json for training the intent "Book flight".

LUIS-Buchungseingabe

Wenn die von LUIS zurückgegebene Absicht mit der höchsten Bewertung zu „Book flight“ (Flug buchen) aufgelöst wird, stellt Ihr Bot weitere Fragen, bis er genügend Informationen zum Erstellen einer Flugbuchung hat.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. An diesem Punkt werden die vorliegenden Buchungsinformationen an den Benutzer zurückgegeben.At that point it will return this booking information back to your user.

LUIS-Buchungsergebnis

Der Code der Botlogik wird an diesem Punkt zurückgesetzt, und Sie können mit dem Erstellen weiterer Buchungen fortfahren.At this point the code bot logic will reset and you can continue to create additional bookings.

Zusätzliche InformationenAdditional information

Weitere Informationen zu LUIS finden Sie in der LUIS-Dokumentation:For more about LUIS, see the LUIS documentation:

Nächste SchritteNext steps