Démarrage rapide : réponses aux questions personnalisées

Remarque

Azure Open AI sur vos données utilise des grands modèles de langage (LLMs) pour produire des résultats similaires aux réponses aux questions personnalisées. Si vous souhaitez connecter un projet de réponse aux questions personnalisées existant à Azure Open AI sur vos données, veuillez consulter notre guide.

Remarque

Souhaitez-vous migrer vos charges de travail à partir de QnA Maker ? Pour obtenir un comparatif des fonctionnalités et les étapes de migration à suivre, consultez notre guide de migration.

Prise en main de la bibliothèque cliente de réponses aux questions personnalisées. Suivez les étapes suivantes pour installer le package et essayer l’exemple de code pour les tâches de base.

Vous pouvez créer un projet de réponses aux questions personnalisées à partir de votre propre contenu, tel que des FAQ ou des manuels de produit. Cet article contient un exemple de création de projet de réponses aux questions personnalisées à partir d’un manuel de produit pour répondre à des questions.

Prérequis

  • Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
  • Une ressource de langage avec la fonctionnalité Réponse aux questions personnalisée activée. Mémorisez votre identifiant Microsoft Entra ID, votre abonnement, le nom de la ressource linguistique que vous avez sélectionné lors de la création de la ressource.

Créer votre premier projet de réponses aux questions personnalisées

  1. Connectez-vous à Language Studio avec vos informations d’identification Azure.

  2. Faites défiler jusqu’à la section Answer questions et sélectionnez Open custom question answering.

    Open custom question answering

  3. Si votre ressource n’est pas encore connectée à Recherche Azure, sélectionnez Connect to Azure Search. Un nouvel onglet de navigateur s’ouvre dans le volet Fonctionnalités de votre ressource dans le portail Azure.

    Connect to Azure Search

  4. Sélectionnez Enable custom question answering, choisissez la ressource Recherche Azure à lier, puis sélectionnez Appliquer.

    Enable custom question answering

  5. Revenez à l’onglet Language Studio. Vous devrez peut-être actualiser cette page pour qu’elle affiche la modification apportée à votre ressource. Sélectionnez Create new project.

  6. Choisissez l’option I want to set the language for all projects created in this resource> sélectionnez English>Next.

  7. Entrez le nom de projet Exemple-de-projet, la description Mon premier projet de réponses aux questions et laissez la réponse par défaut avec le paramètre No answer found.

  8. Passez en revue vos choix, puis sélectionnez Create project.

  9. Dans la page Manage sources, sélectionnez Add source>URLS.

  10. Sélectionnez Add url, entrez les valeurs suivantes, puis sélectionnez Add all :

    Nom de l’URL Valeur de l’URL
    Guide de l’utilisateur Surface Book https://download.microsoft.com/download/7/B/1/7B10C82E-F520-4080-8516-5CF0D803EEE0/surface-book-user-guide-EN.pdf

    Le processus d’extraction prend quelques minutes pour lire le document et identifier les questions et réponses.

    Après avoir ajouté la source, vous pouvez modifier son contenu pour ajouter d’autres jeux de réponses aux questions personnalisées.

Tester votre projet

  1. Sélectionnez le lien vers votre source pour ouvrir la page de modification du projet.

  2. Sélectionnez Test dans la barre de menus > Entrez la question Comment faire pour configurer mon Surface Book ?. Une réponse sera générée en fonction des paires de réponses aux questions qui ont été automatiquement identifiées et extraites de votre URL source :

    Tester l’interface de conversation de questions

    Si vous cochez la case pour inclure une réponse brève, vous verrez également une réponse précise, si elle est disponible, ainsi que le passage de la réponse dans le volet test lorsque vous posez une question.

  3. Sélectionnez Inspect pour examiner la réponse plus en détail. La fenêtre de test est utilisée pour tester vos modifications apportées à votre projet avant de déployer votre projet.

    Afficher l’intervalle de confiance

    À partir de l’interface Inspect, vous pouvez voir le niveau de confiance de cette réponse à la question, et modifier directement une paire de réponse question/réponse.

Déployez votre projet

  1. Sélectionnez l’icône Déployer un projet pour entrer dans le menu du déploiement de projet.

    Déployer le projet

    Lorsque vous déployez un projet, le contenu de votre projet passe de l’index test à un index prod dans Recherche Azure.

  2. Sélectionnez Deploy> et, à l’invite, sélectionnez à nouveau Deploy.

    Déploiement réussi

    Votre projet a été déployé avec succès. Vous pouvez utiliser le point de terminaison pour répondre aux questions dans votre propre application personnalisée ou dans un bot.

Prérequis

  • Version actuelle de cURL. Plusieurs commutateurs de ligne de commande sont utilisés dans les guides de démarrage rapide, qui sont indiqués dans la documentation cURL.
  • Abonnement Azure - En créer un gratuitement
  • Les réponses aux questions personnalisées nécessitent une ressource Language avec la fonctionnalité de réponses aux questions personnalisées activée pour générer une clé API et un point de terminaison.
    • Après le déploiement de votre ressource de langage, sélectionnez Accéder à la ressource. Vous avez besoin de la clé et du point de terminaison de la ressource que vous créez pour vous connecter à l’API. Collez votre clé et votre point de terminaison dans le code ci-dessous, plus loin dans le guide de démarrage rapide.
  • Pour créer une ressource Langage avec l’interface Azure CLI, fournissez les propriétés supplémentaires suivantes : --api-properties qnaAzureSearchEndpointId=/subscriptions/<azure-subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Search/searchServices/<azure-search-service-name> qnaAzureSearchEndpointKey=<azure-search-service-auth-key>
  • Projet existant à interroger. Si vous n’avez pas configuré de projet, vous pouvez suivre les instructions du Guide de démarrage rapide de Language Studio. Vous pouvez également ajouter un projet utilisant cette URL du guide d’utilisation de Surface comme source de données.

Configuration

Créer des variables d’environnement

Votre application doit être authentifiée pour envoyer des requêtes d’API. Pour la production, utilisez une méthode de stockage et d’accès sécurisée pour vos informations d’identification. Dans cet exemple, vous allez écrire vos informations d’identification dans des variables d’environnement sur l’ordinateur local exécutant l’application.

Conseil

N’incluez pas la clé directement dans votre code et ne la publiez jamais publiquement. Pour découvrir d’autres options d’authentification telles qu’Azure Key Vault, consultez l’article sur la sécurité d’Azure AI services.

Pour définir la variable d’environnement de votre clé de ressource de langage, ouvrez une fenêtre de console et suivez les instructions relatives à votre système d’exploitation et à votre environnement de développement.

  1. Pour définir la variable d’environnement LANGUAGE_KEY, remplacez your-key par l’une des clés de votre ressource.
  2. Pour définir la LANGUAGE_ENDPOINTvariable d’environnement, remplacez your-endpoint par le point de terminaison de votre ressource.
setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint

Notes

Si vous avez uniquement besoin d’accéder aux variables d’environnement dans la console en cours d’exécution, vous pouvez la définir avec set au lieu de setx.

Après avoir ajouté les variables d’environnement, vous devrez peut-être redémarrer tous les programmes en cours d’exécution qui devront les lire, y compris la fenêtre de console. Par exemple, si vous utilisez Visual Studio comme éditeur, redémarrez Visual Studio avant d’exécuter l’exemple.

Interroger un projet

Générer une réponse à partir d’un projet

Pour interroger un projet de réponses aux questions personnalisées avec les API REST et cURL, vous devez disposer des informations suivantes :

Nom de la variable Valeur
Endpoint Cette valeur se trouve dans la section Clés et point de terminaison quand vous examinez votre ressource à partir du portail Azure. Vous pouvez également trouver la valeur dans Language Studio>Réponses aux questions>Déployer un projet>Obtenir une URL de prédiction. Voici un exemple de point de terminaison : https://southcentralus.api.cognitive.microsoft.com/
API-Key Cette valeur se trouve dans la section Clés et point de terminaison quand vous examinez votre ressource à partir du portail Azure. Vous pouvez utiliser Key1 ou Key2. Toujours avoir deux clés valides pour la permutation de clés sécurisée sans temps d’arrêt. Vous pouvez également trouver la valeur dans Language Studio>Réponses aux questions>Déployer un projet>Obtenir une URL de prédiction. La valeur de clé fait partie de l’exemple de demande.
Project Nom de votre projet de réponses aux questions personnalisées.
Deployment Il existe deux valeurs possibles : test et production. production dépend de la façon dont vous avez déployé votre projet à partir de Language Studio>Réponses aux questions>Déployer un projet.

La commande cURL est exécutée à partir d’un interpréteur de commandes BASH. Modifiez cette commande avec vos propres informations relatives au nom de ressource, à la clé de ressource ainsi qu’aux valeurs JSON et à la taille de JSON.

curl -X POST -H "Ocp-Apim-Subscription-Key: $LANGUAGE_KEY" -H "Content-Type: application/json" -d '{
  "question": "How much battery life do I have left?"
  }'  '$LANGUAGE_ENDPOINT.api.cognitive.microsoft.com/language/:query-knowledgebases?projectName={YOUR_PROJECT_NAME}&api-version=2021-10-01&deploymentName={DEPLOYMENT_NAME}'

Quand vous exécutez le code ci-dessus, si vous utilisez la source de données à partir des prérequis, vous obtenez une réponse qui se présente comme suit :

{
"answers": [
    {
      "questions": [
        "Check battery level"
      ],
      "answer": "If you want to see how much battery you have left, go to **Start  **> **Settings  **> **Devices  **> **Bluetooth & other devices  **, then find your pen. The current battery level will appear under the battery icon.",
      "confidenceScore": 0.9185,
      "id": 101,
      "source": "https://support.microsoft.com/en-us/surface/how-to-use-your-surface-pen-8a403519-cd1f-15b2-c9df-faa5aa924e98",
      "metadata": {},
      "dialog": {
        "isContextOnly": false,
        "prompts": []
      }
    }
  ]
}

confidenceScore retourne une valeur comprise entre 0 et 1. Vous pouvez considérer cela comme un pourcentage et le multiplier par 100. Ainsi, un score de confiance de 0,9185 signifie que, d’après les réponses aux questions personnalisées, il existe 91,85 % de chance qu’il s’agisse de la bonne réponse à la question en fonction du projet.

Si vous souhaitez exclure les réponses où le score de confiance est inférieur à un certain seuil, vous pouvez ajouter le paramètre confidenceScoreThreshold.

curl -X POST -H "Ocp-Apim-Subscription-Key: $LANGUAGE_KEY" -H "Content-Type: application/json" -d '{
  "question": "How much battery life do I have left?",
  "confidenceScoreThreshold": "0.95",
  }'  '$LANGUAGE_ENDPOINT.api.cognitive.microsoft.com//language/:query-knowledgebases?projectName=Sample-project&api-version=2021-10-01&deploymentName={DEPLOYMENT_NAME}'

Notre score de confiance étant de .9185 d’après notre précédente exécution du code, la définition du seuil sur .95 entraînera le retour de la réponse par défaut.

{
  "answers": [
    {
      "questions": [],
      "answer": "No good match found in KB",
      "confidenceScore": 0.0,
      "id": -1,
      "metadata": {}
    }
  ]
}

Interroger un texte sans projet

Vous pouvez également utiliser les réponses aux questions personnalisées sans projet avec l’API REST de réponses aux questions personnalisées prédéfinies, que vous pouvez appeler via query-text. Dans ce cas, vous fournissez aux réponses aux questions une question et les enregistrements de texte dans lesquels vous souhaitez rechercher une réponse au moment où la demande est envoyée.

Pour cet exemple, vous devez uniquement modifier les variables pour API KEY et ENDPOINT.

curl -X POST -H "Ocp-Apim-Subscription-Key: $LANGUAGE_KEY" -H "Content-Type: application/json" -d '{
"question":"How long does it takes to charge a surface?",
"records":[
{"id":"doc1","text":"Power and charging.It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. It can take longer if you\u0027re using your Surface for power-intensive activities like gaming or video streaming while you\u0027re charging it"},
{"id":"doc2","text":"You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface."}],
"language":"en",
"stringIndexType":"Utf16CodeUnit"
}'  '$LANGUAGE_ENDPOINT.api.cognitive.microsoft.com/language/:query-text?&api-version=2021-10-01'

Cet exemple retourne le résultat suivant :

{  
"answers": [
    {
      "answer": "Power and charging.It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it",
      "confidenceScore": 0.9118788838386536,
      "id": "doc1",
      "answerSpan": {
        "text": "two to four hours",
        "confidenceScore": 0.9850527,
        "offset": 27,
        "length": 18
      },
      "offset": 0,
      "length": 243
    },
    {
      "answer": "It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it",
      "confidenceScore": 0.052793052047491074,
      "id": "doc1",
      "answerSpan": {
        "text": "longer",
        "confidenceScore": 0.6694634,
        "offset": 11,
        "length": 7
      },
      "offset": 109,
      "length": 134
    },
    {
      "answer": "You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface.",
      "confidenceScore": 0.017600709572434425,
      "id": "doc2",
      "answerSpan": {
        "text": "USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. The USB port on the power supply is only for charging",
        "confidenceScore": 0.1544854,
        "offset": 15,
        "length": 165
      },
      "offset": 0,
      "length": 280
    }
  ]
}

Utilisez ce guide de démarrage rapide pour la bibliothèque de client de réponses aux questions personnalisées pour .NET pour :

  • Obtenez une réponse à partir d’un projet.
  • Revoir une réponse à partir d’un corps de texte que vous envoyez avec votre question.
  • Obtenir le score de confiance pour la réponse à votre question.

Documentation de référence | Package (NuGet) | Exemples supplémentaires | Code source de la bibliothèque

Prérequis

  • Abonnement Azure - En créer un gratuitement
  • L’IDE Visual Studio ou la version actuelle de .NET Core.
  • Les réponses aux questions personnalisées nécessitent une ressource Language avec la fonctionnalité de réponses aux questions personnalisées activée pour générer une clé API et un point de terminaison.
    • Après le déploiement de votre ressource de langage, sélectionnez Accéder à la ressource. Vous avez besoin de la clé et du point de terminaison de la ressource que vous créez pour vous connecter à l’API. Collez votre clé et votre point de terminaison dans le code ci-dessous, plus loin dans le guide de démarrage rapide.
  • Pour créer une ressource Langage avec l’interface Azure CLI, fournissez les propriétés supplémentaires suivantes : --api-properties qnaAzureSearchEndpointId=/subscriptions/<azure-subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Search/searchServices/<azure-search-service-name> qnaAzureSearchEndpointKey=<azure-search-service-auth-key>
  • Projet existant à interroger. Si vous n’avez pas configuré de projet, vous pouvez suivre les instructions se trouvant dans le Guide de démarrage rapide de Language Studio. Vous pouvez également ajouter un projet utilisant cette URL du guide d’utilisation de Surface comme source de données.

Configuration

Créer des variables d’environnement

Votre application doit être authentifiée pour envoyer des requêtes d’API. Pour la production, utilisez une méthode de stockage et d’accès sécurisée pour vos informations d’identification. Dans cet exemple, vous allez écrire vos informations d’identification dans des variables d’environnement sur l’ordinateur local exécutant l’application.

Conseil

N’incluez pas la clé directement dans votre code et ne la publiez jamais publiquement. Pour découvrir d’autres options d’authentification telles qu’Azure Key Vault, consultez l’article sur la sécurité d’Azure AI services.

Pour définir la variable d’environnement de votre clé de ressource de langage, ouvrez une fenêtre de console et suivez les instructions relatives à votre système d’exploitation et à votre environnement de développement.

  1. Pour définir la variable d’environnement LANGUAGE_KEY, remplacez your-key par l’une des clés de votre ressource.
  2. Pour définir la LANGUAGE_ENDPOINTvariable d’environnement, remplacez your-endpoint par le point de terminaison de votre ressource.
setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint

Notes

Si vous avez uniquement besoin d’accéder aux variables d’environnement dans la console en cours d’exécution, vous pouvez la définir avec set au lieu de setx.

Après avoir ajouté les variables d’environnement, vous devrez peut-être redémarrer tous les programmes en cours d’exécution qui devront les lire, y compris la fenêtre de console. Par exemple, si vous utilisez Visual Studio comme éditeur, redémarrez Visual Studio avant d’exécuter l’exemple.

Interface de ligne de commande

Dans une fenêtre de console (par exemple cmd, PowerShell ou Bash), utilisez la commande dotnet new pour créer une application console avec le nom question-answering-quickstart. Cette commande crée un projet C# simple nommé « Hello World » avec un seul fichier source : program.cs.

dotnet new console -n question-answering-quickstart

Déplacez vos répertoires vers le dossier d’application nouvellement créé. Vous pouvez générer l’application avec :

dotnet build

La sortie de génération ne doit contenir aucun avertissement ni erreur.

...
Build succeeded.
 0 Warning(s)
 0 Error(s)
...

Dans le répertoire de l’application, installez la bibliothèque de réponses aux questions personnalisées pour .NET à l’aide de la commande suivante :

dotnet add package Azure.AI.Language.QuestionAnswering

Interroger un projet

Générer une réponse à partir d’un projet

L’exemple ci-dessous vous permet d’interroger un projet avec GetAnswers pour recevoir une réponse à votre question.

Vous devrez mettre à jour le code ci-dessous et fournir vos propres valeurs pour les variables suivantes.

Nom de la variable Valeur
endpoint Cette valeur se trouve dans la section Clés et point de terminaison quand vous examinez votre ressource à partir du portail Azure. Vous pouvez également trouver la valeur dans Language Studio>Réponses aux questions>Déployer un projet>Obtenir une URL de prédiction. Voici un exemple de point de terminaison : https://southcentralus.api.cognitive.microsoft.com/
credential Cette valeur se trouve dans la section Clés et point de terminaison quand vous examinez votre ressource à partir du portail Azure. Vous pouvez utiliser Key1 ou Key2. Toujours avoir deux clés valides pour la permutation de clés sécurisée sans temps d’arrêt. Vous pouvez également trouver la valeur dans Language Studio>Réponses aux questions>Déployer un projet>Obtenir une URL de prédiction. La valeur de clé fait partie de l’exemple de demande.
projectName Nom de votre projet de réponses aux questions personnalisées.
deploymentName Il existe deux valeurs possibles : test et production. production dépend de la façon dont vous avez déployé votre projet à partir de Language Studio>Réponses aux questions>Déployer un projet.

Important

N’oubliez pas de supprimer la clé de votre code une fois que vous avez terminé, et ne la postez jamais publiquement. Pour la production, utilisez un moyen sécurisé de stocker et d’accéder à vos informations d’identification comme Azure Key Vault. Pour plus d’informations, consultez l’article sur la sécurité d’Azure AI services.

À partir du répertoire du projet, ouvrez le fichier program.cs et remplacez le contenu par le code suivant :

using Azure;
using Azure.AI.Language.QuestionAnswering;
using System;

namespace question_answering
{
    class Program
    {
        static void Main(string[] args)
        {

            // This example requires environment variables named "LANGUAGE_KEY" and "LANGUAGE_ENDPOINT"
            Uri endpoint = new Uri("LANGUAGE_ENDPOINT");
            AzureKeyCredential credential = new AzureKeyCredential("LANGUAGE_KEY");
            string projectName = "{YOUR-PROJECT-NAME}";
            string deploymentName = "production";

            string question = "How long should my Surface battery last?";

            QuestionAnsweringClient client = new QuestionAnsweringClient(endpoint, credential);
            QuestionAnsweringProject project = new QuestionAnsweringProject(projectName, deploymentName);

            Response<AnswersResult> response = client.GetAnswers(question, project);

            foreach (KnowledgeBaseAnswer answer in response.Value.Answers)
            {
                Console.WriteLine($"Q:{question}");
                Console.WriteLine($"A:{answer.Answer}");
            }
        }
    }
}

Tandis que nous programmons en dur les variables pour notre exemple. Pour la production, envisagez d’utiliser une méthode de stockage et d’accès sécurisée pour vos informations d’identification. Par exemple, Azure Key Vault fournit un stockage de clé sécurisé.

Après avoir mis à jour Program.cs avec le code ci-dessus et substitué les valeurs correctes des variables. Exécutez l’application avec la commande dotnet run à partir du répertoire de votre application.

dotnet run

La réponse se présente comme suit :

Q: How much battery life do I have left?
A: If you want to see how much battery you have left, go to **Start  **> **Settings  **> **Devices  **> **Bluetooth & other devices  **, then find your pen. The current battery level will appear under the battery icon.

Pour plus d’informations sur la façon de connaître le degré de confiance des réponses aux questions personnalisées quant au fait qu’il s’agit de la bonne réponse, ajoutez une instruction print sous les instructions print existantes :

Console.WriteLine($"Q:{question}");
Console.WriteLine($"A:{answer.Answer}");
Console.WriteLine($"({answer.Confidence})"); // add this line

Si vous réexécutez dotnet run, vous recevrez maintenant un résultat avec un score de confiance :

Q:How much battery life do I have left?
A:If you want to see how much battery you have left, go to **Start  **> **Settings  **> **Devices  **> **Bluetooth & other devices  **, then find your pen. The current battery level will appear under the battery icon.
(0.9185)

Le score de confiance retourne une valeur comprise entre 0 et 1. Vous pouvez considérer cela comme un pourcentage et le multiplier par 100. Ainsi, un score de confiance de 0,9185 signifie que, d’après les réponses aux questions personnalisées, il existe 91,85 % de chance qu’il s’agisse de la bonne réponse à la question en fonction du projet.

Si vous souhaitez exclure les réponses où le score de confiance est inférieur à un certain seuil, utilisez AnswerOptions pour ajouter la propriété ConfidenceScoreThreshold.

QuestionAnsweringClient client = new QuestionAnsweringClient(endpoint, credential);
QuestionAnsweringProject project = new QuestionAnsweringProject(projectName, deploymentName);
AnswersOptions options = new AnswersOptions(); //Add this line
options.ConfidenceThreshold = 0.95; //Add this line

Response<AnswersResult> response = client.GetAnswers(question, project, options); //Add the additional options parameter

Notre score de confiance étant de .9185 d’après notre précédente exécution du code, la définition du seuil sur .95 entraînera le retour de la réponse par défaut.

Q:How much battery life do I have left?
A:No good match found in KB
(0)

Interroger un texte sans projet

Vous pouvez également utiliser les réponses aux questions personnalisées sans projet avec GetAnswersFromText. Dans ce cas, vous fournissez aux réponses aux questions personnalisées une question et les enregistrements texte dans lesquels vous souhaitez rechercher une réponse au moment où la demande est envoyée.

Pour cet exemple, vous devez uniquement modifier les variables pour endpoint et credential.

using Azure;
using Azure.AI.Language.QuestionAnswering;
using System;
using System.Collections.Generic;


namespace questionansweringcsharp
{
    class Program
    {
        static void Main(string[] args)
        {

            Uri endpoint = new Uri("https://{YOUR-ENDPOINT}.api.cognitive.microsoft.com/");
            AzureKeyCredential credential = new AzureKeyCredential("YOUR-LANGUAGE-RESOURCE-KEY");
            QuestionAnsweringClient client = new QuestionAnsweringClient(endpoint, credential);

            IEnumerable<TextDocument> records = new[]
            {
                new TextDocument("doc1", "Power and charging.It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. " +
                         "It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it"),
                new TextDocument("doc2", "You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. " +
                         "The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface."),
            };

            AnswersFromTextOptions options = new AnswersFromTextOptions("How long does it takes to charge a surface?", records);
            Response<AnswersFromTextResult> response = client.GetAnswersFromText(options);

           foreach (TextAnswer answer in response.Value.Answers)
            {
                if (answer.Confidence > .9)
                {
                    string BestAnswer = response.Value.Answers[0].Answer;

                    Console.WriteLine($"Q:{options.Question}");
                    Console.WriteLine($"A:{BestAnswer}");
                    Console.WriteLine($"Confidence Score: ({response.Value.Answers[0].Confidence:P2})"); //:P2 converts the result to a percentage with 2 decimals of accuracy. 
                    break;
                }
                else
                {
                    Console.WriteLine($"Q:{options.Question}");
                    Console.WriteLine("No answers met the requested confidence score.");
                    break;
                }
            }

        }
    }
}

Pour exécuter le code ci-dessus, remplacez Program.cs par le contenu du bloc de script ci-dessus et modifiez les variables endpoint et credential afin qu’elles correspondent à la ressource de langue que vous avez créée dans le cadre des prérequis.

Dans ce cas, nous parcourons toutes les réponses et retournons uniquement la réponse avec le score de confiance le plus élevé qui est supérieur à 0,9. Pour en savoir plus sur les options disponibles avec GetAnswersFromText.

Utilisez ce guide de démarrage rapide pour la bibliothèque de client de réponses aux questions personnalisées pour Python pour :

  • Obtenez une réponse à partir d’un projet.
  • Revoir une réponse à partir d’un corps de texte que vous envoyez avec votre question.
  • Obtenir le score de confiance pour la réponse à votre question.

Documentation de référence | Package (PyPI) | Exemples supplémentaires | Code source de la bibliothèque

Prérequis

  • Abonnement Azure - En créer un gratuitement
  • Python 3.x
  • Les réponses aux questions personnalisées nécessitent une ressource Language avec la fonctionnalité de réponses aux questions personnalisées activée pour générer une clé API et un point de terminaison.
    • Après le déploiement de votre ressource de langage, sélectionnez Accéder à la ressource. Vous avez besoin de la clé et du point de terminaison de la ressource que vous créez pour vous connecter à l’API. Collez votre clé et votre point de terminaison dans le code ci-dessous, plus loin dans le guide de démarrage rapide.
  • Pour créer une ressource Langage avec l’interface Azure CLI, fournissez les autres propriétés suivantes : --api-properties qnaAzureSearchEndpointId=/subscriptions/<azure-subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Search/searchServices/<azure-search-service-name> qnaAzureSearchEndpointKey=<azure-search-service-auth-key>
  • Projet existant à interroger. Si vous n’avez pas configuré de projet, vous pouvez suivre les instructions se trouvant dans le Guide de démarrage rapide de Language Studio. Vous pouvez également ajouter un projet utilisant cette URL du guide d’utilisation de Surface comme source de données.

Configuration

Installer la bibliothèque de client

Après avoir installé Python, vous pouvez installer la bibliothèque de client avec :

pip install azure-ai-language-questionanswering

Interroger un projet

Générer une réponse à partir d’un projet

L’exemple ci-dessous vous permet d’interroger un projet à l’aide de get_answers pour recevoir une réponse à votre question. Vous pouvez copier ce code dans un fichier .py dédié ou dans une cellule dans Jupyter Notebook/Lab.

Vous devez mettre à jour le code ci-dessous et fournir vos propres valeurs pour les variables suivantes.

Nom de la variable Valeur
endpoint Cette valeur se trouve dans la section Clés et point de terminaison quand vous examinez votre ressource à partir du portail Azure. Vous pouvez également trouver la valeur dans Language Studio>Réponses aux questions>Déployer un projet>Obtenir une URL de prédiction. Voici un exemple de point de terminaison : https://southcentralus.api.cognitive.microsoft.com/
credential Cette valeur se trouve dans la section Clés et point de terminaison quand vous examinez votre ressource à partir du portail Azure. Vous pouvez utiliser Key1 ou Key2. Toujours avoir deux clés valides pour la permutation de clés sécurisée sans temps d’arrêt. Vous pouvez également trouver la valeur dans Language Studio>Réponses aux questions>Déployer un projet>Obtenir une URL de prédiction. La valeur de clé fait partie de l’exemple de demande.
knowledge_base_project Nom de votre projet de réponses aux questions.
deployment Il existe deux valeurs possibles : test et production. production dépend de la façon dont vous avez déployé votre projet à partir de Language Studio>Réponses aux questions>Déployer un projet.

Important

N’oubliez pas de supprimer la clé de votre code une fois que vous avez terminé, et ne la postez jamais publiquement. Pour la production, utilisez un moyen sécurisé de stocker et d’accéder à vos informations d’identification comme Azure Key Vault. Pour plus d’informations, consultez l’article sur la Sécurité d’Azure AI services.

from azure.core.credentials import AzureKeyCredential
from azure.ai.language.questionanswering import QuestionAnsweringClient

endpoint = "https://{YOUR-ENDPOINT}.api.cognitive.microsoft.com/"
credential = AzureKeyCredential("{YOUR-LANGUAGE-RESOURCE-KEY}")
knowledge_base_project = "{YOUR-PROJECT-NAME}"
deployment = "production"

def main():
    client = QuestionAnsweringClient(endpoint, credential)
    with client:
        question="How much battery life do I have left?"
        output = client.get_answers(
            question = question,
            project_name=knowledge_base_project,
            deployment_name=deployment
        )
    print("Q: {}".format(question))
    print("A: {}".format(output.answers[0].answer))

if __name__ == '__main__':
    main()

Tandis que nous programmons en dur les variables pour notre exemple. Pour la production, envisagez d’utiliser une méthode de stockage et d’accès sécurisée pour vos informations d’identification. Par exemple, Azure Key Vault fournit un stockage de clé sécurisé.

Quand vous exécutez le code ci-dessus, si vous utilisez la source de données à partir des prérequis, vous obtenez une réponse qui se présente comme suit :

Q: How much battery life do I have left?
A: If you want to see how much battery you have left, go to **Start  **> **Settings  **> **Devices  **> **Bluetooth & other devices  **, then find your pen. The current battery level will appear under the battery icon.

Pour plus d’informations sur la façon de connaître le degré de confiance des réponses aux questions personnalisées quant au fait qu’il s’agit de la bonne réponse, ajoutez une instruction print sous les instructions print existantes :

print("Q: {}".format(question))
print("A: {}".format(output.answers[0].answer))
print("Confidence Score: {}".format(output.answers[0].confidence)) # add this line 

Vous recevez maintenant un résultat avec un score de confiance :

Q: How much battery life do I have left?
A: If you want to see how much battery you have left, go to **Start  **> **Settings  **> **Devices  **> **Bluetooth & other devices  **, then find your pen. The current battery level will appear under the battery icon.
Confidence Score: 0.9185

Le score de confiance retourne une valeur comprise entre 0 et 1. Vous pouvez considérer cela comme un pourcentage et le multiplier par 100. Ainsi, un score de confiance de 0,9185 signifie que, d’après les réponses aux questions personnalisées, il existe 91,85 % de chance qu’il s’agisse de la bonne réponse à la question en fonction du projet.

Si vous souhaitez exclure les réponses où le score de confiance est inférieur à un certain seuil, vous pouvez modifier AnswerOptions pour ajouter le paramètre confidence_threshold.

        output = client.get_answers(
            confidence_threshold = 0.95, #add this line
            question = question,
            project_name=knowledge_base_project,
            deployment_name=deployment
        )

Notre score de confiance étant de .9185 d’après notre précédente exécution du code, la définition du seuil sur .95 entraîne le retour de la réponse par défaut.

Q: How much battery life do I have left?
A: No good match found in KB
Confidence Score: 0.0

Interroger un texte sans projet

Vous pouvez également utiliser les réponses aux questions personnalisées sans projet avec get_answers_from_text. Dans ce cas, vous fournissez aux réponses aux questions personnalisées une question et les enregistrements texte dans lesquels vous souhaitez rechercher une réponse au moment où la demande est envoyée.

Pour cet exemple, vous devez uniquement modifier les variables pour endpoint et credential.

import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.language.questionanswering import QuestionAnsweringClient
from azure.ai.language.questionanswering import models as qna

endpoint = "https://{YOUR-ENDPOINT}.api.cognitive.microsoft.com/"
credential = AzureKeyCredential("YOUR-LANGUAGE-RESOURCE-KEY")

def main():
    client = QuestionAnsweringClient(endpoint, credential)
    with client:
        question="How long does it takes to charge a surface?"
        input = qna.AnswersFromTextOptions(
            question=question,
            text_documents=[
                "Power and charging. It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. " +
                "It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it.",
                "You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. " +
                "The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface.",
            ]
        )


        output = client.get_answers_from_text(input)

    best_answer = [a for a in output.answers if a.confidence > 0.9][0]
    print(u"Q: {}".format(input.question))
    print(u"A: {}".format(best_answer.answer))
    print("Confidence Score: {}".format(output.answers[0].confidence))

if __name__ == '__main__':
    main()

Vous pouvez copier ce code dans un fichier .py dédié ou dans une nouvelle cellule dans Jupyter Notebook/Lab. Cet exemple retourne un résultat de :

Q: How long does it takes to charge surface?
A: Power and charging. It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it.
Confidence Score: 0.9254655838012695

Dans ce cas, nous parcourons toutes les réponses et retournons uniquement la réponse avec le score de confiance le plus élevé qui est supérieur à 0,9. Pour en savoir plus sur les options disponibles avec get_answers_from_text, passez en revue les paramètres AnswersFromTextOptions.

Nettoyer les ressources

Si vous souhaitez nettoyer et supprimer un abonnement Azure AI services, vous pouvez supprimer la ressource ou le groupe de ressources. La suppression du groupe de ressources efface également les autres ressources qui y sont associées.

Explorer l’API REST

Pour en savoir plus sur l’automatisation de votre pipeline de réponses aux questions personnalisées, consultez la documentation de l’API REST. Actuellement, la fonctionnalité de création n’est disponible que par le biais de l’API REST :

Étapes suivantes