Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Remarque
Ce document fait référence au portail Microsoft Foundry (classique).
🔍 Consultez la documentation Microsoft Foundry (nouvelle) pour en savoir plus sur le nouveau portail.
Dans ce tutoriel, vous évaluez l’application de conversation que vous avez créée dans la partie 2 de la série de tutoriels. Vous évaluez la qualité de votre application sur plusieurs métriques, puis effectuez une itération sur les améliorations. Dans cette partie, vous :
- Créer un jeu de données d'évaluation
- Évaluer l'application de chat avec les évaluateurs Azure AI
- Itérer et améliorer votre application
Ce tutoriel s’appuie sur la partie 2 : Créer une application de conversation personnalisée avec le Kit de développement logiciel (SDK) Microsoft Foundry.
Conditions préalables
Important
Cet article fournit une prise en charge pour les versions antérieures des projets basés sur le hub. Elle ne fonctionnera pas pour les projets Foundry. Découvrez comment savoir quel type de projet j’ai ?
Remarque de compatibilité du Kit de développement logiciel (SDK) : les exemples de code nécessitent une version spécifique du Kit de développement logiciel (SDK) Microsoft Foundry. Si vous rencontrez des problèmes de compatibilité, envisagez de migrer d’un hub vers un projet Foundry.
- Un compte Azure avec un abonnement actif. Si vous n’en avez pas, créez un compte Azure gratuit, qui inclut un abonnement d’essai gratuit.
- Si vous n’en avez pas, créez un projet hub.
- Terminez la partie 2 de la série de tutoriels pour générer l’application de conversation.
- Utilisez le même projet hub que celui que vous avez créé dans la partie 1.
- Autorisations Azure AI : rôle Propriétaire ou Contributeur pour modifier les limites du taux de point de terminaison du modèle et exécuter des travaux d’évaluation.
- Veillez à effectuer les étapes pour ajouter la journalisation des données de télémétrie à partir de la partie 2.
Créer un jeu de données d'évaluation
Utilisez le jeu de données d’évaluation suivant, qui contient des exemples de questions et des réponses attendues. Utilisez ce jeu de données avec un évaluateur et la get_chat_response() fonction cible pour évaluer les performances de votre application de conversation sur la pertinence, l’importance et la cohérence des métriques.
Créez un fichier nommé chat_eval_data.jsonl dans votre dossier de ressources .
Collez ce jeu de données dans le fichier :
{"query": "Which tent is the most waterproof?", "truth": "The Alpine Explorer Tent has the highest rainfly waterproof rating at 3000m"} {"query": "Which camping table holds the most weight?", "truth": "The Adventure Dining Table has a higher weight capacity than all of the other camping tables mentioned"} {"query": "How much do the TrailWalker Hiking Shoes cost? ", "truth": "The Trailewalker Hiking Shoes are priced at $110"} {"query": "What is the proper care for trailwalker hiking shoes? ", "truth": "After each use, remove any dirt or debris by brushing or wiping the shoes with a damp cloth."} {"query": "What brand is TrailMaster tent? ", "truth": "OutdoorLiving"} {"query": "How do I carry the TrailMaster tent around? ", "truth": " Carry bag included for convenient storage and transportation"} {"query": "What is the floor area for Floor Area? ", "truth": "80 square feet"} {"query": "What is the material for TrailBlaze Hiking Pants?", "truth": "Made of high-quality nylon fabric"} {"query": "What color does TrailBlaze Hiking Pants come in?", "truth": "Khaki"} {"query": "Can the warrenty for TrailBlaze pants be transfered? ", "truth": "The warranty is non-transferable and applies only to the original purchaser of the TrailBlaze Hiking Pants. It is valid only when the product is purchased from an authorized retailer."} {"query": "How long are the TrailBlaze pants under warranty for? ", "truth": " The TrailBlaze Hiking Pants are backed by a 1-year limited warranty from the date of purchase."} {"query": "What is the material for PowerBurner Camping Stove? ", "truth": "Stainless Steel"} {"query": "Is France in Europe?", "truth": "Sorry, I can only queries related to outdoor/camping gear and equipment"}Références : format JSONL pour les jeux de données d’évaluation.
Évaluer avec les évaluateurs Azure AI
Créez un script d’évaluation qui génère un wrapper de fonction cible, charge votre jeu de données, exécute l’évaluation et journalise les résultats dans votre projet Foundry.
Créez un fichier nommé evaluate.py dans votre dossier principal.
Ajoutez le code suivant pour importer les bibliothèques requises, créer un client de projet et configurer certains paramètres :
import os import pandas as pd from azure.ai.projects import AIProjectClient from azure.ai.projects.models import ConnectionType from azure.ai.evaluation import evaluate, GroundednessEvaluator from azure.identity import DefaultAzureCredential from chat_with_products import chat_with_products # load environment variables from the .env file at the root of this repo from dotenv import load_dotenv load_dotenv() # create a project client using environment variables loaded from the .env file project = AIProjectClient.from_connection_string( conn_str=os.environ["AIPROJECT_CONNECTION_STRING"], credential=DefaultAzureCredential() ) connection = project.connections.get_default(connection_type=ConnectionType.AZURE_OPEN_AI, include_credentials=True) evaluator_model = { "azure_endpoint": connection.endpoint_url, "azure_deployment": os.environ["EVALUATION_MODEL"], "api_version": "2024-06-01", "api_key": connection.key, } groundedness = GroundednessEvaluator(evaluator_model)Références : AIProjectClient, DefaultAzureCredential, azure-ai-evaluation.
Ajoutez du code pour créer une fonction wrapper qui implémente l'interface d'évaluation pour l'évaluation des requêtes et des réponses :
def evaluate_chat_with_products(query): response = chat_with_products(messages=[{"role": "user", "content": query}]) return {"response": response["message"].content, "context": response["context"]["grounding_data"]}Références : azure-ai-evaluation, fonctions cibles d’évaluation.
Enfin, ajoutez du code pour exécuter l’évaluation, affichez les résultats localement et obtenez un lien vers les résultats de l’évaluation dans le portail Foundry :
# Evaluate must be called inside of __main__, not on import if __name__ == "__main__": from config import ASSET_PATH # workaround for multiprocessing issue on linux from pprint import pprint from pathlib import Path import multiprocessing import contextlib with contextlib.suppress(RuntimeError): multiprocessing.set_start_method("spawn", force=True) # run evaluation with a dataset and target function, log to the project result = evaluate( data=Path(ASSET_PATH) / "chat_eval_data.jsonl", target=evaluate_chat_with_products, evaluation_name="evaluate_chat_with_products", evaluators={ "groundedness": groundedness, }, evaluator_config={ "default": { "query": {"${data.query}"}, "response": {"${target.response}"}, "context": {"${target.context}"}, } }, azure_ai_project=project.scope, output_path="./myevalresults.json", ) tabular_result = pd.DataFrame(result.get("rows")) pprint("-----Summarized Metrics-----") pprint(result["metrics"]) pprint("-----Tabular Result-----") pprint(tabular_result) pprint(f"View evaluation results in AI Studio: {result['studio_url']}")Références : azure-ai-evaluation, AIProjectClient.
Configurer le modèle d'évaluation
Le script d’évaluation appelle le modèle plusieurs fois. Envisagez d’augmenter le nombre de jetons par minute pour le modèle d’évaluation.
Dans la partie 1 de cette série de tutoriels, vous avez créé un fichier .env qui spécifie le nom du modèle d'évaluation, gpt-4o-mini. Essayez d'augmenter la limite de tokens par minute pour ce modèle, si vous disposez d'un quota. Si vous n'avez pas assez de quota pour augmenter la valeur, ne vous inquiétez pas. Le script est conçu pour gérer les erreurs de limite.
- Dans votre projet dans le portail Foundry, sélectionnez Modèles + points de terminaison.
- Sélectionnez gpt-4o-mini.
- Sélectionnez Modifier.
- Si vous avez un quota, augmentez la limite de débit des jetons par minute à 30 ou plus.
- Sélectionnez Enregistrer et fermer.
Exécuter le script d'évaluation
À partir de votre console, connectez-vous à votre compte Azure à l’aide d’Azure CLI :
az loginInstallez les packages nécessaires :
pip install openai pip install azure-ai-evaluation[remote]Références : Kit de développement logiciel (SDK) azure-ai-evaluation, documentation du KIT SDK d’évaluation.
Vérifier la configuration de votre évaluation
Avant d’exécuter l’évaluation complète (qui prend 5 à 10 minutes), vérifiez que le Kit de développement logiciel (SDK) et la connexion de votre projet fonctionnent en exécutant ce test rapide :
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential
# Test that you can connect to your project
project = AIProjectClient.from_connection_string(
conn_str=os.environ["AIPROJECT_CONNECTION_STRING"], credential=DefaultAzureCredential()
)
print("Evaluation SDK is ready! You can now run evaluate.py")
Si vous voyez "Evaluation SDK is ready!", votre configuration est terminée et vous pouvez continuer.
Références : AIProjectClient, DefaultAzureCredential.
Démarrer l’évaluation
Exécutez le script d’évaluation :
python evaluate.py
L’évaluation prend 5 à 10 minutes. Vous pourriez voir des avertissements de délai d'expiration et des erreurs de limitation du débit. Le script gère automatiquement ces erreurs et continue de traiter.
Interpréter la sortie de l'évaluation
Dans la sortie de la console, vous voyez une réponse pour chaque question, suivie d’un tableau contenant des métriques résumées présentant la pertinence, l’état de base et les scores de cohérence. Les scores vont de 0 (pire) à 4 (meilleurs) pour les métriques assistées par GPT. Recherchez des scores de faible ancrage pour identifier les réponses qui ne sont pas bien prises en charge par les documents de référence, et des scores de faible pertinence pour identifier les réponses hors sujet.
Vous pouvez voir de nombreux WARNING:opentelemetry.attributes: messages et erreurs de délai d’expiration. Vous pouvez ignorer sans risque ces messages. Ils n’affectent pas les résultats de l’évaluation. Le script d’évaluation est conçu pour gérer les erreurs de limite de débit et poursuivre le traitement.
La sortie des résultats de l’évaluation inclut également un lien pour afficher des résultats détaillés dans le portail Foundry, où vous pouvez comparer les exécutions d’évaluation côte à côte et suivre les améliorations au fil du temps.
====================================================
'-----Summarized Metrics-----'
{'groundedness.gpt_groundedness': 1.6666666666666667,
'groundedness.groundedness': 1.6666666666666667}
'-----Tabular Result-----'
outputs.response ... line_number
0 Could you specify which tent you are referring... ... 0
1 Could you please specify which camping table y... ... 1
2 Sorry, I only can answer queries related to ou... ... 2
3 Could you please clarify which aspects of care... ... 3
4 Sorry, I only can answer queries related to ou... ... 4
5 The TrailMaster X4 Tent comes with an included... ... 5
6 (Failed) ... 6
7 The TrailBlaze Hiking Pants are crafted from h... ... 7
8 Sorry, I only can answer queries related to ou... ... 8
9 Sorry, I only can answer queries related to ou... ... 9
10 Sorry, I only can answer queries related to ou... ... 10
11 The PowerBurner Camping Stove is designed with... ... 11
12 Sorry, I only can answer queries related to ou... ... 12
[13 rows x 8 columns]
('View evaluation results in Foundry portal: '
'https://xxxxxxxxxxxxxxxxxxxxxxx')
Itérer et améliorer
Les résultats de l’évaluation révèlent que les réponses ne sont souvent pas bien ancrées dans les documents de référence. Pour améliorer la groundedness, modifiez votre invite système dans le fichier assets/grounded_chat.prompty afin d'encourager le modèle à utiliser plus directement les documents de référence.
Invite actuelle (problématique) :
If the question is not related to outdoor/camping gear and clothing, just say 'Sorry, I only can answer queries related to outdoor/camping gear and clothing. So, how can I help?'
If the question is related to outdoor/camping gear and clothing but vague, ask clarifying questions.
Message amélioré :
If the question is related to outdoor/camping gear and clothing, answer based on the reference documents provided.
If you cannot find information in the reference documents, say: 'I don't have information about that specific topic. Let me help with related products or try a different question.'
For vague questions, ask clarifying questions to better assist.
Après la mise à jour du message d'invite :
Enregistrez le fichier.
Réexécutez le script d’évaluation :
python evaluate.pyComparez les nouveaux résultats d’évaluation à l’exécution précédente. Vous devriez voir des scores de groundedness améliorés.
Essayez des modifications supplémentaires telles que :
- Modifier l'invite système pour privilégier l'exactitude plutôt que l'exhaustivité
- Test avec un autre modèle (par exemple,
gpt-4-turbosi disponible) - Ajustement de la récupération de contexte pour retourner des documents plus pertinents
Chaque itération vous aide à comprendre quelles modifications améliorent les métriques spécifiques.
Nettoyer les ressources
Pour éviter d’entraîner des coûts Azure inutiles, supprimez les ressources que vous avez créées dans ce didacticiel si elles ne sont plus nécessaires. Pour gérer les ressources, vous pouvez utiliser le Portail Microsoft Azure.