Delen via


Meerdere LUIS- en QnA-modellen gebruiken met Orchestrator

VAN TOEPASSING OP: SDK v4

Notitie

Azure AI QnA Maker wordt op 31 maart 2025 buiten gebruik gesteld. Vanaf 1 oktober 2022 kunt u geen nieuwe resources of kennisbanken voor QnA Maker maken. Een nieuwere versie van de vraag- en antwoordmogelijkheid is nu beschikbaar als onderdeel van Azure AI Language.

Aangepaste vraagantwoorden, een functie van Azure AI Language, is de bijgewerkte versie van de QnA Maker-service. Zie Natuurlijke taalbegrip voor meer informatie over vraag- en antwoordondersteuning in de Bot Framework SDK.

Notitie

Language Understanding (LUIS) wordt op 1 oktober 2025 buiten gebruik gesteld. Vanaf 1 april 2023 kunt u geen nieuwe LUIS-resources maken. Er is nu een nieuwere versie van taalkennis beschikbaar als onderdeel van Azure AI Language.

Conversational Language Understanding (CLU), een functie van Azure AI Language, is de bijgewerkte versie van LUIS. Zie Natuurlijke taalkennis voor meer informatie over ondersteuning voor taalkennis in de Bot Framework SDK.

Als een bot gebruikmaakt van meerdere LUIS-modellen (Language Understanding) en QnA Maker-knowledge bases, kunt u Bot Framework Orchestrator gebruiken om te bepalen welk LUIS-model of QnA Maker-knowledge base het beste overeenkomt met de gebruikersinvoer. U kunt de bf orchestrator CLI-opdracht gebruiken om een Orchestrator-momentopnamebestand te maken en vervolgens het momentopnamebestand te gebruiken om gebruikersinvoer tijdens runtime naar het juiste model te routeren.

In dit artikel wordt beschreven hoe u een bestaande QnA Maker-knowledge base gebruikt met Orchestrator.

Vereisten

Over dit voorbeeld

Dit voorbeeld is gebaseerd op een vooraf gedefinieerde set LUIS- en QnA Maker-projecten. Als u echter QnA Maker in uw bot wilt gebruiken, hebt u een bestaande knowledge base nodig in de QnA Maker-portal . Uw bot kan vervolgens de Knowledge Base gebruiken om de vragen van de gebruiker te beantwoorden.

Voor het ontwikkelen van nieuwe bots kunt u Copilot Studio gebruiken. Als u een nieuwe knowledge base voor een Bot Framework SDK-bot moet maken, raadpleegt u de volgende artikelen over Azure AI-services:

C#-klassediagram.

OnMessageActivityAsync wordt aangeroepen voor elke ontvangen gebruikersinvoer. Deze module vindt de meest scorende gebruikersintentie en geeft dat resultaat door aan DispatchToTopIntentAsync. DispatchToTopIntentAsync roept op zijn beurt de juiste app-handler aan.

  • ProcessSampleQnAAsync - voor veelgestelde vragen over bot.
  • ProcessWeatherAsync - voor weerquery's.
  • ProcessHomeAutomationAsync - voor opdrachten voor thuisverlichting.

De handler roept de LUIS- of QnA Maker-service aan en retourneert het gegenereerde resultaat terug naar de gebruiker.

LUIS-apps maken

Voordat u een Orchestrator-momentopnamebestand kunt maken, hebt u LUIS-apps en QnA-knowledge bases nodig die zijn gemaakt en gepubliceerd. De voorbeeldbot waarnaar in dit artikel wordt verwezen, maakt gebruik van de volgende modellen, opgenomen in het NLP With Orchestrator-voorbeeld in de \CognitiveModels map:

Name Beschrijving
HomeAutomation Een LUIS-app die een intentie voor huisautomatisering herkent met gekoppelde entiteitsgegevens.
Weer Een LUIS-app die weergerelateerde intenties met locatiegegevens herkent.
QnAMaker Een QnA Maker-knowledge base die antwoorden biedt op eenvoudige vragen over de bot.

De LUIS-apps maken

Maak LUIS-apps op basis van de HomeAutomation - en Weather .lu-bestanden in de map met cognitieve modellen van het voorbeeld.

  1. Voer de volgende opdracht uit om de app te importeren, trainen en publiceren naar de productieomgeving.

    bf luis:build --in CognitiveModels --authoringKey <YOUR-KEY> --botName <YOUR-BOT-NAME>
    
  2. Noteer de toepassings-id's, weergavenamen, ontwerpsleutel en locatie.

Zie voor meer informatie hoe u een LUIS-app maakt in de LUIS-portal en waarden verkrijgt om verbinding te maken met uw LUIS-app in Natuurlijke taal voor uw bot en de LUIS-documentatie over het trainen en publiceren van een app in de productieomgeving.

Waarden verkrijgen om uw bot te verbinden met de Knowledge Base

Notitie

Azure AI QnA Maker wordt op 31 maart 2025 buiten gebruik gesteld. Vanaf 1 oktober 2022 kunt u geen nieuwe resources of kennisbanken voor QnA Maker maken. Een nieuwere versie van de vraag- en antwoordmogelijkheid is nu beschikbaar als onderdeel van Azure AI Language.

Aangepaste vraagantwoorden, een functie van Azure AI Language, is de bijgewerkte versie van de QnA Maker-service. Zie Natuurlijke taalbegrip voor meer informatie over vraag- en antwoordondersteuning in de Bot Framework SDK.

U hebt een bestaande knowledge base en uw QnA Maker-hostnaam en eindpuntsleutel nodig.

Tip

De QnA Maker-documentatie bevat instructies voor het maken, trainen en publiceren van uw Knowledge Base.

Het Orchestrator-momentopnamebestand maken

De CLI-interface voor het Orchestrator-hulpprogramma maakt het Orchestrator-momentopnamebestand voor routering naar de juiste LUIS- of QnA Maker-app tijdens runtime.

  1. Installeer de meest recente ondersteunde versie van het Visual C++ Redistributable-pakket

  2. Open een opdrachtprompt of terminalvenster en wijzig mappen in de voorbeeldmap

  3. Zorg ervoor dat u de huidige versie van npm en de Bot Framework CLI hebt.

    npm i -g npm
    npm i -g @microsoft/botframework-cli
    
  4. Orchestrator-basismodelbestand downloaden

    mkdir model
    bf orchestrator:basemodel:get --out ./model
    
  5. Het Orchestrator-momentopnamebestand maken

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

Pakketten installeren

Voordat u deze app voor de eerste keer uitvoert, moet u ervoor zorgen dat er verschillende NuGet-pakketten zijn geïnstalleerd:

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

Uw appsettings.json-bestand handmatig bijwerken

Zodra al uw service-apps zijn gemaakt, moet de informatie voor elke app worden toegevoegd aan het bestand 'appsettings.json'. Het eerste voorbeeld voor C# -code (gearchiveerd) bevat een leeg appsettings.json bestand:

appsettings.json

C# (gearchiveerd)

Voeg voor elk van de hieronder weergegeven entiteiten de waarden toe die u eerder in deze instructies hebt genoteerd:

"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>",

Wanneer alle wijzigingen zijn voltooid, slaat u dit bestand op.

Verbinding maken met de services vanuit uw bot

Als u verbinding wilt maken met de LUIS- en QnA Maker-services, haalt uw bot informatie op uit het instellingenbestand.

In BotServices.cs wordt de informatie in het configuratiebestand appsettings.json gebruikt om uw Orchestrator-bot te verbinden met de HomeAutomationen Weather SampleQnA services. De constructors gebruiken de waarden die u hebt opgegeven om verbinding te maken met deze services.

BotServices.cs

C# (gearchiveerd)

De services van uw bot aanroepen

Voor elke invoer van uw gebruiker geeft de botlogica gebruikersinvoer door aan Orchestrator Recognizer, zoekt de meest geretourneerde intentie en gebruikt deze informatie om de juiste service voor de invoer aan te roepen.

In het bestand DispatchBot.cs wanneer de OnMessageActivityAsync methode wordt aangeroepen, controleren we het binnenkomende gebruikersbericht en krijgen we de belangrijkste intentie van Orchestrator Recognizer. Vervolgens geven we de topIntent en recognizerResult de juiste methode door om de service aan te roepen en het resultaat te retourneren.

bots\DispatchBot.cs

C# (gearchiveerd)

Werken met de herkenningsresultaten

Wanneer de Orchestrator recognizer een resultaat produceert, wordt aangegeven welke service de utterance het meest op de juiste manier kan verwerken. De code in deze bot stuurt de aanvraag door naar de bijbehorende service en geeft vervolgens een overzicht van het antwoord van de aangeroepen service. Afhankelijk van de intentie die door Orchestrator wordt geretourneerd, gebruikt deze code de geretourneerde intentie om naar het juiste LUIS-model of de QnA-service te routeren.

bots\DispatchBot.cs

C# (gearchiveerd)

De ProcessHomeAutomationAsync en ProcessWeatherAsync methoden gebruiken de gebruikersinvoer in de turncontext om de belangrijkste intentie en entiteiten op te halen uit het juiste LUIS-model.

De ProcessSampleQnAAsync methode gebruikt de gebruikersinvoer in de turncontext om een antwoord te genereren uit de Knowledge Base en dat resultaat weer te geven aan de gebruiker.

Notitie

Als dit een productietoepassing is, is dit de plek waar de geselecteerde LUIS-methoden verbinding maken met hun opgegeven service, de gebruikersinvoer doorgeven en de geretourneerde LUIS-intentie- en entiteitsgegevens verwerken.

Uw bot testen

  1. Start de voorbeeldcode met behulp van uw ontwikkelomgeving. Let op het localhost-adres dat wordt weergegeven in de adresbalk van het browservenster dat door uw app wordt geopend: https://localhost:<Port_Number>.

  2. Open Bot Framework Emulator en klik op de knop Bot openen.

  3. Voer in het dialoogvenster Een bot openen de URL van uw boteindpunt in, zoals http://localhost:3978/api/messages. Klik op Verbinding maken.

  4. Ter referentie: hier volgen enkele vragen en opdrachten die worden behandeld door de services die voor uw bot zijn gebouwd:

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

Gebruikersuitingen routeren naar QnA Maker

  1. Voer in de emulator de tekst hi in en verzend de utterance. De bot verzendt deze query naar Orchestrator en ontvangt een antwoord dat aangeeft welke onderliggende app deze uiting moet krijgen voor verdere verwerking.

  2. Door de Orchestrator Recognition Trace regel in het logboek te selecteren, ziet u het JSON-antwoord in de emulator. Het Orchestrator-resultaat wordt weergegeven in de Inspector.

    {
    "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"
    }
    

    Omdat de uiting, himaakt deze keer deel uit van de QnAMaker-intentie van Orchestrator en wordt deze keer een tweede aanvraag door de bot verzonden topScoringIntentnaar de QnA Maker-app, met dezelfde uiting.

  3. Selecteer de QnAMaker Trace regel in het emulatorlogboek. Het QnA Maker-resultaat wordt weergegeven in de Inspector.

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

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