Dela via


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

GÄLLER FÖR: SDK v4

Kommentar

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 för 2022. En nyare version av fråge- och svarsfunktionen ä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.

Kommentar

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.

Conversational Language Understanding (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 LUIS-modeller (Language Understanding) och QnA Maker-baza znanja kan du använda Bot Framework Orchestrator för att avgöra vilken LUIS-modell eller QnA Maker-baza znanja bäst matchar användarens indata. 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-baza znanja 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 roboten behöver du en befintlig baza znanja i QnA Maker-portalen. Roboten kan sedan använda baza znanja för att besvara användarens frågor.

Överväg att använda Copilot Studio för ny robotutveckling. Om du behöver skapa en ny baza znanja 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. I den här modulen hittar du avsikten med den mest poänggivande användaren och skickar resultatet vidare till DispatchToTopIntentAsync. DispatchToTopIntentAsync anropar i sin tur lämplig apphanterare.

  • ProcessSampleQnAAsync – 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-baza znanja skapas och publiceras. 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-baza znanja 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 i 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 Skapa en LUIS-app i LUIS-portalen och Hämta värden för att ansluta till LUIS-appen i Lägg till förståelse för naturligt språk i roboten och LUIS-dokumentationen om hur du tränar och publicerar en app i produktionsmiljön.

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

Kommentar

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 för 2022. En nyare version av fråge- och svarsfunktionen ä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 baza znanja och QnA Maker-värdnamnet och slutpunktsnyckeln.

Dricks

QnA Maker-dokumentationen innehåller instruktioner om hur du skapar, tränar och publicerar dina baza znanja.

Skapa Orchestrator-ögonblicksbildfilen

CLI-gränssnittet för Orchestrator-verktyget skapar Orchestrator-ögonblicksbildfilen 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-ögonblicksbildfilen

    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 appsettings.json-filen 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 klara.

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 Orchestrator-roboten HomeAutomationtill tjänsterna och Weather 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 i 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 får den främsta avsikten från Orchestrator Recognizer. Sedan skickar topIntent vi och recognizerResult vidare till rätt metod för att anropa tjänsten och returnera resultatet.

bots\DispatchBot.cs

C# (arkiverad)

Arbeta med igenkänningsresultaten

När Orchestrator-identifieraren ger ett resultat anger det 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 baza znanja och visa resultatet för användaren.

Kommentar

Om det här var ett produktionsprogram skulle de valda LUIS-metoderna ansluta till den angivna tjänsten, 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 den localhost-adress som visas i adressfältet i webbläsarfönstret som öppnas av appen: https://localhost:<Port_Number>.

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

  3. I dialogrutan Öppna en robot anger du din robotslutpunkts-URL, 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 Orchestrator Recognition Trace välja raden 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