Utiliser plusieurs modèles LUIS et QnA avec Orchestrator

S'APPLIQUE À : SDK v4

Remarque

Azure AI QnA Maker sera mis hors service le 31 mars 2025. À partir du 1er octobre 2022, vous ne pourrez plus créer de nouvelles ressources ou 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.

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

Remarque

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

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

Si un bot utilise plusieurs modèles LUIS (Language Understanding) et QnA Maker base de connaissances s, vous pouvez utiliser Bot Framework Orchestrator pour déterminer quel modèle LUIS ou QnA Maker base de connaissances le mieux correspond à l’entrée utilisateur. Vous pouvez utiliser la bf orchestrator commande CLI pour créer un fichier d’instantané Orchestrator, puis utiliser le fichier d’instantané pour router 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 nouveau développement de bots, envisagez d’utiliser Copilot Studio. Si vous devez créer une nouvelle base de connaissances pour bot du kit de développement logiciel (SDK) Bot Framework, consultez les articles suivants sur les Azure AI Services :

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 - pour les 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 d’instantané Orchestrator, vous avez besoin d’applications LUIS et des base de connaissances QnA créés et publiés. L’exemple de bot référencé dans cet article utilise les modèles suivants, inclus dans 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 HomeAutomation et Weather .lu 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 comment 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

Remarque

Azure AI QnA Maker sera mis hors service le 31 mars 2025. À partir du 1er octobre 2022, vous ne pourrez plus créer de nouvelles ressources ou 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.

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

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

Conseil

La documentation de QnA Maker contient des instructions sur la façon de créer, d'entraîner et de publier votre base de connaissances.

Créer le fichier d’instantané Orchestrator

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

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

  2. Ouvrez une invite de commandes ou une fenêtre de terminal, puis 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 d’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 services et SampleQnA aux HomeAutomationWeather services. 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 passe l’entrée utilisateur à Orchestrator Recognizer, recherche l’intention la plus 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 vérifions le message utilisateur entrant et obtenons l’intention principale d’Orchestrator Recognizer. Nous transmettons ensuite la topIntent méthode correcte recognizerResult 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 génère un résultat, il indique quel service peut traiter le plus correctement l’énoncé. 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 les méthodes utilisent l’entrée utilisateur contenue dans le contexte de tour pour obtenir l’intention et les entités principales 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.

Remarque

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 bot

  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 du 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 de votre point de terminaison de bot, par http://localhost:3978/api/messagesexemple . Cliquez sur Connecter.

  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 (home automation)
      • 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 retourne 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 de l’orchestrateur 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é, fait hipartie de l’intention QnAMaker d’Orchestrator et est sélectionné en tant que 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