Hinzufügen von Features zum Verstehen natürlicher Sprache zu Ihrem Bot

GILT FÜR: SDK v4

Hinweis

Language Understanding (LUIS) wird am 1. Oktober 2025 eingestellt. Ab dem 1. April 2023 können Sie keine neuen LUIS-Ressourcen erstellen. Eine neuere Version von Language Understanding ist jetzt als Teil von Azure KI Language verfügbar.

Conversational Language Understanding (CLU), ein Feature von Azure KI Language, ist die aktualisierte Version von LUIS. Weitere Informationen zur Unterstützung von Language Understanding im Bot Framework SDK finden Sie unter Natürliches Sprachverständnis.

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

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.

Hinweis

Die Bot Framework-JavaScript-, C#- und Python-SDKs werden weiterhin unterstützt, das Java SDK wird jedoch eingestellt und der langfristige Support endet im November 2023. Es werden nur kritische Sicherheits- und Programmfehlerbehebungen innerhalb dieses Repositorys durchgeführt.

Bestehende Bots, die mit dem Java SDK erstellt wurden, werden weiterhin funktionieren.

Wenn Sie einen neuen Bot erstellen möchten, sollten Sie den Einsatz von Power Virtual Agents in Betracht ziehen und sich über die Auswahl der richtigen Chatbot-Lösung informieren.

Weitere Informationen finden Sie unter Die Zukunft des Bot-Buildings.

Voraussetzungen

Informationen zu diesem Beispiel

Dieses Core Bot-Beispiel zur Sprachgenerierung veranschaulicht eine Flugbuchungsanwendung. Im Beispiel wird ein LUIS-Dienst verwendet, um die Benutzereingabe zu erkennen und die erkannte LUIS-Absicht mit der höchsten Bewertung zurückzugeben.

Das Sprachmodell enthält drei Absichten: Book Flight, Cancel und None. LUIS verwendet diese Absichten, um zu verstehen, was der Benutzer gemeint hat, als er eine Nachricht an den Bot gesendet hat. Das Sprachmodell definiert außerdem Entitäten, die LUIS aus der Eingabe des Benutzers extrahieren kann, z. B. den Start- oder den Zielflughafen.

Nach jeder Verarbeitung der Benutzereingabe speichert DialogBot den aktuellen Zustand von UserState und ConversationState. Nachdem alle erforderlichen Informationen erfasst wurden, erstellt das Codebeispiel eine Demobuchungsreservierung für einen Flug. In diesem Artikel werden die LUIS-Aspekte des Beispiels behandelt. Der allgemeine Flow für das Beispiel ist jedoch:

  • OnMembersAddedAsync wird aufgerufen, wenn ein neuer Benutzer verbunden und eine Begrüßungskarte angezeigt wird.
  • OnMessageActivityAsync wird für jede empfangene Benutzereingabe aufgerufen.

Class diagram outlining the structure of the C# sample.

Das OnMessageActivityAsync-Modul führt den entsprechenden Dialog über die Run-Dialogerweiterungsmethode aus. Der Hauptdialog ruft das LUIS-Hilfsprogramm auf, um die Benutzerabsicht mit der höchsten Bewertung zu ermitteln. 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. Anschließend wird vom Hauptdialog der BookingDialog gestartet, mit dem zusätzliche Informationen nach Bedarf vom Benutzer abgerufen werden, z. B.:

  • Origin: Startort
  • TravelDate: Datum, für das der Flug gebucht werden soll
  • Destination: Zielort

In diesem Artikel wird beschrieben, wie Sie einem Bot LUIS hinzufügen. Informationen über die Verwendung von Dialogen oder Zustandsinformationen finden Sie unter Erfassen von Benutzereingaben mit einer Dialogeingabeaufforderung bzw. Speichern von Benutzer- und Unterhaltungsdaten.

Erstellen einer LUIS-App im LUIS-Portal

  1. Melden Sie sich beim LUIS-Portal an und erstellen Sie bei Bedarf ein Konto und eine Autorenressource.
  2. Wählen Sie auf der Seite Konversationsanwendungen in LUIS die Option Importieren und dann Als JSON importieren aus.
  3. Im Dialogfeld Neue App importieren:
    1. Wählen Sie im Ordner CognitiveModels des Beispiels die Datei FlightBooking.json aus.
    2. Geben Sie FlightBooking als optionalen Namen der App ein und klicken Sie auf Fertig.
  4. Auf der Website können die Dialoge Wie man eine effektive LUIS-App erstellt und Aktualisieren Sie Ihre zusammengesetzten Einheiten angezeigt werden. Sie können diese Dialoge schließen und fortfahren.
  5. Trainieren Sie Ihre App und veröffentlichen Sie ihre App dann in der Produktionsumgebung. Weitere Informationen finden Sie in der LUIS-Dokumentation zum Trainieren und Veröffentlichen einer App.

Gründe für die Verwendung von Entitäten

LUIS-Entitäten ermöglichen Ihrem Bot, Ereignisse über Standardabsichten hinaus zu verstehen. Auf diese Weise können Sie zusätzliche Informationen von Benutzern sammeln, damit Ihr Bot Fragen stellen und intelligenter antworten kann. 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“. 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.

Abrufen von Werten zum Herstellen einer Verbindung mit Ihrer LUIS-App

Nachdem Ihre LUIS-App veröffentlicht wurde, können Sie von Ihrem Bot aus darauf zugreifen. Sie müssen sich mehrere Werte notieren, um von Ihrem Bot aus auf Ihre LUIS-App zugreifen zu können. Sie können diese Informationen mit dem LUIS-Portal abrufen.

Anwendungsinformationen vom Portal LUIS.ai abrufen

In der Einstellungsdatei (appsettings.json, .env oder config.py) werden alle Dienstverweise an einer Stelle zusammengefasst. Die von Ihnen abgerufenen Informationen werden dieser Datei im nächsten Abschnitt hinzugefügt.

  1. Wählen Sie Ihre veröffentlichte LUIS-App unter luis.ai aus.

  2. Wählen Sie bei geöffneter veröffentlichter LUIS-App die Registerkarte VERWALTEN.

  3. Wählen Sie auf der linken Seite die Registerkarte Einstellungen und notieren Sie sich den Wert, der unter Anwendungs-ID angezeigt wird, als <YOUR_APP_ID>.

    Screenshot of the Manage page displaying your application ID.

  4. Wählen Sie Azure-Ressourcen und dann Vorhersageressource aus. Notieren Sie sich die folgenden Werte: Region als <YOUR_REGION> und Primärschlüssel als <YOUR_AUTHORING_KEY>.

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

    Alternativ können Sie die Region und den Primärschlüssel für Ihre Autorenressource verwenden.

Aktualisieren der Einstellungsdatei

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). Im vorherigen Schritt haben Sie diese Werte aus Ihrer veröffentlichten LUIS-App abgerufen. Der API-Hostname sollte im Format <your region>.api.cognitive.microsoft.com angegeben werden.

appsetting.json

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

Konfigurieren Sie Ihren Bot für die Verwendung Ihrer LUIS-App

Stellen Sie sicher, dass das NuGet-Paket Microsoft.Bot.Builder.AI.Luis für Ihr Projekt installiert ist.

Zum Herstellen einer Verbindung mit dem LUIS-Dienst pullt der Bot die Informationen, die Sie in der Datei „appsetting.json“ hinzugefügt haben. 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.

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);
}

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.

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 ist jetzt für Ihren Bot konfiguriert und verbunden.

Testen des Bots

Laden Sie die aktuelle Version von Bot Framework Emulator herunter, und installieren Sie sie.

  1. Führen Sie das Beispiel lokal auf Ihrem Computer aus. Wenn Sie eine Anleitung benötigen, finden Sie in der README-Datei für das C#-Beispiel, JS-Beispiel oder Python-Beispiel weitere Informationen.

  2. Geben Sie im Emulator eine Nachricht wie „travel to Paris“ oder „going from Paris to Berlin“ ein. Verwenden Sie alle Äußerungen in der Datei „FlightBooking.json“ zum Trainieren der Absicht „Book flight“ (Flug buchen).

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. An diesem Punkt werden die vorliegenden Buchungsinformationen an den Benutzer zurückgegeben.

Der Code der Botlogik wird an diesem Punkt zurückgesetzt, und Sie können mit dem Erstellen weiterer Buchungen fortfahren.

Weitere Informationen

Weitere Informationen zu LUIS finden Sie in der LUIS-Dokumentation:

Tipp

In verschiedenen Teilen des SDK werden separate Entitätsklassen oder Elemente definiert. Informationen zu den Nachrichtenentitäten finden Sie unter Entitäts- und Aktivitätstypen.