Usare più modelli LUIS e QnA con Orchestrator

SI APPLICA A: SDK v4

Nota

Azure AI QnA Maker verrà ritirato il 31 marzo 2025. A partire dal 1° ottobre 2022, non sarà possibile creare nuove risorse o knowledge base di QnA Maker. Una versione più recente della funzionalità di domanda e risposta è ora disponibile come parte del linguaggio di intelligenza artificiale di Azure.

La risposta alle domande personalizzata, una funzionalità del linguaggio di intelligenza artificiale di Azure, è la versione aggiornata del servizio QnA Maker. Per altre informazioni sul supporto di domande e risposte in Bot Framework SDK, vedere Comprensione del linguaggio naturale.

Nota

Language Understanding (LUIS) verrà ritirato il 1° ottobre 2025. A partire dall'1 aprile 2023, non sarà possibile creare nuove risorse LUIS. Una versione più recente di Language Understanding è ora disponibile come parte del linguaggio di intelligenza artificiale di Azure.

Conversational Language Understanding (CLU), una funzionalità del linguaggio di intelligenza artificiale di Azure, è la versione aggiornata di LUIS. Per altre informazioni sul supporto per la comprensione del linguaggio in Bot Framework SDK, vedere Comprensione del linguaggio naturale.

Se un bot usa più modelli di Language Understanding (LUIS) e knowledge base di QnA Maker, è possibile usare Bot Framework Orchestrator per determinare quale modello LUIS o QnA Maker knowledge base meglio corrisponde all'input dell'utente. È possibile usare il comando dell'interfaccia della bf orchestrator riga di comando per creare un file snapshot di Orchestrator, quindi usare il file di snapshot per instradare l'input dell'utente al modello corretto in fase di esecuzione.

Questo articolo descrive come usare un knowledge base QnA Maker esistente con Orchestrator.

Prerequisiti

Informazioni sull'esempio

Questo esempio si basa su un set predefinito di progetti LUIS e QnA Maker. Tuttavia, per usare QnA Maker nel bot, è necessario un knowledge base esistente nel portale di QnA Maker. Il bot potrà quindi usare la knowledge base per rispondere alle domande dell'utente.

Per lo sviluppo di nuovi bot, prendere in considerazione l'uso di Power Virtual Agents. Se è necessario creare una nuova knowledge base per un bot Bot Framework SDK, vedere gli articoli seguenti sui servizi di intelligenza artificiale di Azure:

Diagramma classi C#.

Per ogni input utente ricevuto, viene effettuata una chiamata a OnMessageActivityAsync, Questo modulo trova la finalità utente con il punteggio più alto e passa il risultato a DispatchToTopIntentAsync. DispatchToTopIntentAsync chiama a sua volta il gestore app appropriato.

  • ProcessSampleQnAAsync - per domande frequenti sul bot.
  • ProcessWeatherAsync: per le query sul meteo.
  • ProcessHomeAutomationAsync: per i comandi dell'illuminazione domestica.

Il gestore chiama il servizio LUIS o QnA Maker e restituisce all'utente il risultato generato.

Creare le app LUIS

Prima di poter creare un file di snapshot di Orchestrator, sono necessarie app LUIS e knowledge base QnA create e pubblicate. Il bot di esempio a cui si fa riferimento in questo articolo usa i modelli seguenti, inclusi nell'esempio NLP With Orchestrator nella \CognitiveModels cartella :

Nome Descrizione
HomeAutomation App LUIS che riconosce una finalità di domotica con i dati di entità associati.
Weather App LUIS che riconosce le finalità relative al meteo con dati di posizione.
QnAMaker Knowledge base di QnA Maker che fornisce risposte a semplici domande sul bot.

Creare le app LUIS

Creare app LUIS dai file HomeAutomation e Weather .lu nella directory dei modelli cognitivi dell'esempio.

  1. Eseguire il comando seguente per importare, eseguire il training e pubblicare l'app nell'ambiente di produzione.

    bf luis:build --in CognitiveModels --authoringKey <YOUR-KEY> --botName <YOUR-BOT-NAME>
    
  2. Registrare gli ID applicazione, i nomi visualizzati, la chiave di creazione e la posizione.

Per altre informazioni, vedere Come creare un'app LUIS nel portale LUIS e Ottenere valori per connettersi all'app LUIS in Aggiungere la comprensione del linguaggio naturale al bot e la documentazione di LUIS su come eseguire il training e pubblicare un'app nell'ambiente di produzione.

Ottenere valori per connettere il bot alla knowledge base

Nota

Azure AI QnA Maker verrà ritirato il 31 marzo 2025. A partire dal 1° ottobre 2022, non sarà possibile creare nuove risorse o knowledge base di QnA Maker. Una versione più recente della funzionalità di domanda e risposta è ora disponibile come parte del linguaggio di intelligenza artificiale di Azure.

La risposta alle domande personalizzata, una funzionalità del linguaggio di intelligenza artificiale di Azure, è la versione aggiornata del servizio QnA Maker. Per altre informazioni sul supporto di domande e risposte in Bot Framework SDK, vedere Comprensione del linguaggio naturale.

Sono necessari un knowledge base esistente e il nome host e la chiave dell'endpoint di QnA Maker.

Suggerimento

La documentazione di QnA Maker contiene istruzioni su come creare, eseguire il training e pubblicare il knowledge base.

Creare il file di snapshot di Orchestrator

L'interfaccia dell'interfaccia della riga di comando per lo strumento Orchestrator crea il file snapshot di Orchestrator per il routing all'app LUIS o QnA Maker corretta in fase di esecuzione.

  1. Installare la versione supportata più recente del pacchetto Visual C++ Redistributable

  2. Aprire un prompt dei comandi o una finestra del terminale e passare alla directory di esempio

  3. Assicurarsi di avere la versione corrente di npm e l'interfaccia della riga di comando di Bot Framework.

    npm i -g npm
    npm i -g @microsoft/botframework-cli
    
  4. Scaricare il file del modello di base di Orchestrator

    mkdir model
    bf orchestrator:basemodel:get --out ./model
    
  5. Creare il file di snapshot di Orchestrator

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

Installazione di pacchetti

Prima di eseguire questa app per la prima volta, assicurarsi che siano installati diversi pacchetti NuGet:

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

Aggiornare manualmente il file appsettings.json

Dopo aver creato tutte le app del servizio, è necessario aggiungere le informazioni per ognuna nel file 'appsettings.json'. L'esempio iniziale per il codice C# (archiviato) contiene un file appsettings.json vuoto:

appsettings.json

C# (archiviato)

Per ognuna delle entità indicate di seguito, aggiungere i valori registrati in precedenza in queste istruzioni:

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

Dopo aver complete tutte le modifiche, salvare questo file.

Connettersi ai servizi dal bot

Per connettersi ai servizi LUIS e QnA Maker, il bot esegue il pull delle informazioni dal file delle impostazioni.

In BotServices.cs le informazioni contenute all'interno del file di configurazione appsettings.json vengono usate per connettere il bot Orchestrator ai HomeAutomationWeather servizi e SampleQnA . I costruttori usano i valori specificati per connettersi a questi servizi.

BotServices.cs

C# (archiviato)

Chiamare i servizi dal bot

Per ogni input dell'utente, la logica del bot passa l'input utente a Orchestrator Recognizer, trova la finalità restituita in alto e usa tali informazioni per chiamare il servizio appropriato per l'input.

Nel file DispatchBot.cs ogni volta che viene chiamato il metodo, controllare il OnMessageActivityAsync messaggio utente in ingresso e ottenere la finalità superiore da Orchestrator Recognizer. Si passa quindi l'oggetto topIntent e recognizerResult al metodo corretto per chiamare il servizio e restituire il risultato.

bots\DispatchBot.cs

C# (archiviato)

Uso dei risultati del riconoscimento

Quando il riconoscimento dell'agente di orchestrazione produce un risultato, indica quale servizio può elaborare in modo più appropriato l'espressione. Il codice in questo bot indirizza la richiesta al servizio corrispondente e quindi riepiloga la risposta dal servizio chiamato. A seconda della finalità restituita da Orchestrator, questo codice usa la finalità restituita per instradare il modello LUIS o il servizio QnA corretto.

bots\DispatchBot.cs

C# (archiviato)

I ProcessHomeAutomationAsync metodi e ProcessWeatherAsync usano l'input utente contenuto nel contesto di turno per ottenere la finalità e le entità principali dal modello LUIS corretto.

Il ProcessSampleQnAAsync metodo usa l'input dell'utente contenuto nel contesto di turno per generare una risposta dalla knowledge base e visualizzare tale risultato all'utente.

Nota

Nel caso di un'applicazione di produzione, a questo punto i metodi LUIS selezionati si connettono al servizio specificato, passano l'input dell'utente ed elaborano i dati di finalità ed entità LUIS restituiti.

Testare il bot

  1. Avviare il codice di esempio nell'ambiente di sviluppo. Prendere nota dell'indirizzo localhost visualizzato nella barra degli indirizzi della finestra del browser aperta dall'app: https://localhost:<Port_Number>.

  2. Aprire Bot Framework Emulator, fare clic sul pulsante Apri bot.

  3. Nella finestra di dialogo Apri un bot immettere l'URL dell'endpoint del bot, ad esempio http://localhost:3978/api/messages. Fare clic su Connetti.

  4. A titolo di riferimento, di seguito sono riportati esempi delle domande e dei comandi gestiti dai servizi creati per il bot:

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

Instradare l'espressione utente a QnA Maker

  1. Nell'emulatore immettere il testo hi e inviare l'espressione. Il bot invia questa query a Orchestrator e recupera una risposta che indica quale app figlio deve ottenere questa espressione per un'ulteriore elaborazione.

  2. Selezionando la riga nel log, è possibile visualizzare la Orchestrator Recognition Trace risposta JSON nell'emulatore. Il risultato dell'agente di orchestrazione viene visualizzato nel controllo.

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

    Poiché l'espressione, hi, fa parte della finalità QnAMaker di Orchestrator e viene selezionata come topScoringIntent, il bot eseguirà una seconda richiesta, questa volta all'app QnA Maker, con la stessa espressione.

  3. Selezionare la QnAMaker Trace riga nel log dell'emulatore. Il risultato di QnA Maker viene visualizzato nell'oggetto Inspector.

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

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