Share via


Använda flera LUIS- och QnA-modeller med Orchestrator

GÄLLER FÖR: SDK v4

Anteckning

Azure AI QnA Maker dras tillbaka den 31 mars 2025. Från och med den 1 oktober 2022 kan du inte skapa nya QnA Maker-resurser eller kunskapsbaser. En nyare version av funktionen för frågor och svar är nu tillgänglig som en del av Azure AI Language.

Svar på anpassade frågor, en funktion i Azure AI Language, är den uppdaterade versionen av QnA Maker-tjänsten. Mer information om stöd för frågor och svar i Bot Framework SDK finns i Förstå naturligt språk.

Anteckning

Language Understanding (LUIS) dras tillbaka den 1 oktober 2025. Från och med den 1 april 2023 kan du inte skapa nya LUIS-resurser. En nyare version av språktolkning är nu tillgänglig som en del av Azure AI Language.

Förståelse för konversationsspråk (CLU), en funktion i Azure AI Language, är den uppdaterade versionen av LUIS. Mer information om stöd för språktolkning i Bot Framework SDK finns i Förstå naturligt språk.

Om en robot använder flera Language Understanding-modeller (LUIS) och QnA Maker-kunskapsbaser kan du använda Bot Framework Orchestrator för att avgöra vilken LUIS-modell eller QnA Maker-kunskapsbas bäst matchar användarindata. Du kan använda bf orchestrator CLI-kommandot för att skapa en Orchestrator-ögonblicksbildfil och sedan använda ögonblicksbildfilen för att dirigera användarindata till rätt modell vid körning.

I den här artikeln beskrivs hur du använder en befintlig QnA Maker-kunskapsbas med Orchestrator.

Förutsättningar

Om det här exemplet

Det här exemplet baseras på en fördefinierad uppsättning LUIS- och QnA Maker-projekt. Men om du vill använda QnA Maker i din robot behöver du en befintlig kunskapsbas i QnA Maker-portalen. Roboten kan sedan använda kunskapsbas för att besvara användarens frågor.

Överväg att använda Power Virtual Agents för ny robotutveckling. Om du behöver skapa en ny kunskapsbas för en Bot Framework SDK-robot kan du läsa följande artiklar om Azure AI-tjänster:

C#-klassdiagram.

OnMessageActivityAsync anropas för varje användarindata som tas emot. Den här modulen hittar användar avsikten med högst poäng och skickar resultatet vidare till DispatchToTopIntentAsync. DispatchToTopIntentAsync anropar i sin tur lämplig apphanterare.

  • ProcessSampleQnAAsync – för vanliga frågor och svar om roboten.
  • ProcessWeatherAsync – för väderfrågor.
  • ProcessHomeAutomationAsync - för hembelysningskommandon.

Hanteraren anropar LUIS- eller QnA Maker-tjänsten och returnerar det genererade resultatet tillbaka till användaren.

Skapa LUIS-appar

Innan du kan skapa en Orchestrator-ögonblicksbildfil behöver du LUIS-appar och QnA-kunskapsbaser som skapats och publicerats. Exempelroboten som refereras i den här artikeln använder följande modeller, som ingår i exemplet NLP med Orchestrator i \CognitiveModels mappen :

Name Beskrivning
HomeAutomation En LUIS-app som identifierar en avsikt för hemautomatisering med associerade entitetsdata.
Vädret En LUIS-app som identifierar väderrelaterade avsikter med platsdata.
QnAMaker En QnA Maker-kunskapsbas som ger svar på enkla frågor om roboten.

Skapa LUIS-apparna

Skapa LUIS-appar från filerna HomeAutomation och Weather .lu i katalogen cognitive models i exemplet.

  1. Kör följande kommando för att importera, träna och publicera appen till produktionsmiljön.

    bf luis:build --in CognitiveModels --authoringKey <YOUR-KEY> --botName <YOUR-BOT-NAME>
    
  2. Registrera program-ID:t, visningsnamnen, redigeringsnyckeln och platsen.

Mer information finns i How to Create a LUIS app in the LUIS portal and Obtain values to connect to your LUIS app in Add natural language understanding to your bot and the LUIS documentation on how to train and publish an app to the production environment.

Hämta värden för att ansluta roboten till kunskapsbas

Anteckning

Azure AI QnA Maker dras tillbaka den 31 mars 2025. Från och med den 1 oktober 2022 kan du inte skapa nya QnA Maker-resurser eller kunskapsbaser. En nyare version av funktionen för frågor och svar är nu tillgänglig som en del av Azure AI Language.

Svar på anpassade frågor, en funktion i Azure AI Language, är den uppdaterade versionen av QnA Maker-tjänsten. Mer information om stöd för frågor och svar i Bot Framework SDK finns i Förstå naturligt språk.

Du behöver en befintlig kunskapsbas och QnA Maker-värdnamnet och slutpunktsnyckeln.

Tips

QnA Maker-dokumentationen innehåller instruktioner om hur du skapar, tränar och publicerar din kunskapsbas.

Skapa Orchestrator-ögonblicksbildsfilen

CLI-gränssnittet för Orchestrator-verktyget skapar Orchestrator-ögonblicksbildsfilen för routning till rätt LUIS- eller QnA Maker-app vid körning.

  1. Installera den senaste versionen av Visual C++ Redistributable-paketet som stöds

  2. Öppna en kommandotolk eller ett terminalfönster och ändra kataloger till exempelkatalogen

  3. Kontrollera att du har den aktuella versionen av npm och Bot Framework CLI.

    npm i -g npm
    npm i -g @microsoft/botframework-cli
    
  4. Ladda ned Orchestrator-basmodellfilen

    mkdir model
    bf orchestrator:basemodel:get --out ./model
    
  5. Skapa Orchestrator-ögonblicksbildsfilen

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

Installera paket

Innan du kör den här appen för första gången kontrollerar du att flera NuGet-paket är installerade:

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

Uppdatera filen appsettings.json manuellt

När alla dina tjänstappar har skapats måste informationen för var och en läggas till i filen "appsettings.json". Det första exemplet för C# -kod (arkiverad) innehåller en tom appsettings.json-fil:

appsettings.json

C# (arkiverad)

För var och en av de entiteter som visas nedan lägger du till de värden som du registrerade tidigare i dessa instruktioner:

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

Spara filen när alla ändringar är slutförda.

Ansluta till tjänsterna från din robot

För att ansluta till TJÄNSTERNA LUIS och QnA Maker hämtar roboten information från inställningsfilen.

I BotServices.cs används informationen i konfigurationsfilen appsettings.json för att ansluta din Orchestrator-robot till HomeAutomationtjänsterna , Weather och SampleQnA . Konstruktorerna använder de värden som du angav för att ansluta till dessa tjänster.

BotServices.cs

C# (arkiverad)

Anropa tjänsterna från din robot

För varje indata från användaren skickar robotlogik in användarindata till Orchestrator Recognizer, hittar den främsta returnerade avsikten och använder den informationen för att anropa lämplig tjänst för indata.

I filen DispatchBot.cs när OnMessageActivityAsync metoden anropas kontrollerar vi det inkommande användarmeddelandet och hämtar den främsta avsikten från Orchestrator Recognizer. Vi skickar topIntent sedan och recognizerResult vidare till rätt metod för att anropa tjänsten och returnera resultatet.

bots\DispatchBot.cs

C# (arkiverad)

Arbeta med igenkänningsresultatet

När Orchestrator-identifieraren ger ett resultat anger den vilken tjänst som bäst kan bearbeta yttrandet. Koden i den här roboten dirigerar begäran till motsvarande tjänst och sammanfattar sedan svaret från den anropade tjänsten. Beroende på avsikten som returneras från Orchestrator använder den här koden den returnerade avsikten för att dirigera till rätt LUIS-modell eller QnA-tjänst.

bots\DispatchBot.cs

C# (arkiverad)

Metoderna ProcessHomeAutomationAsync och ProcessWeatherAsync använder användarindata i turkontexten för att hämta den främsta avsikten och entiteterna från rätt LUIS-modell.

Metoden ProcessSampleQnAAsync använder användarindata i turkontexten för att generera ett svar från kunskapsbas och visa resultatet för användaren.

Anteckning

Om detta var ett produktionsprogram är det här som de valda LUIS-metoderna skulle ansluta till sin angivna tjänst, skicka in användarindata och bearbeta den returnerade LUIS-avsikten och entitetsdata.

Testa din robot

  1. Starta exempelkoden med hjälp av utvecklingsmiljön. Observera localhost-adressen som visas i adressfältet i webbläsarfönstret som öppnas av appen: https://localhost:<Port_Number>.

  2. Öppna Bot Framework Emulator, klicka på knappen Öppna robot.

  3. I dialogrutan Öppna en robot anger du url:en för robotslutpunkten, till exempel http://localhost:3978/api/messages. Klicka på Anslut.

  4. Som referens finns här några av de frågor och kommandon som omfattas av de tjänster som skapats för din robot:

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

Dirigera användaryttrande till QnA Maker

  1. I emulatorn anger du texten hi och skickar yttrandet. Roboten skickar den här frågan till Orchestrator och får tillbaka ett svar som anger vilken underordnad app som ska få det här yttrandet för vidare bearbetning.

  2. Genom att välja raden Orchestrator Recognition Trace i loggen kan du se JSON-svaret i emulatorn. Orchestrator-resultatet visas i 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"
    }
    

    Eftersom yttrandet , hiär en del av Orchestrators QnAMaker-avsikt och väljs som topScoringIntent, kommer roboten att göra en andra begäran, den här gången till QnA Maker-appen, med samma yttrande.

  3. Välj raden QnAMaker Trace i emulatorloggen. QnA Maker-resultatet visas i Inspector.

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

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