Freigeben über


Verwenden mehrerer LUIS- und QnA-Modelle mit Orchestrator

GILT FÜR: SDK v4

Hinweis

Azure KI QnA Maker wird am 31. März 2025 eingestellt. Ab dem 01. Oktober 2022 können Sie keine neuen QnA Maker-Ressourcen oder Wissensdatenbanken mehr erstellen. Eine neuere Version der Funktionalität „Fragen und Antworten“ ist jetzt als Teil von Azure KI Language verfügbar.

Benutzerdefiniertes Fragen und Antworten, eine Azure KI Language-Funktion, ist die aktualisierte Version des QnA Maker-Diensts. Weitere Informationen zur Unterstützung von Fragen und Antworten im Bot Framework SDK finden Sie unter Natürliches Sprachverständnis.

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 zu Language Understanding im Bot Framework-SDK finden Sie unter Natürliches Sprachverständnis.

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

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

Voraussetzungen

Informationen zu diesem Beispiel

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

Für die entwicklung neuer Bots sollten Sie Copilot Studio verwenden. Wenn Sie einen neuen Knowledge Base für einen Bot-Framework-SDK-Bot erstellen müssen, lesen Sie die folgenden Artikel zu Azure KI Services:

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 Häufig gestellte Fragen zu Bots.
  • 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-Momentaufnahmedatei erstellen können, benötigen Sie LUIS-Apps und QnA-Wissensdatenbank erstellt und veröffentlicht. Der Beispiel-Bot, 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 Dateien HomeAutomation und Weather .lu im Verzeichnis der kognitiven Modelle 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 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 in natürlicher 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 KI QnA Maker wird am 31. März 2025 eingestellt. Ab dem 01. Oktober 2022 können Sie keine neuen QnA Maker-Ressourcen oder Wissensdatenbanken mehr erstellen. Eine neuere Version der Funktionalität „Fragen und Antworten“ ist jetzt als Teil von Azure KI Language verfügbar.

Benutzerdefiniertes Fragen und Antworten, eine Azure KI Language-Funktion, ist die aktualisierte Version des QnA Maker-Diensts. Weitere Informationen zur Unterstützung von Fragen und Antworten im Bot Framework SDK finden Sie unter Natürliches Sprachverständnis.

Sie benötigen eine vorhandene Wissensdatenbank und 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-Momentaufnahmedatei

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

  1. Installieren der neuesten unterstützten Version des Visual C++-Redistributable-Pakets

  2. Öffnen einer Eingabeaufforderung oder eines Terminalfensters und Ändern von Verzeichnissen 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-Momentaufnahmedatei

    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 anfängliche Beispiel für C# -Code (archiviert) enthält eine leere appsettings.json Datei:

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 enthaltenen Informationen appsettings.json verwendet, um Ihren Orchestrator-Bot mit den HomeAutomationDiensten Weather zu SampleQnA 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 des Benutzers übergibt die Botlogik die Benutzereingabe an die Orchestrator-Erkennung, findet die oberste zurückgegebene Absicht und verwendet diese Informationen, um den entsprechenden Dienst für die Eingabe aufzurufen.

In der DispatchBot.cs Datei, wenn die OnMessageActivityAsync Methode aufgerufen wird, überprüfen wir die eingehende Benutzernachricht und rufen die oberste Absicht von Orchestrator-Erkennung ab. Anschließend übergeben wir die 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 QnA-Dienst weiterzuleiten.

bots\DispatchBot.cs

C# (archiviert)

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

Die ProcessSampleQnAAsync Methode verwendet die im Turnkontext enthaltenen Benutzereingaben, 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.

Bot testen

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

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

  3. Geben Sie im Dialogfeld "Bot öffnen" Ihre Bot-Endpunkt-URL ein, z http://localhost:3978/api/messages. B. . Klicken Sie 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 (Hausautomatisierung)
      • 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 der Benutzerutterung 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 ruft eine Antwort zurück, die angibt, welche untergeordnete App diese Äußerung zur weiteren Verarbeitung erhalten soll.

  2. Wenn Sie die Orchestrator Recognition Trace Zeile im Protokoll auswählen, können Sie die JSON-Antwort im Emulator sehen. Das Orchestrator-Ergebnis wird im Inspektor 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 Teil hider QnAMaker-Absicht von Orchestrator ist und als der topScoringIntentBot ausgewählt wird, wird der Bot eine zweite Anforderung stellen, diesmal an die QnA Maker-App mit derselben Ä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