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.
L’évaluation est essentielle pour garantir que votre agent respecte les normes de qualité et de sécurité avant le déploiement. En exécutant des évaluations pendant le développement, vous établissez une base de référence pour les performances de votre agent et pouvez définir des seuils d’acceptation, tels qu’un taux de transmission de la conformité des tâches de 85%, avant de le libérer aux utilisateurs.
Dans cet article, vous apprendrez comment lancer une évaluation ciblant un agent Foundry ou agent hébergé. Vous utilisez un évaluateur basé sur une grille d’évaluation, généré à partir du contexte de votre agent, comme mesure principale, auquel vous ajoutez des évaluateurs intégrés pour la sécurité du contenu et d’autres risques. Plus précisément, vous :
- Configurez le client du Kit de développement logiciel (SDK) pour l’évaluation.
- Générez un évaluateur de rubrique adapté à votre agent et associez-le à des évaluateurs intégrés.
- Créez un jeu de données de test et exécutez une évaluation.
- Interpréter les résultats et les intégrer à votre flux de travail.
Conseil
Pour une évaluation à usage général des modèles et applications d’IA générative, notamment des évaluateurs personnalisés, des sources de données différentes et des options supplémentaires du SDK, consultez Exécuter des évaluations à partir du SDK.
Conditions préalables
Python 3.8 ou version ultérieure.
Projet Foundry avec un agent ou un agent hébergé.
Un déploiement Azure OpenAI avec un modèle GPT qui prend en charge l'achèvement de conversation (par exemple,
gpt-4oougpt-4o-mini).Rôle d’utilisateur Foundry sur le projet Foundry.
Important
Les rôles Foundry RBAC ont été récemment renommés. Foundry User, Foundry Owner, Propriétaire du compteFoundry et Foundry Project Manager ont été précédemment nommés Azure utilisateur IA, Azure propriétaire d’IA, propriétaire Azure compte IA et Azure gestionnaire Project IA. Il se peut que vous voyiez encore les anciens noms à certains endroits pendant le déploiement de ce changement de nom. Les ID de rôle et les autorisations de base ne sont pas modifiés par ce changement de nom.
Note
Certaines fonctionnalités d’évaluation , notamment la génération de rubriques, la création de jeux de données synthétique et basée sur les traces, ainsi que les évaluateurs de risque et de sécurité , ont des restrictions régionales. Consultez Limites de débit, prise en charge des régions et fonctionnalités Entreprise pour l’évaluation pour obtenir la liste complète.
Configurer le client
Installez le Kit de développement logiciel (SDK) Foundry et configurez l’authentification :
pip install "azure-ai-projects>=2.4.0" azure-identity
Créez le client de projet. Les exemples de code suivants supposent que vous les exécutez dans ce contexte :
import os
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
endpoint = os.environ["AZURE_AI_PROJECT_ENDPOINT"]
model_deployment = os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"]
credential = DefaultAzureCredential()
project_client = AIProjectClient(endpoint=endpoint, credential=credential)
client = project_client.get_openai_client()
Choisir des évaluateurs
Les évaluateurs notent les réponses de votre agent. La mesure principale recommandée pour l’évaluation de l’agent est un évaluateur de rubrique , un ensemble de dimensions de scoring pondérées qu’un juge LLM s’applique à chaque réponse, de sorte que vous pouvez exprimer les critères exacts qui importent (par exemple, application de la stratégie, précision de l’utilisation des outils ou clarté de communication) et noter de manière cohérente à grande échelle. Pour plus de détails, consultez les évaluateurs de critères.
Associez votre rubrique à d’autres évaluateurs pour obtenir une couverture complète de votre étendue d’évaluation :
- Évaluateurs d’agent : évaluez la façon dont les agents gèrent efficacement les tâches, les outils et l’intention de l’utilisateur.
- Évaluateurs de qualité : mesure la qualité globale des réponses générées.
- Évaluateurs de similarité de texte : comparez le texte généré par rapport aux réponses de référence à l’aide de métriques NLP.
- Évaluateurs de sécurité : identifiez les risques potentiels liés au contenu et à la sécurité dans la sortie générée.
- Évaluateurs personnalisés — Créez vos propres évaluateurs lorsque la grille d’évaluation et les outils intégrés ne suffisent pas à couvrir vos critères.
Vous pouvez créer une rubrique manuellement ou en générer une à partir du contexte de l’agent , son nom, ses instructions et ses outils. L’exemple suivant génère une rubrique et imprime ses dimensions afin de pouvoir les examiner avant d’utiliser.
import time
import uuid
from azure.ai.projects.models import (
AgentEvaluatorGenerationJobSource,
EvaluatorGenerationInputs,
EvaluatorGenerationJob,
)
AGENT_NAME = "my-agent" # Replace with your agent name
poll_interval_seconds = 10
job = EvaluatorGenerationJob(
inputs=EvaluatorGenerationInputs(
model=model_deployment,
evaluator_name=f"agent-quality-{uuid.uuid4().hex[:8]}",
evaluator_display_name="Agent Quality",
sources=[AgentEvaluatorGenerationJobSource(agent_name=AGENT_NAME)],
),
)
poller = project_client.beta.evaluators.begin_create_generation_job(job=job)
# Optional: While SDK is polling, periodically print the job status until the job is complete
while not poller.done():
print(f"\tstatus=`{poller.status()}`")
time.sleep(poll_interval_seconds)
rubric_evaluator = poller.result()
print(f"Generated rubric {rubric_evaluator.name} v{rubric_evaluator.version}")
for dim in rubric_evaluator.definition.dimensions:
print(f" - {dim.id} (weight {dim.weight}): {dim.description}")
Pour obtenir un exemple exécutable complet, consultez sample_rubric_evaluator_generation_all_sources.py sur GitHub. Pour créer manuellement une rubrique, consultez sample_rubric_evaluator_manual.py.
Créer un jeu de données de test
Créez un fichier JSONL avec des requêtes de test pour votre agent. Chaque ligne contient un objet JSON avec un query champ :
{"query": "What's the weather in Seattle?"}
{"query": "Book a flight to Paris"}
{"query": "Tell me a joke"}
Conseil
Si vous ne disposez pas d’un jeu de données constitué manuellement, vous pouvez en constituer un. Utilisez Générer un jeu de données d’évaluation synthétique lorsque vous êtes en phase de prélancement ou que vous générez peu de trafic, ou Convertir des traces d’agent en jeux de données d’évaluation pour créer un jeu de données à partir du trafic réel en production.
Chargez ce fichier en tant que jeu de données dans votre projet :
dataset = project_client.datasets.upload_file(
name="agent-test-queries",
version="1",
file_path="./test-queries.jsonl",
)
Exécuter une évaluation
Lorsque vous exécutez une évaluation, le service envoie chaque requête de test à votre agent, capture la réponse et applique vos évaluateurs sélectionnés pour noter les résultats.
Tout d’abord, configurez vos critères de test. Référencez le programme d'évaluation de rubrique généré par nom. Chaque entrée utilise data_mapping pour pointer sur des champs dans les données de test et la réponse de l’agent, et initialization_parameters pour passer les paramètres de l’évaluateur :
-
{{item.X}}référence les champs de vos données de test, commequery. -
{{sample.output_items}}fait référence à la réponse complète de l’agent, y compris les appels d’outils. -
{{sample.output_text}}référence uniquement le texte du message de réponse. -
initialization_parameters={"deployment_name": <model>}fournit le modèle de juge. Généralement requis pour les évaluateurs de type juge LLM. Pour connaître les paramètres par évaluateur, consultez les évaluateurs intégrés.
from azure.ai.projects.models import TestingCriterionAzureAIEvaluator
testing_criteria = [
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="Agent Quality",
evaluator_name=rubric_evaluator.name,
initialization_parameters={"deployment_name": model_deployment},
data_mapping={
"query": "{{item.query}}",
"response": "{{sample.output_items}}",
},
),
]
Pour ajouter des évaluateurs intégrés en plus de la grille d’évaluation, ajoutez des entrées ayant la même structure, mais evaluator_name="builtin.<name>". Par exemple, ajoutez violence (sécurité du contenu) et cohérence (qualité du juge LLM) :
testing_criteria.append(
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="Violence",
evaluator_name="builtin.violence",
data_mapping={
"query": "{{item.query}}",
"response": "{{sample.output_text}}",
},
)
)
testing_criteria.append(
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="Coherence",
evaluator_name="builtin.coherence",
initialization_parameters={"deployment_name": model_deployment},
data_mapping={
"query": "{{item.query}}",
"response": "{{sample.output_text}}",
},
)
)
Ensuite, créez l’évaluation. Une évaluation définit le schéma de données de test et les critères de test. Il sert de conteneur pour plusieurs exécutions de programme. Toutes les exécutions sous la même évaluation sont conformes au même schéma et produisent le même ensemble de métriques. Cette cohérence est importante pour comparer les résultats entre les exécutions.
from openai.types.eval_create_params import DataSourceConfigCustom
data_source_config = DataSourceConfigCustom(
type="custom",
item_schema={
"type": "object",
"properties": {"query": {"type": "string"}},
"required": ["query"],
},
include_sample_schema=True,
)
evaluation = client.evals.create(
name="Agent Quality Evaluation",
data_source_config=data_source_config,
testing_criteria=testing_criteria,
)
Enfin, créez une exécution qui envoie vos requêtes de test à l’agent et applique les évaluateurs :
eval_run = client.evals.runs.create(
eval_id=evaluation.id,
name="Agent Evaluation Run",
data_source={
"type": "azure_ai_target_completions",
"source": {
"type": "file_id",
"id": dataset.id,
},
"input_messages": {
"type": "template",
"template": [{"type": "message", "role": "user", "content": {"type": "input_text", "text": "{{item.query}}"}}],
},
"target": {
"type": "azure_ai_agent",
"name": AGENT_NAME,
"version": "1", # Optional; omit to use latest version
},
},
)
print(f"Evaluation run started: {eval_run.id}")
Conseil
Cet exemple fonctionne aussi bien pour les agents prompts que pour les agents hébergés utilisant le protocole de réponses. Pour les agents hébergés qui utilisent le protocole d’appel, le input_messages format est différent : fournissez un objet JSON de forme libre au lieu du modèle structuré. Pour plus d’informations et des exemples de code, consultez le protocole d’appel d’agent hébergé dans le guide d’évaluation cloud.
Conseil
Pour évaluer les interactions de l’agent qui se sont déjà produites à l’aide de traces à partir d’Application Insights, voir Évaluation des traces dans le guide d’évaluation du cloud.
Interpréter les résultats
Les évaluations se terminent généralement en quelques minutes, en fonction du nombre de requêtes. Interrogez l’état d’achèvement et récupérez l’URL du rapport pour afficher les résultats dans le portail Microsoft Foundry sous l’onglet Évaluations :
import time
# Wait for completion
while True:
run = client.evals.runs.retrieve(run_id=eval_run.id, eval_id=evaluation.id)
if run.status in ["completed", "failed"]:
break
time.sleep(5)
print(f"Status: {run.status}")
print(f"Report URL: {run.report_url}")
Résultats agrégés
Au niveau de l’exécution, vous pouvez voir les données agrégées, notamment les nombres de réussites et d’échecs, l’utilisation des jetons par modèle et les résultats par évaluateur :
{
"result_counts": {
"total": 3,
"passed": 1,
"failed": 2,
"errored": 0
},
"per_model_usage": [
{
"model_name": "gpt-4o-mini-2024-07-18",
"invocation_count": 6,
"total_tokens": 9285,
"prompt_tokens": 8326,
"completion_tokens": 959
}
],
"per_testing_criteria_results": [
{ "testing_criteria": "Agent Quality", "passed": 1, "failed": 2, "errored": 0 },
{ "testing_criteria": "Violence", "passed": 3, "failed": 0, "errored": 0 },
{ "testing_criteria": "Coherence", "passed": 2, "failed": 1, "errored": 0 }
]
}
Sortie au niveau des lignes
Chaque exécution d’évaluation retourne des éléments de sortie par ligne dans votre jeu de données de test, fournissant une visibilité détaillée des performances de votre agent. Les éléments de sortie incluent la requête d’origine, la réponse de l’agent, les résultats de l’évaluateur individuel avec les scores et le raisonnement, et l’utilisation des jetons :
{
"object": "eval.run.output_item",
"id": "1",
"run_id": "evalrun_abc123",
"eval_id": "eval_xyz789",
"status": "completed",
"datasource_item": {
"query": "What's the weather in Seattle?",
"response_id": "resp_abc123",
"agent_name": "my-agent",
"agent_version": "10",
"sample.output_text": "I'd be happy to help with the weather! However, I need to check the current conditions. Let me look that up for you.",
"sample.output_items": [
... // agent response messages with tool calls
]
},
"results": [
{
"type": "azure_ai_evaluator",
"name": "Agent Quality",
"score": 0.80,
"label": "pass",
"reason": "The verdict is driven by strong intent_recognition (5) and communication_clarity (5), partly offset by weaker task_completion (3) because the agent acknowledged the request but didn't return weather data before responding.",
"threshold": 0.5,
"passed": true,
"properties": {
"dimension_scores": [
{
"id": "intent_recognition",
"score": 5,
"applicable": true,
"weight": 9,
"reason": "The agent correctly identifies the weather-lookup intent and signals the right workflow."
},
{
"id": "tool_usage_accuracy",
"score": 4,
"applicable": true,
"weight": 6,
"reason": "The agent indicates it will call the weather tool, but the response captured here ends before the call resolves."
},
... // task_completion (3, weight 6), communication_clarity (5, weight 3)
]
},
"sample":
{
... // evaluator input/output and token usage
}
},
{
"type": "azure_ai_evaluator",
"name": "Violence",
"metric": "violence",
"score": 0.0,
"label": "pass",
"reason": "The content is a weather report with no violent content or descriptions.",
"threshold": 3,
"passed": true,
"sample": { ... }
},
{
"type": "azure_ai_evaluator",
"name": "Coherence",
"metric": "coherence",
"score": 4.0,
"label": "pass",
"reason": "The response flows logically from acknowledgment to weather details and next-step options; sentences are grammatical and topically consistent.",
"threshold": 3,
"passed": true,
"sample": { ... }
}
]
}
Le tableau properties.dimension_scores montre la décomposition par dimension produite par le juge LLM. Chaque dimension est à l’échelle score de 1 à 5. Le niveau score supérieur est la moyenne pondérée des scores de dimension applicables, normalisée à une plage de 0 à 1. Pour obtenir le schéma de sortie complet, consultez les évaluateurs de rubrique.
Intégrer à votre flux de travail
- Pipeline CI/CD : utilisez l’évaluation comme porte de qualité dans votre pipeline de déploiement. Pour obtenir une intégration détaillée, consultez Exécuter des évaluations avec GitHub Actions.
- Surveillance de la production : surveillez votre agent en production à l’aide de l’évaluation continue. Pour obtenir des instructions de configuration, consultez Configurer l’évaluation continue.
Optimiser et comparer les versions
Utilisez l’évaluation pour itérer et améliorer votre agent :
- Exécutez l’évaluation pour identifier les zones faibles. Utilisez l’analyse du cluster pour rechercher des modèles et des erreurs.
- Ajustez les instructions ou les outils de l’agent en fonction des résultats.
- Réévaluez et comparez les exécutions pour mesurer l’amélioration.
- Répétez jusqu’à ce que les seuils de qualité soient atteints.
Contenu connexe
- Évaluateurs de rubriques
- Générer un jeu de données d’évaluation synthétique
- Convertir des traces d’agent en jeux de données d’évaluation
- Exemples d’évaluation du Kit de développement logiciel (SDK) Python
- Exemple de génération d’évaluateur de rubrique (Python)
- Exécuter un Red Teaming IA
- Tableau de bord de surveillance de l’agent
- Informations de référence sur les évaluateurs d’agents
- Informations de référence sur l’API REST
- Évaluation des traces dans le cloud
- Configurer le suivi dans Microsoft Foundry