Utiliser plusieurs modèles LUIS et QnA avec Orchestrator

S’APPLIQUE À : SDK v4

Notes

Azure AI QnA Maker sera mis hors service le 31 mars 2025. À compter du 1er octobre 2022, vous ne pourrez pas créer de ressources ou de bases de connaissances QnA Maker. Une version plus récente de la fonctionnalité de questions et réponses est désormais disponible dans le cadre d’Azure AI Language.

Les réponses aux questions personnalisées, une fonctionnalité d’Azure AI Language, sont la version mise à jour du service QnA Maker. Pour plus d’informations sur la prise en charge des questions-réponses dans le Kit de développement logiciel (SDK) Bot Framework, consultez Compréhension du langage naturel.

Notes

Language Understanding (LUIS) sera mis hors service le 1er octobre 2025. À compter du 1er avril 2023, vous ne pourrez plus créer de ressources LUIS. Une version plus récente de la compréhension du langage est désormais disponible dans le cadre d’Azure AI Language.

La compréhension du langage courant (CLU), une fonctionnalité d’Azure AI Language, est la version mise à jour de LUIS. Pour plus d’informations sur la prise en charge de la compréhension du langage dans le Kit de développement logiciel (SDK) Bot Framework, consultez Compréhension du langage naturel.

Si un bot utilise des modèles Language Understanding multiples (LUIS) et des bases de connaissances QnA Maker, vous pouvez utiliser Bot Framework Orchestrator pour déterminer quel modèle LUIS ou QnA Maker base de connaissances correspond le mieux à l’entrée utilisateur. Vous pouvez utiliser la bf orchestrator commande CLI pour créer un fichier de instantané Orchestrator, puis utiliser le fichier instantané pour acheminer l’entrée utilisateur vers le modèle approprié au moment de l’exécution.

Cet article explique comment utiliser un base de connaissances QnA Maker existant avec Orchestrator.

Prérequis

À propos de cet exemple

Cet exemple est basé sur un ensemble prédéfini de projets LUIS et QnA Maker. Toutefois, pour utiliser QnA Maker dans votre bot, vous avez besoin d’un base de connaissances existant dans le portail QnA Maker. Votre bot peut alors utiliser la base de connaissances pour répondre aux questions de l’utilisateur.

Pour le développement de nouveaux bots, envisagez d’utiliser Power Virtual Agents. Si vous devez créer un base de connaissances pour un bot du Kit de développement logiciel (SDK) Bot Framework, consultez les articles suivants sur les services Azure AI :

Diagramme de classes C#.

OnMessageActivityAsync est appelé pour chaque entrée d’utilisateur reçue. Ce module recherche l’intention utilisateur du scoring le plus élevé et passe ce résultat à DispatchToTopIntentAsync. DispatchToTopIntentAsync appelle à son tour le gestionnaire d’application approprié.

  • ProcessSampleQnAAsync - questions fréquentes (FAQ) sur les bots.
  • ProcessWeatherAsync : pour les requêtes météo.
  • ProcessHomeAutomationAsync : pour les commandes d’éclairage domestique.

Le gestionnaire appelle le service LUIS ou QnA Maker, puis retourne le résultat généré à l’utilisateur.

Créer des applications LUIS

Avant de pouvoir créer un fichier instantané Orchestrator, vous devez créer et publier des applications LUIS et des bases de connaissances QnA. L’exemple de bot référencé dans cet article utilise les modèles suivants, inclus avec l’exemple NLP With Orchestrator dans le \CognitiveModels dossier :

Nom Description
HomeAutomation Application LUIS qui reconnaît une intention domotique avec les données d’entité associées.
Météo Application LUIS qui reconnaît les intentions liées à la météo avec des données de localisation.
QnAMaker Base de connaissances QnA Maker qui fournit des réponses à certaines questions simples concernant le bot.

Créer les applications LUIS

Créez des applications LUIS à partir des fichiers .lu HomeAutomation et Weather dans le répertoire des modèles cognitifs de l’exemple.

  1. Exécutez la commande suivante pour importer, entraîner et publier l’application dans l’environnement de production.

    bf luis:build --in CognitiveModels --authoringKey <YOUR-KEY> --botName <YOUR-BOT-NAME>
    
  2. Enregistrez les ID d’application, les noms d’affichage, la clé de création et l’emplacement.

Pour plus d’informations, consultez Créer une application LUIS dans le portail LUIS et Obtenir des valeurs pour vous connecter à votre application LUIS dans Ajouter une compréhension du langage naturel à votre bot et la documentation LUIS sur l’apprentissage et la publication d’une application dans l’environnement de production.

Obtenir des valeurs pour connecter votre bot à la base de connaissances

Notes

Azure AI QnA Maker sera mis hors service le 31 mars 2025. À compter du 1er octobre 2022, vous ne pourrez pas créer de ressources ou de bases de connaissances QnA Maker. Une version plus récente de la fonctionnalité de questions et réponses est désormais disponible dans le cadre d’Azure AI Language.

Les réponses aux questions personnalisées, une fonctionnalité d’Azure AI Language, sont la version mise à jour du service QnA Maker. Pour plus d’informations sur la prise en charge des questions-réponses dans le Kit de développement logiciel (SDK) Bot Framework, consultez Compréhension du langage naturel.

Vous avez besoin d’un base de connaissances existant, ainsi que de votre nom d’hôte et de votre clé de point de terminaison QnA Maker.

Conseil

La documentation QnA Maker contient des instructions sur la création, l’apprentissage et la publication de votre base de connaissances.

Créer le fichier de instantané Orchestrator

L’interface CLI de l’outil Orchestrator crée le fichier de instantané Orchestrator pour le routage vers l’application LUIS ou QnA Maker appropriée au moment de l’exécution.

  1. Installer la dernière version prise en charge du package Visual C++ Redistributable

  2. Ouvrez une invite de commandes ou une fenêtre de terminal et remplacez les répertoires par l’exemple de répertoire

  3. Vérifiez que vous disposez de la version actuelle de npm et de l’interface CLI Bot Framework.

    npm i -g npm
    npm i -g @microsoft/botframework-cli
    
  4. Télécharger le fichier de modèle de base Orchestrator

    mkdir model
    bf orchestrator:basemodel:get --out ./model
    
  5. Créer le fichier de instantané Orchestrator

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

Installation des packages

Avant d’exécuter cette application pour la première fois, vérifiez que plusieurs packages NuGet sont installés :

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

Mettre à jour manuellement votre fichier appsettings.json

Une fois que toutes vos applications de service sont créées, les informations de chacune d’elles doivent être ajoutées dans votre fichier « appsettings.json ». L’exemple initial pour le code C# (archivé) contient un fichier appsettings.json vide :

appsettings.json

C# (archivé)

Pour chacune des entités indiquées ci-dessous, ajoutez les valeurs que vous avez enregistrées précédemment dans ces instructions :

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

Quand tous les changements sont en place, enregistrez ce fichier.

Vous connecter aux services à partir de votre bot

Pour vous connecter aux services LUIS et QnA Maker, votre bot extrait les informations du fichier de paramètres.

Dans BotServices.cs, les informations contenues dans le fichier de configuration appsettings.json sont utilisées pour connecter votre bot Orchestrator aux HomeAutomationservices et WeatherSampleQnA . Les constructeurs utilisent les valeurs que vous avez fournies pour se connecter à ces services.

BotServices.cs

C# (archivé)

Appeler les services à partir de votre bot

Pour chaque entrée de votre utilisateur, la logique du bot transmet l’entrée utilisateur à Orchestrator Recognizer, recherche l’intention la plus haute retournée et utilise ces informations pour appeler le service approprié pour l’entrée.

Dans le fichier DispatchBot.cs chaque fois que la OnMessageActivityAsync méthode est appelée, nous case activée le message utilisateur entrant et obtenons l’intention supérieure d’Orchestrator Recognizer. Nous passons ensuite le topIntent et recognizerResult à la méthode appropriée pour appeler le service et retourner le résultat.

bots\DispatchBot.cs

C# (archivé)

Utiliser les résultats de reconnaissance

Lorsque le module de reconnaissance Orchestrator produit un résultat, il indique quel service peut traiter l’énoncé de manière la plus appropriée. Le code de ce bot achemine la demande vers le service correspondant, puis il résume la réponse du service appelé. Selon l’intention retournée par Orchestrator, ce code utilise l’intention retournée pour acheminer vers le modèle LUIS ou le service QnA approprié.

bots\DispatchBot.cs

C# (archivé)

Les ProcessHomeAutomationAsync méthodes et ProcessWeatherAsync utilisent l’entrée utilisateur contenue dans le contexte de tour pour obtenir l’intention et les entités principales à partir du modèle LUIS approprié.

La ProcessSampleQnAAsync méthode utilise l’entrée utilisateur contenue dans le contexte de tour pour générer une réponse à partir du base de connaissances et afficher ce résultat à l’utilisateur.

Notes

S’il s’agissait d’une application de production, c’est là que les méthodes LUIS sélectionnées se connecteraient à leur service spécifié, passeraient l’entrée utilisateur et traiteraient les données d’intention et d’entité LUIS retournées.

Tester votre robot

  1. À l’aide de votre environnement de développement, démarrez l’exemple de code. Notez l’adresse localhost affichée dans la barre d’adresse de la fenêtre de navigateur ouverte par votre application : https://localhost:<Port_Number>.

  2. Ouvrez Bot Framework Emulator, cliquez sur le bouton Ouvrir le bot.

  3. Dans la boîte de dialogue Ouvrir un bot , entrez l’URL du point de terminaison de votre bot, par http://localhost:3978/api/messagesexemple . Cliquez sur Connexion.

  4. À titre de référence, voici quelques-unes des questions et commandes couvertes par les services générés pour votre bot :

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

Acheminer l’énoncé utilisateur vers QnA Maker

  1. Dans l’émulateur, entrez le texte hi et envoyez l’énoncé. Le bot envoie cette requête à Orchestrator et obtient une réponse indiquant quelle application enfant doit obtenir cet énoncé pour un traitement ultérieur.

  2. En sélectionnant la Orchestrator Recognition Trace ligne dans le journal, vous pouvez voir la réponse JSON dans l’émulateur. Le résultat orchestrator s’affiche dans l’inspecteur.

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

    Étant donné que l’énoncé, hi, fait partie de l’intention QnAMaker d’Orchestrator et est sélectionné comme topScoringIntent, le bot effectue une deuxième requête, cette fois à l’application QnA Maker, avec le même énoncé.

  3. Sélectionnez la QnAMaker Trace ligne dans le journal de l’émulateur. Le résultat QnA Maker s’affiche dans l’inspecteur.

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

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