Verwenden mehrerer LUIS- und QnA-Modelle mit Orchestrator

GILT FÜR: SDK v4

Hinweis

Azure AI QnA Maker wird am 31. März 2025 eingestellt. Ab dem 1. Oktober 2022 können Sie keine neuen QnA Maker-Ressourcen oder Wissensdatenbanken mehr erstellen. Eine neuere Version der Frage- und Antwortfunktion ist jetzt als Teil von Azure AI Language verfügbar.

Benutzerdefinierte Fragebeantwortung, ein Feature von Azure AI Language, ist die aktualisierte Version des QnA Maker-Diensts. Weitere Informationen zur Unterstützung von Fragen und Antworten im Bot Framework SDK finden Sie unter Verstehen natürlicher Sprache.

Hinweis

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

Conversational Language Understanding (CLU), ein Feature von Azure AI Language, ist die aktualisierte Version von LUIS. Weitere Informationen zur Sprachverständnisunterstützung im Bot Framework SDK finden Sie unter Verstehen natürlicher Sprache.

Wenn ein Bot mehrere LUIS-Modelle (Language Understanding) und QnA Maker-Wissensdatenbanken verwendet, können Sie bot Framework Orchestrator verwenden, um zu ermitteln, welches LUIS-Modell oder QnA Maker Wissensdatenbank der Benutzereingabe am besten entspricht. Sie können den bf orchestrator CLI-Befehl verwenden, um eine Orchestrator-Momentaufnahme-Datei zu erstellen, und dann die Momentaufnahme-Datei verwenden, um Benutzereingaben zur Laufzeit an das richtige Modell weiterzuleiten.

In diesem Artikel wird beschrieben, wie Sie eine vorhandene QnA Maker-Wissensdatenbank mit Orchestrator verwenden.

Voraussetzungen

Informationen zu diesem Beispiel

Dieses Beispiel basiert auf einer vordefinierten Gruppe von LUIS- und QnA Maker-Projekten. Um QnA Maker in Ihrem Bot verwenden zu können, benötigen Sie jedoch eine vorhandene Wissensdatenbank im QnA Maker-Portal. Ihr Bot kann dann die Wissensdatenbank verwenden, um die Fragen des Benutzers zu beantworten.

Erwägen Sie für die Entwicklung neuer Bots die Verwendung von Power Virtual Agents. Wenn Sie eine neue Wissensdatenbank für einen Bot Framework SDK-Bot erstellen müssen, lesen Sie die folgenden Artikel zu Azure KI-Diensten:

C#-Klassendiagramm.

OnMessageActivityAsync wird für jede empfangene Benutzereingabe aufgerufen. Dieses Modul ermittelt die Benutzerabsicht mit der höchsten Bewertung und übergibt das Ergebnis an DispatchToTopIntentAsync. DispatchToTopIntentAsync ruft wiederum den entsprechenden App-Handler auf.

  • ProcessSampleQnAAsync - für Fragen zu Bots FAQ.
  • ProcessWeatherAsync für Wetterabfragen
  • ProcessHomeAutomationAsync für Befehle zur Gebäudeautomatisierung (Beleuchtung)

Der Handler ruft den LUIS- oder QnA Maker-Dienst auf und gibt das generierte Ergebnis an den Benutzer zurück.

Erstellen von LUIS-Apps

Bevor Sie eine Orchestrator-Momentaufnahme datei erstellen können, müssen Luis-Apps und QnA-Wissensdatenbanken erstellt und veröffentlicht werden. Der Beispielbot, auf den in diesem Artikel verwiesen wird, verwendet die folgenden Modelle, die im NlP With Orchestrator-Beispiel im \CognitiveModels Ordner enthalten sind:

Name BESCHREIBUNG
HomeAutomation Eine LUIS-App, die eine Absicht zur Gebäudeautomatisierung mit den zugeordneten Entitätsdaten erkennt.
Weather Eine LUIS-App, die Absichten im Zusammenhang mit dem Wetter mithilfe von Standortdaten erkennt.
QnAMaker Eine QnA Maker-Wissensdatenbank, die Antworten auf einfache Fragen zum Bot liefert.

Erstellen der LUIS-Apps

Erstellen Sie LUIS-Apps aus den LU-Dateien HomeAutomation und Weather im Verzeichnis cognitive models des Beispiels.

  1. Führen Sie den folgenden Befehl aus, um die App in der Produktionsumgebung zu importieren, zu trainieren und zu veröffentlichen.

    bf luis:build --in CognitiveModels --authoringKey <YOUR-KEY> --botName <YOUR-BOT-NAME>
    
  2. Notieren Sie sich die Anwendungs-IDs, Anzeigenamen, Erstellungsschlüssel und Speicherort.

Weitere Informationen finden Sie unter Erstellen einer LUIS-App im LUIS-Portal und Abrufen von Werten zum Herstellen einer Verbindung mit Ihrer LUIS-App unter Hinzufügen von Kenntnissen der natürlichen Sprache zu Ihrem Bot und in der LUIS-Dokumentation zum Trainieren und Veröffentlichen einer App in der Produktionsumgebung.

Ermitteln der Werte zum Verbinden Ihres Bots mit der Wissensdatenbank

Hinweis

Azure AI QnA Maker wird am 31. März 2025 eingestellt. Ab dem 1. Oktober 2022 können Sie keine neuen QnA Maker-Ressourcen oder Wissensdatenbanken mehr erstellen. Eine neuere Version der Frage- und Antwortfunktion ist jetzt als Teil von Azure AI Language verfügbar.

Benutzerdefinierte Fragebeantwortung, ein Feature von Azure AI Language, ist die aktualisierte Version des QnA Maker-Diensts. Weitere Informationen zur Unterstützung von Fragen und Antworten im Bot Framework SDK finden Sie unter Verstehen natürlicher Sprache.

Sie benötigen einen vorhandenen Wissensdatenbank sowie Ihren QnA Maker-Hostnamen und -Endpunktschlüssel.

Tipp

Die QnA Maker-Dokumentation enthält Anweisungen zum Erstellen, Trainieren und Veröffentlichen Ihrer Wissensdatenbank.

Erstellen der Orchestrator-Momentaufnahme-Datei

Die CLI-Schnittstelle für das Orchestrator-Tool erstellt die Orchestrator-Momentaufnahme-Datei zum Routing an die richtige LUIS- oder QnA Maker-App zur Laufzeit.

  1. Installieren Sie die neueste unterstützte Version des Visual C++ Redistributable-Pakets.

  2. Öffnen Sie eine Eingabeaufforderung oder ein Terminalfenster, und ändern Sie die Verzeichnisse in das Beispielverzeichnis.

  3. Stellen Sie sicher, dass Sie über die aktuelle Version von npm und die Bot Framework CLI verfügen.

    npm i -g npm
    npm i -g @microsoft/botframework-cli
    
  4. Herunterladen der Orchestrator-Basismodelldatei

    mkdir model
    bf orchestrator:basemodel:get --out ./model
    
  5. Erstellen der Orchestrator-Momentaufnahme-Datei

    mkdir generated
    bf orchestrator:create --hierarchical --in ./CognitiveModels --out ./generated --model ./model
    

Installieren von Paketen

Stellen Sie vor der erstmaligen Ausführung dieser App sicher, dass die folgenden NuGet-Pakete installiert sind:

  • Microsoft.Bot.Builder
  • Microsoft.Bot.Builder.AI.Luis
  • Microsoft.Bot.Builder.AI.QnA
  • Microsoft.Bot.Builder.AI.Orchestrator

Manuelles Aktualisieren der Datei „appsettings.json“

Nachdem alle Dienst-Apps erstellt wurden, müssen der Datei „appsettings.json“ die Informationen für jede dieser Apps hinzugefügt werden. Das erste Beispiel für C#- Code (archiviert) enthält eine leere Datei appsettings.json:

appsettings.json

C# (archiviert)

Fügen Sie für jede der unten aufgeführten Entitäten die Werte hinzu, die Sie in den obigen Schritten notiert haben:

"QnAKnowledgebaseId": "<knowledge-base-id>",
"QnAEndpointKey": "<qna-maker-resource-key>",
"QnAEndpointHostName": "<your-hostname>",

"LuisHomeAutomationAppId": "<app-id-for-home-automation-app>",
"LuisWeatherAppId": "<app-id-for-weather-app>",
"LuisAPIKey": "<your-luis-endpoint-key>",
"LuisAPIHostName": "<your-dispatch-app-region>",

Speichern Sie diese Datei, nachdem alle Änderungen erfolgt sind.

Herstellen einer Verbindung mit den Diensten über Ihren Bot

Um eine Verbindung mit den LUIS- und QnA Maker-Diensten herzustellen, ruft Ihr Bot Informationen aus der Einstellungsdatei ab.

In BotServices.cs werden die in der Konfigurationsdatei appsettings.json enthaltenen Informationen verwendet, um Ihren Orchestrator-Bot mit den HomeAutomationWeather Diensten und SampleQnA zu verbinden. Die Konstruktoren verwenden die von Ihnen angegebenen Werte, um eine Verbindung mit diesen Diensten herzustellen.

BotServices.cs

C# (archiviert)

Aufrufen der Dienste über Ihren Bot

Für jede Eingabe von Ihrem Benutzer übergibt die Botlogik die Benutzereingabe an Orchestrator-Erkennung, sucht die am häufigsten zurückgegebene Absicht und verwendet diese Informationen, um den entsprechenden Dienst für die Eingabe aufzurufen.

Wenn die Methode aufgerufen wird, überprüfen wir in der OnMessageActivityAsync Datei DispatchBot.cs die eingehende Benutzernachricht und rufen die oberste Absicht von Orchestrator-Erkennung ab. Anschließend übergeben wir das topIntent und recognizerResult an die richtige Methode, um den Dienst aufzurufen und das Ergebnis zurückzugeben.

bots\DispatchBot.cs

C# (archiviert)

Verwenden der Erkennungsergebnisse

Wenn die Orchestrator-Erkennung ein Ergebnis erzeugt, gibt sie an, welcher Dienst die Äußerung am besten verarbeiten kann. Der Code in diesem Bot leitet die Anforderung an den entsprechenden Dienst weiter und fasst anschließend die Antwort des aufgerufenen Diensts zusammen. Abhängig von der von Orchestrator zurückgegebenen Absicht verwendet dieser Code die zurückgegebene Absicht, um an das richtige LUIS-Modell oder den richtigen QnA-Dienst weiterzuleiten.

bots\DispatchBot.cs

C# (archiviert)

Die ProcessHomeAutomationAsync Methoden und ProcessWeatherAsync verwenden die Benutzereingabe im Turnkontext, um die oberste Absicht und Entitäten aus dem richtigen LUIS-Modell abzurufen.

Die ProcessSampleQnAAsync -Methode verwendet die Benutzereingabe, die im Turnkontext enthalten ist, um eine Antwort aus dem Wissensdatenbank zu generieren und das Ergebnis dem Benutzer anzuzeigen.

Hinweis

Bei einer Produktionsanwendung würden die ausgewählten LUIS-Methoden an dieser Stelle eine Verbindung mit dem jeweiligen Dienst herstellen, die Benutzereingabe übergeben und die zurückgegebenen Daten für die LUIS-Absichten und -Entitäten verarbeiten.

Testen Ihres Bots

  1. Starten Sie den Beispielcode in Ihrer Entwicklungsumgebung. Notieren Sie sich die localhost-Adresse , die in der Adressleiste des von Ihrer App geöffneten Browserfensters angezeigt wird: https://localhost:<Port_Number>.

  2. Öffnen Sie Bot Framework Emulator, und klicken Sie auf die Schaltfläche Bot öffnen.

  3. Geben Sie im Dialogfeld Bot öffnen die URL des Botendpunkts ein, z. B http://localhost:3978/api/messages. . Klicke auf Verbinden.

  4. Zu Referenzzwecken sind hier einige Fragen und Befehle aufgeführt, die von den für Ihren Bot erstellten Diensten verarbeitet werden:

    • QnA Maker
      • hi, good morning
      • what are you, what do you do
    • LUIS (Gebäudeautomatisierung)
      • turn on bedroom light
      • turn off bedroom light
      • make some coffee
    • LUIS (Wetter)
      • whats the weather in redmond washington
      • what's the forecast for london
      • show me the forecast for nebraska

Weiterleiten von Benutzeräußerungen an QnA Maker

  1. Geben Sie im Emulator den Text hi ein, und übermitteln Sie die Äußerung. Der Bot sendet diese Abfrage an Orchestrator und erhält eine Antwort zurück, die angibt, welche untergeordnete App diese Äußerung für die weitere Verarbeitung erhalten soll.

  2. Wenn Sie die Orchestrator Recognition Trace Zeile im Protokoll auswählen, können Sie die JSON-Antwort im Emulator anzeigen. Das Orchestratorergebnis wird im Inspector angezeigt.

    {
    "type": "trace",
    "timestamp": "2021-05-01T06:26:04.067Z",
    "serviceUrl": "http://localhost:58895",
    "channelId": "emulator",
    "from": {
      "id": "36b2a460-aa43-11eb-920f-7da472b36492",
      "name": "Bot",
      "role": "bot"
    },
    "conversation": {
      "id": "17ef3f40-aa46-11eb-920f-7da472b36492|livechat"
    },
    "recipient": {
      "id": "5f8c6123-2596-45df-928c-566d44426556",
      "role": "user"
    },
    "locale": "en-US",
    "replyToId": "1a3f70d0-aa46-11eb-8b97-2b2a779de581",
    "label": "Orchestrator Recognition",
    "valueType": "OrchestratorRecognizer",
    "value": {
      "text": "hi",
      "alteredText": null,
      "intents": {
        "QnAMaker": {
          "score": 0.9987310956576168
        },
        "HomeAutomation": {
          "score": 0.3402091165577196
        },
        "Weather": {
          "score": 0.24092200496795158
        }
      },
      "entities": {},
      "result": [
        {
          "Label": {
            "Type": 1,
            "Name": "QnAMaker",
            "Span": {
              "Offset": 0,
              "Length": 2
            }
          },
          "Score": 0.9987310956576168,
          "ClosestText": "hi"
        },
        {
          "Label": {
            "Type": 1,
            "Name": "HomeAutomation",
            "Span": {
              "Offset": 0,
              "Length": 2
            }
          },
          "Score": 0.3402091165577196,
          "ClosestText": "make some coffee"
        },
        {
          "Label": {
            "Type": 1,
            "Name": "Weather",
            "Span": {
              "Offset": 0,
              "Length": 2
            }
          },
          "Score": 0.24092200496795158,
          "ClosestText": "soliciting today's weather"
        }
      ]
    },
    "name": "OrchestratorRecognizerResult",
    "id": "1ae65f30-aa46-11eb-8b97-2b2a779de581",
    "localTimestamp": "2021-04-30T23:26:04-07:00"
    }
    

    Da die Äußerung , hiTeil der QnAMaker-Absicht des Orchestrator ist und als topScoringIntentausgewählt ist, sendet der Bot eine zweite Anforderung, diesmal an die QnA Maker-App, mit der gleichen Äußerung.

  3. Wählen Sie die QnAMaker Trace Zeile im Emulatorprotokoll aus. Das QnA Maker-Ergebnis wird im Inspektor angezeigt.

    {
        "questions": [
            "hi",
            "greetings",
            "good morning",
            "good evening"
        ],
        "answer": "Hello!",
        "score": 1,
        "id": 96,
        "source": "QnAMaker.tsv",
        "metadata": [],
        "context": {
            "isContextOnly": false,
            "prompts": []
        }
    }
    

[Python (archiviert)]: (https://github.com/microsoft/BotBuilder-Samples/tree/main/archive/samples/python/14.nlp-with-orchestrator