Použití více modelů LUIS a QnA s nástrojem Orchestrator

PLATÍ PRO: SDK v4

Poznámka

Azure AI QnA Maker bude vyřazen 31. března 2025. Od 1. října 2022 nebudete moct vytvářet nové prostředky nebo znalostní báze služby QnA Maker. V rámci jazyka Azure AI je teď k dispozici novější verze funkce otázek a odpovědí.

Vlastní odpovídání na otázky, funkce jazyka Azure AI, je aktualizovaná verze služby QnA Maker. Další informace o podpoře otázek a odpovědí v sadě SDK služby Bot Framework najdete v tématu Porozumění přirozenému jazyku.

Poznámka

Language Understanding (LUIS) bude 1. října 2025 vyřazena. Od 1. dubna 2023 nebudete moct vytvářet nové prostředky služby LUIS. V rámci azure AI Language je teď k dispozici novější verze služby Language Understanding.

Porozumění konverzačnímu jazyku (CLU), funkce jazyka Azure AI, je aktualizovaná verze služby LUIS. Další informace o podpoře porozumění jazyku v sadě SDK služby Bot Framework najdete v tématu Principy přirozeného jazyka.

Pokud robot používá více modelů Language Understanding (LUIS) a znalostních bází služby QnA Maker, můžete pomocí orchestratoru služby Bot Framework určit, který model LUIS nebo služba QnA Maker znalostní báze nejlépe odpovídá vstupu uživatele. Pomocí příkazu CLI můžete bf orchestrator vytvořit soubor snímku orchestratoru a pak ho použít ke směrování uživatelského vstupu do správného modelu za běhu.

Tento článek popisuje, jak používat existující znalostní báze služby QnA Maker s nástrojem Orchestrator.

Požadavky

O této ukázce

Tato ukázka je založená na předdefinované sadě projektů LUIS a QnA Maker. Pokud ale chcete qnA Maker ve svém robotovi používat, potřebujete existující znalostní báze na portálu služby QnA Maker. Robot pak může pomocí znalostní báze odpovídat na otázky uživatele.

Pro vývoj nových robotů zvažte použití Power Virtual Agents. Pokud potřebujete vytvořit nový znalostní báze pro robota sady Bot Framework SDK, projděte si následující články o službách Azure AI:

Diagram tříd jazyka C#

OnMessageActivityAsync se volá pro každý přijatý uživatelský vstup. Tento modul vyhledá záměr uživatele s nejvyšším skóre a předá tento výsledek do DispatchToTopIntentAsync. DispatchToTopIntentAsync zase volá příslušnou obslužnou rutinu aplikace.

  • ProcessSampleQnAAsync – pro nejčastější dotazy k robotovi.
  • ProcessWeatherAsync - pro dotazy na počasí.
  • ProcessHomeAutomationAsync - pro příkazy domácího osvětlení.

Obslužná rutina volá službu LUIS nebo QnA Maker a vrátí vygenerovaný výsledek zpět uživateli.

Vytváření aplikací LUIS

Než budete moct vytvořit soubor snímku orchestratoru, musíte vytvořit a publikovat aplikace LUIS a znalostní báze QnA. Ukázkový robot, na který odkazuje tento článek, používá následující modely, které jsou součástí ukázky NLP With Orchestrator ve \CognitiveModels složce :

Název Description
HomeAutomation Aplikace LUIS, která rozpozná záměr domácí automatizace s daty přidružených entit.
Počasí Aplikace LUIS, která rozpoznává záměry související s počasím pomocí dat o poloze.
QnAMaker QnA Maker znalostní báze, který poskytuje odpovědi na jednoduché otázky týkající se robota.

Vytvoření aplikací LUIS

Vytvořte aplikace LUIS ze souborů .lu HomeAutomation a Weather v adresáři kognitivních modelů ukázky.

  1. Spuštěním následujícího příkazu naimportujte, vytrénujte a publikujte aplikaci do produkčního prostředí.

    bf luis:build --in CognitiveModels --authoringKey <YOUR-KEY> --botName <YOUR-BOT-NAME>
    
  2. Poznamenejte si ID aplikací, zobrazované názvy, klíč pro vytváření a umístění.

Další informace najdete v tématech Vytvoření aplikace LUIS na portálu LUIS a Získání hodnot pro připojení k aplikaci LUIS v tématu Přidání porozumění přirozenému jazyku do robota a v dokumentaci služby LUIS o tom, jak vytrénovat a publikovat aplikaci do produkčního prostředí.

Získání hodnot pro připojení robota k znalostní báze

Poznámka

Azure AI QnA Maker bude vyřazen 31. března 2025. Od 1. října 2022 nebudete moct vytvářet nové prostředky nebo znalostní báze služby QnA Maker. V rámci jazyka Azure AI je teď k dispozici novější verze funkce otázek a odpovědí.

Vlastní odpovídání na otázky, funkce jazyka Azure AI, je aktualizovaná verze služby QnA Maker. Další informace o podpoře otázek a odpovědí v sadě SDK služby Bot Framework najdete v tématu Porozumění přirozenému jazyku.

Potřebujete existující znalostní báze a název hostitele služby QnA Maker a klíč koncového bodu.

Tip

Dokumentace ke službě QnA Maker obsahuje pokyny, jak vytvořit, vytrénovat a publikovat znalostní báze.

Vytvoření souboru snímku orchestratoru

Rozhraní rozhraní příkazového řádku pro nástroj Orchestrator vytvoří soubor snímku nástroje Orchestrator pro směrování do správné aplikace LUIS nebo QnA Maker za běhu.

  1. Nainstalujte nejnovější podporovanou verzi balíčku Visual C++ Redistributable.

  2. Otevřete příkazový řádek nebo okno terminálu a změňte adresáře na ukázkový adresář.

  3. Ujistěte se, že máte aktuální verzi npm a rozhraní příkazového řádku služby Bot Framework.

    npm i -g npm
    npm i -g @microsoft/botframework-cli
    
  4. Stažení souboru základního modelu nástroje Orchestrator

    mkdir model
    bf orchestrator:basemodel:get --out ./model
    
  5. Vytvoření souboru snímku orchestratoru

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

Instalace balíčků

Před prvním spuštěním této aplikace se ujistěte, že je nainstalovaných několik balíčků NuGet:

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

Ruční aktualizace souboru appsettings.json

Po vytvoření všech aplikací služeb je potřeba informace o každé z nich přidat do souboru appsettings.json. Počáteční ukázka (archivovaného) kódu C# obsahuje prázdný soubor appsettings.json:

appsettings.json

C# (archivováno)

Pro každou z níže uvedených entit přidejte hodnoty, které jste si poznamenali dříve v těchto pokynech:

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

Po dokončení všech změn tento soubor uložte.

Připojení ke službám z robota

Pokud se robot chce připojit ke službám LUIS a QnA Maker, načítá informace ze souboru nastavení.

V souboru BotServices.cs se informace obsažené v konfiguračním souboru appsettings.json používají k připojení robota Orchestratoru ke službám HomeAutomation, Weather a SampleQnA . Konstruktory používají hodnoty, které jste zadali pro připojení k těmto službám.

BotServices.cs

C# (archivováno)

Volání služeb z robota

Pro každý vstup od uživatele předá logika robota uživatelský vstup službě Orchestrator Recognizer, najde první vrácený záměr a použije tyto informace k volání příslušné služby pro daný vstup.

V souboru DispatchBot.cs při každém OnMessageActivityAsync volání metody zkontrolujeme příchozí zprávu uživatele a získáme hlavní záměr z nástroje Orchestrator Recognizer. Pak předáme topIntent a recognizerResult správné metodě, která zavolá službu a vrátí výsledek.

bots\DispatchBot.cs

C# (archivováno)

Práce s výsledky rozpoznávání

Když rozpoznávání Orchestratoru vytvoří výsledek, označuje, která služba může promluvu zpracovat nejvhodnějším způsobem. Kód v tomto robotovi směruje požadavek do odpovídající služby a pak sumarizuje odpověď z volané služby. V závislosti na záměru vráceného nástrojem Orchestrator tento kód použije vrácený záměr ke směrování do správného modelu LUIS nebo služby QnA.

bots\DispatchBot.cs

C# (archivováno)

ProcessHomeAutomationAsync Metody a ProcessWeatherAsync používají uživatelský vstup obsažený v kontextu turn k získání nejvyššího záměru a entit ze správného modelu LUIS.

Metoda ProcessSampleQnAAsync používá uživatelský vstup obsažený v kontextu turn k vygenerování odpovědi z znalostní báze a zobrazení tohoto výsledku uživateli.

Poznámka

Pokud by se jednalo o produkční aplikaci, vybrané metody LUIS by se připojily ke své zadané službě, předaly uživatelský vstup a zpracovaly vrácený záměr luis a data entity.

Testování robota

  1. Pomocí vývojového prostředí spusťte ukázkový kód. Poznamenejte si adresu místního hostitele , která se zobrazuje na panelu Adresa okna prohlížeče otevřeného vaší aplikací: https://localhost:<Port_Number>.

  2. Otevřete Bot Framework Emulator a klikněte na tlačítko Otevřít robota.

  3. V dialogovém okně Otevřít robota zadejte adresu URL koncového bodu robota, například http://localhost:3978/api/messages. Klikněte na Připojit.

  4. Tady jsou některé otázky a příkazy, kterým se týkají služby vytvořené pro vašeho robota:

    • QnA Maker
      • hi, good morning
      • what are you, what do you do
    • LUIS (domácí automatizace)
      • turn on bedroom light
      • turn off bedroom light
      • make some coffee
    • LUIS (počasí)
      • whats the weather in redmond washington
      • what's the forecast for london
      • show me the forecast for nebraska

Směrování promluv uživatele do služby QnA Maker

  1. V emulátoru zadejte text hi a odešlete promluvu. Robot odešle tento dotaz do nástroje Orchestrator a vrátí odpověď, která podřízená aplikace by měla tuto promluvu získat k dalšímu zpracování.

  2. Orchestrator Recognition Trace Výběrem řádku v protokolu zobrazíte odpověď JSON v emulátoru. Výsledek orchestratoru se zobrazí v inspektoru.

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

    Vzhledem k tomu, hiže promluva je součástí záměru QnAMaker orchestratoru a je vybraná jako topScoringIntent, robot odešle druhou žádost, tentokrát do aplikace QnA Maker, se stejnou promluvou.

  3. QnAMaker Trace Vyberte řádek v protokolu emulátoru. Výsledek služby QnA Maker se zobrazí v inspektoru.

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

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