Commencez à évaluer les réponses dans une application de chat en Python
Cet article vous montre comment évaluer les réponses d’une application de chat par rapport à un ensemble de réponses correctes ou idéales (connues sous le nom de vérité terrain). Chaque fois que vous modifiez votre application de chat d’une manière qui affecte les réponses, exécutez une évaluation pour comparer les modifications. Cette application de démonstration offre des outils que vous pouvez utiliser dès aujourd’hui pour faciliter l’exécution des évaluations.
En suivant les instructions de cet article, vous allez :
- Utilisez les flux d’invite fournis, adaptés au domaine du sujet. Ces flux d’invite sont déjà dans le référentiel.
- Générez des questions d’utilisateur exemple et des réponses de vérité terrain à partir de vos propres documents.
- Exécutez des évaluations en utilisant un flux d’invite exemple avec les questions d’utilisateur générées.
- Passez en revue l’analyse des réponses.
Remarque
Cet article utilise un ou plusieurs modèles d’application IA comme base pour les exemples et les conseils qu’il contient. Les modèles d’application IA vous fournissent des implémentations de référence bien gérées et faciles à déployer, qui constituent un point de départ de qualité pour vos applications IA.
Vue d’ensemble de l’architecture
Les principaux composants de l’architecture sont les suivants :
- Application de chat hébergée sur Azure : L’application de chat s’exécute dans Azure App Service.
- Microsoft AI Chat Protocol fournit des contrats d’API standardisés pour les solutions et les langages d’IA. L’application de chat est conforme au Microsoft AI Chat Protocol, ce qui permet à l’application d’évaluation de fonctionner avec toute application de chat conforme au protocole.
- Recherche Azure AI : L’application de chat utilise Azure AI Search pour stocker les données de vos propres documents.
- Générateur de questions d’exemple : Peut générer de nombreuses questions pour chaque document avec la réponse basée sur la réalité terrain. Plus il y a de questions, plus l’évaluation est longue.
- L’évaluateur exécute des questions et flux d’invite exemples contre l’application de chat et renvoie les résultats.
- L’outil de révision vous permet de passer en revue les résultats des évaluations.
- L’outil Diff vous permet de comparer les réponses entre les évaluations.
Lorsque vous déployez cette évaluation sur Azure, le point de terminaison Azure OpenAI est créé pour le modèle GPT-4
avec sa propre capacité. Lors de l’évaluation des applications de chat, il est important que l’évaluateur dispose de sa propre ressource OpenAI en utilisant GPT-4
avec sa propre capacité.
Prérequis
Abonnement Azure. Créez-en un gratuitement
Accès accordé à Azure OpenAI dans l’abonnement Azure souhaité. Pour en savoir plus, rendez-vous sur https://aka.ms/oai/access.
Terminez la procédure précédente d’application de chat pour déployer l’application de chat sur Azure. Cette ressource est requise pour que l’application d’évaluation fonctionne. Ne complétez pas la section Nettoyer les ressources de la procédure précédente.
Vous aurez besoin des informations de ressources Azure suivantes de ce déploiement, qui est appelé application de chat dans cet article :
- URI de l’API de chat : Le point de terminaison de backend de service affiché à la fin du processus
azd up
. - Recherche Azure AI. Les valeurs suivantes sont requises :
- Nom de la ressource : Le nom de la ressource Azure AI Search, rapporté comme
Search service
pendant le processusazd up
. - Nom de l’index : Le nom de l’index Azure AI Search où vos documents sont stockés. Cela peut être trouvé dans le portail Azure pour le service de recherche.
- Nom de la ressource : Le nom de la ressource Azure AI Search, rapporté comme
L’URL de l’API de chat permet aux évaluations d’effectuer des requêtes via votre application backend. Les informations d’Azure AI Search permettent aux scripts d’évaluation d’utiliser le même modèle de déploiement que votre backend, chargé avec les documents.
Une fois que vous avez collecté ces informations, vous ne devriez plus avoir besoin d’utiliser à nouveau l’environnement de développement de l’application de chat. Il est mentionné plus loin dans cet article à plusieurs reprises pour indiquer comment l’application de chat est utilisée par l’application d’évaluations. Ne supprimez pas les ressources de l’application de chat tant que vous n’avez pas terminé la procédure complète de cet article.
- URI de l’API de chat : Le point de terminaison de backend de service affiché à la fin du processus
Un environnement de conteneur de développement est disponible avec toutes les dépendances requises pour terminer cet article. Vous pouvez exécuter le conteneur de développement dans GitHub Codespaces (dans un navigateur) ou localement à l’aide de Visual Studio Code.
- Compte GitHub
Environnement de développement ouvert
Commencez maintenant par un environnement de développement sur lequel toutes les dépendances sont installées pour terminer cet article. Vous devriez organiser votre espace de travail de moniteur afin de pouvoir voir à la fois cette documentation et l’environnement de développement en même temps.
Cet article a été testé avec la région switzerlandnorth
pour le déploiement d’évaluation.
GitHub Codespaces exécute un conteneur de développement géré par GitHub avec Visual Studio Code pour le web comme interface utilisateur. Pour un environnement de développement le plus simple, utilisez GitHub Codespaces pour disposer des outils de développement et des dépendances appropriés préinstallés pour terminer cet article.
Important
Tous les comptes GitHub peuvent utiliser codespaces pendant jusqu’à 60 heures gratuites chaque mois avec 2 instances principales. Pour plus d’informations, consultez Le stockage mensuel inclus et les heures de cœur GitHub Codespaces.
Démarrez le processus pour créez un environnement GitHub Codespace sur la branche
main
du référentiel GitHubAzure-Samples/ai-rag-chat-evaluator
.Pour afficher simultanément l’environnement de développement et la documentation disponible, faites un clic droit sur le bouton suivant et sélectionnez Ouvrir le lien dans une nouvelle fenêtre.
Dans la page Créer un codespace , passez en revue les paramètres de configuration du codespace, puis sélectionnez Créer un codespace
Attendez que le codespace démarre. Ce processus de démarrage peut prendre quelques minutes.
Dans le terminal en bas de l’écran, connectez-vous à Azure avec le CLI Azure Developer.
azd auth login --use-device-code
Copiez le code à partir du terminal, puis collez-le dans un navigateur. Suivez les instructions pour vous authentifier avec votre compte Azure.
Approvisionnez la ressource Azure requise, Azure OpenAI, pour l’application d’évaluations.
azd up
Ce
AZD command
ne déploie pas l’application d’évaluations, mais crée la ressource Azure OpenAI avec un modèle de déploiementGPT-4
requis pour exécuter les évaluations dans l’environnement de développement local.Les tâches restantes de cet article s’effectuent dans ce conteneur de développement.
Le nom du référentiel GitHub est affiché dans la barre de recherche. Cet indicateur visuel vous aide à distinguer l’application d’évaluations de l’application de chat. Ce référentiel
ai-rag-chat-evaluator
est appelé l’application d’évaluations dans cet article.
Préparez les valeurs d’environnement et les informations de configuration
Mettez à jour les valeurs d’environnement et les informations de configuration avec les informations que vous avez recueillies lors des prérequis pour l’application d’évaluations.
Créez un
.env
fichier basé sur.env.sample
:cp .env.sample .env
Exécutez ces commandes pour obtenir les valeurs requises pour
AZURE_OPENAI_EVAL_DEPLOYMENT
etAZURE_OPENAI_SERVICE
à partir de votre groupe de ressources déployé et collez ces valeurs dans le.env
fichier :azd env get-value AZURE_OPENAI_EVAL_DEPLOYMENT azd env get-value AZURE_OPENAI_SERVICE
Ajoutez les valeurs suivantes de l’application de chat pour son instance Azure AI Search au
.env
, que vous avez rassemblé dans la section prérequis :AZURE_SEARCH_SERVICE="<service-name>" AZURE_SEARCH_INDEX="<index-name>"
Utilisez le Microsoft AI Chat Protocol pour obtenir des informations de configuration.
L’application de chat et l’application d’évaluations implémentent toutes deux le Microsoft AI Chat Protocol specification
, un contrat d’API de point de terminaison AI open source, cloud et indépendant de la langue, utilisé pour la consommation et l’évaluation. Lorsque vos points de terminaison client et intermédiaire adhèrent à cette spécification d’API, vous pouvez consommer et exécuter des évaluations de manière cohérente sur vos backends AI.
Créez un nouveau fichier nommé
my_config.json
et copiez-y le contenu suivant :{ "testdata_path": "my_input/qa.jsonl", "results_dir": "my_results/experiment<TIMESTAMP>", "target_url": "http://localhost:50505/chat", "target_parameters": { "overrides": { "top": 3, "temperature": 0.3, "retrieval_mode": "hybrid", "semantic_ranker": false, "prompt_template": "<READFILE>my_input/prompt_refined.txt", "seed": 1 } } }
script d’évaluation crée le dossier
my_results
.L’objet
overrides
contient tous les paramètres de configuration nécessaires à l’application. Chaque application définit son propre ensemble de propriétés de paramètres.Utilisez le tableau suivant pour comprendre la signification des propriétés des paramètres envoyées à l’application de conversation :
Propriété de paramètres Description semantic_ranker Indique s’il faut utiliser le ranker sémantique, un modèle qui réécrit les résultats de recherche en fonction de la similarité sémantique de la requête de l’utilisateur. Nous le désactivons pour ce didacticiel afin de réduire les coûts. retrieval_mode Mode de récupération à utiliser. Par défaut, il s’agit de hybrid
.température Paramètre de température du modèle. Par défaut, il s’agit de 0.3
.haut Nombre de résultats de recherche à retourner. Par défaut, il s’agit de 3
.prompt_template Remplacement de l’invite utilisée pour générer la réponse en fonction de la question et des résultats de la recherche. seed Valeur de départ pour tous les appels aux modèles GPT. La définition d’une valeur initiale entraîne des résultats plus cohérents entre les évaluations. Changez le
target_url
en valeur URI de votre application de chat, que vous avez recueillie dans la section prérequis. L’application de chat doit être conforme au protocole de chat. L’URI a le format suivanthttps://CHAT-APP-URL/chat
. Assurez-vous que le protocole et la routechat
font partie de l’URI.
Générer un exemple de données
Pour évaluer de nouvelles réponses, elles doivent être comparées à une réponse « vérité terrain », qui est la réponse idéale pour une question particulière. Générez des questions et des réponses à partir de documents stockés dans Azure AI Search pour l’application de chat.
Copiez le dossier
example_input
dans un nouveau dossier nommémy_input
.Dans un terminal, exécutez la commande suivante pour générer les données d’exemple :
python -m evaltools generate --output=my_input/qa.jsonl --persource=2 --numquestions=14
les paires question/réponse sont générées et stockées dans my_input/qa.jsonl
(au format JSONL) en tant qu’entrée pour l’évaluateur utilisé à l’étape suivante. Pour une évaluation en production, vous généreriez plus de paires QA, plus de 200 pour cet ensemble de données.
Remarque
Le petit nombre de questions et de réponses par source est destiné à vous permettre de terminer rapidement cette procédure. Il n’est pas destiné à être une évaluation en production qui devrait comporter plus de questions et de réponses par source.
Exécutez la première évaluation avec un flux d’invite raffiné
Modifiez les propriétés du fichier config
my_config.json
:Propriété Nouvelle valeur results_dir my_results/experiment_refined
prompt_template <READFILE>my_input/prompt_refined.txt
Le flux d’invite raffiné est spécifique au domaine du sujet.
If there isn't enough information below, say you don't know. Do not generate answers that don't use the sources below. If asking a clarifying question to the user would help, ask the question. Use clear and concise language and write in a confident yet friendly tone. In your answers ensure the employee understands how your response connects to the information in the sources and include all citations necessary to help the employee validate the answer provided. For tabular information return it as an html table. Do not return markdown format. If the question is not in English, answer in the language used in the question. Each source has a name followed by colon and the actual information, always include the source name for each fact you use in the response. Use square brackets to reference the source, e.g. [info1.txt]. Don't combine sources, list each source separately, e.g. [info1.txt][info2.pdf].
Dans un terminal, exécutez la commande suivante pour exécuter l’évaluation :
python -m evaltools evaluate --config=my_config.json --numquestions=14
Ce script a créé un nouveau dossier d’expérimentation dans
my_results/
avec l’évaluation. Le dossier contient les résultats de l’évaluation, y compris :Nom de fichier Description config.json
Copie du fichier de configuration utilisé pour l’évaluation. evaluate_parameters.json
Paramètres utilisés pour l’évaluation. Très similaire à config.json
mais inclut des métadonnées supplémentaires telles que l’horodatage.eval_results.jsonl
Chaque question et réponse, ainsi que les métriques GPT pour chaque paire QA. summary.json
Les résultats globaux, comme la moyenne des métriques GPT.
Exécutez la deuxième évaluation avec un flux d’invite faible.
Modifiez les propriétés du fichier config
my_config.json
:Propriété Nouvelle valeur results_dir my_results/experiment_weak
prompt_template <READFILE>my_input/prompt_weak.txt
Ce flux d’invite faible n’a aucun contexte sur le domaine du sujet :
You are a helpful assistant.
Dans un terminal, exécutez la commande suivante pour exécuter l’évaluation :
python -m evaltools evaluate --config=my_config.json --numquestions=14
Exécutez la troisième évaluation avec une température spécifique
Utilisez un flux d’invite qui permet plus de créativité.
Modifiez les propriétés du fichier config
my_config.json
:Existing Propriété Nouvelle valeur Existing results_dir my_results/experiment_ignoresources_temp09
Existing prompt_template <READFILE>my_input/prompt_ignoresources.txt
Nouvelle température 0.9
La valeur par défaut de
temperature
est 0,7. Plus la température est élevée, plus les réponses sont créatives.Le flux d’invite
ignore
est court :Your job is to answer questions to the best of your ability. You will be given sources but you should IGNORE them. Be creative!
L’objet config doit ressembler à ce qui suit, sauf que remplacez
results_dir
par votre chemin d’accès :{ "testdata_path": "my_input/qa.jsonl", "results_dir": "my_results/prompt_ignoresources_temp09", "target_url": "https://YOUR-CHAT-APP/chat", "target_parameters": { "overrides": { "temperature": 0.9, "semantic_ranker": false, "prompt_template": "<READFILE>my_input/prompt_ignoresources.txt" } } }
Dans un terminal, exécutez la commande suivante pour exécuter l’évaluation :
python -m evaltools evaluate --config=my_config.json --numquestions=14
Examiner les résultats de l’évaluation
Vous avez effectué trois évaluations basées sur différents flux d’invite et paramètres de l’application. Les résultats sont stockés dans le dossier my_results
. Examinez comment les résultats diffèrent en fonction des paramètres.
Utilisez l’outil de révision pour voir les résultats des évaluations :
python -m evaltools summary my_results
Les résultats ressemblent à quelque chose comme :
Chaque valeur est renvoyée sous forme de nombre et de pourcentage.
Utilisez le tableau suivant pour comprendre la signification des valeurs.
Valeur Description Fondement Cela fait référence à la qualité des réponses du modèle basée sur des informations factuelles et vérifiables. Une réponse est considérée comme fondée si elle est factuellement exacte et reflète la réalité. Pertinence Cela mesure dans quelle mesure les réponses du modèle s’alignent sur le contexte ou le flux d’invite. Une réponse pertinente répond directement à la requête ou à l’énoncé de l’utilisateur. Cohérence Cela fait référence à la cohérence logique des réponses du modèle. Une réponse cohérente maintient un flux logique et ne se contredit pas. Citation Cela indique si la réponse a été renvoyée dans le format demandé dans le flux d’invite. Longueur Cela mesure la longueur de la réponse. Les résultats devraient indiquer que les trois évaluations avaient une pertinence élevée tandis que le
experiment_ignoresources_temp09
avait la pertinence la plus basse.Sélectionnez le dossier pour voir la configuration de l’évaluation.
Entrez Ctrl + C quittez l’application et revenez au terminal.
Comparez les réponses
Comparez les réponses renvoyées des évaluations.
Sélectionnez deux des évaluations à comparer, puis utilisez le même outil de révision pour comparer les réponses :
python -m evaltools diff my_results/experiment_refined my_results/experiment_ignoresources_temp09
Passez en revue les résultats. Vos résultats peuvent varier.
Entrez Ctrl + C quittez l’application et revenez au terminal.
Suggestions pour d’autres évaluations
- Modifiez les flux d’invite dans
my_input
pour adapter les réponses telles que le domaine du sujet, la longueur et d’autres facteurs. - Modifiez le fichier
my_config.json
pour modifier les paramètres tels quetemperature
, etsemantic_ranker
et relancez les expériences. - Comparez différentes réponses pour comprendre comment le flux d’invite et la question affectent la qualité de la réponse.
- Générez un ensemble distinct de questions et de réponses de vérité terrain pour chaque document de l’index Azure AI Search. Puis relancez les évaluations pour voir comment les réponses diffèrent.
- Modifiez les flux d’invite pour indiquer des réponses plus courtes ou plus longues en ajoutant l’exigence à la fin du flux d’invite. Par exemple :
Please answer in about 3 sentences.
.
Nettoyez les ressources et les dépendances
Nettoyage des ressources Azure
Les ressources Azure créées dans cet article sont facturées dans votre abonnement Azure. Si vous pensez ne plus avoir besoin de ces ressources, supprimez-les pour éviter des frais supplémentaires.
Pour supprimer les ressources Azure et supprimer le code source, exécutez la commande CLI Azure Developer suivante :
azd down --purge
Nettoyer GitHub Codespaces
La suppression de l’environnement GitHub Codespaces vous permet d’optimiser le nombre d’heures gratuites par cœur que vous obtenez pour votre compte.
Important
Pour plus d’informations sur les droits de votre compte GitHub, consultez GitHub Codespaces mensuel inclus stockage et heures principales.
Connectez-vous au tableau de bord GitHub Codespaces (https://github.com/codespaces).
Localisez vos codespaces en cours d’exécution provenant du référentiel GitHub
Azure-Samples/ai-rag-chat-evaluator
.Ouvrez le menu contextuel du codespace, puis sélectionnez Supprimer.
Revenez à l’article application de chat pour nettoyer ces ressources.
Étapes suivantes
- Référentiel d’évaluations
- Référentiel GitHub de l’application de conversation d’entreprise
- Créer une application de chat avec Azure OpenAI Architecture de solution recommandée
- Contrôle d’accès dans les applications d’IA générative avec Recherche Azure AI
- Créer une solution OpenAI prête pour l’entreprise avec Gestion des API Azure
- Recherche vectorielle plus performante avec des fonctionnalités de récupération et de classement hybrides