Démarrage rapide : réponses aux questions personnalisées
Article
Notes
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
Connectez-vous à Language Studio avec vos informations d’identification Azure.
Faites défiler jusqu’à la section Answer questions et sélectionnez Open custom question answering.
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.
Sélectionnez Enable custom question answering, choisissez la ressource Recherche Azure à lier, puis sélectionnez Appliquer.
Retournez à l’onglet Language Studio. Vous devrez peut-être actualiser cette page pour qu’elle inscrive le changement apporté à votre ressource. Sélectionnez Create new project.
Choisissez l’option I want to set the language for all projects created in this resource> sélectionnez English>Next.
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.
Passez en revue vos choix, puis sélectionnez Create project.
Dans la page Manage sources, sélectionnez Add source>URLS.
Sélectionnez Add url, entrez les valeurs suivantes, puis sélectionnez Add all :
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
Sélectionnez le lien vers votre source pour ouvrir la page de modification du projet.
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 :
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.
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.
À 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
Sélectionnez l’icône Déployer un projet pour entrer dans le menu du déploiement de projet.
Lorsque vous déployez un projet, le contenu de votre projet passe de l’index test à un index prod dans Recherche Azure.
Sélectionnez Deploy> et, à l’invite, sélectionnez à nouveau Deploy.
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.
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>
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.
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.
Pour définir la variable d’environnement LANGUAGE_KEY, remplacez your-key par l’une des clés de votre ressource.
Pour définir la LANGUAGE_ENDPOINTvariable d’environnement, remplacez your-endpoint par le point de terminaison de votre ressource.
Important
Si vous utilisez une clé API, stockez-la en toute sécurité dans un autre emplacement, par exemple dans Azure Key Vault. N'incluez pas la clé API directement dans votre code et ne la diffusez jamais publiquement.
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.
export LANGUAGE_KEY=your-key
export LANGUAGE_ENDPOINT=your-endpoint
Après avoir ajouté les variables d’environnement, exécutez source ~/.bashrc à partir de la fenêtre de console pour appliquer les changements.
Bash
export LANGUAGE_KEY=your-key
export LANGUAGE_ENDPOINT=your-endpoint
Après avoir ajouté les variables d’environnement, exécutez source ~/.bash_profile à partir de la fenêtre de console pour appliquer les changements.
Xcode
Pour le développement iOS et macOS, vous définissez les variables d’environnement dans Xcode. Par exemple, suivez ces étapes pour définir la variable d’environnement dans Xcode 13.4.1.
Sélectionnez Produit>Schéma>Modifier le schéma.
Sélectionnez Arguments dans la page Exécuter (Exécution de débogage).
Sous Variables d’environnement, sélectionnez le signe plus (+) pour ajouter une nouvelle variable d’environnement.
Entrez LANGUAGE_KEY comme Nom et votre clé de ressource de langage comme Valeur.
Effectuez ces étapes pour votre point de terminaison de ressource. Nommez la nouvelle variable d’environnement LANGUAGE_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.
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>
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.
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.
Pour définir la variable d’environnement LANGUAGE_KEY, remplacez your-key par l’une des clés de votre ressource.
Pour définir la LANGUAGE_ENDPOINTvariable d’environnement, remplacez your-endpoint par le point de terminaison de votre ressource.
Important
Si vous utilisez une clé API, stockez-la en toute sécurité dans un autre emplacement, par exemple dans Azure Key Vault. N'incluez pas la clé API directement dans votre code et ne la diffusez jamais publiquement.
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.
export LANGUAGE_KEY=your-key
export LANGUAGE_ENDPOINT=your-endpoint
Après avoir ajouté les variables d’environnement, exécutez source ~/.bashrc à partir de la fenêtre de console pour appliquer les changements.
Bash
export LANGUAGE_KEY=your-key
export LANGUAGE_ENDPOINT=your-endpoint
Après avoir ajouté les variables d’environnement, exécutez source ~/.bash_profile à partir de la fenêtre de console pour appliquer les changements.
Xcode
Pour le développement iOS et macOS, vous définissez les variables d’environnement dans Xcode. Par exemple, suivez ces étapes pour définir la variable d’environnement dans Xcode 13.4.1.
Sélectionnez Produit>Schéma>Modifier le schéma.
Sélectionnez Arguments dans la page Exécuter (Exécution de débogage).
Sous Variables d’environnement, sélectionnez le signe plus (+) pour ajouter une nouvelle variable d’environnement.
Entrez LANGUAGE_KEY comme Nom et votre clé de ressource de langage comme Valeur.
Effectuez ces étapes pour votre point de terminaison de ressource. Nommez la nouvelle variable d’environnement LANGUAGE_ENDPOINT.
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 :
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.
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>
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.
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 :
Gérer l’ingestion et la préparation des données, l’entraînement et le déploiement des modèles, ainsi que la surveillance des solutions d’apprentissage automatique avec Python, Azure Machine Learning et MLflow.