View a markdown version of this page

Commencer à utiliser l'évaluation par lots - Base rocheuse de l'Amazonie AgentCore

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Commencer à utiliser l'évaluation par lots

Cette procédure pas à pas vous permet de passer d'un agent déployé à des résultats d'évaluation par lots à l'aide d'un agent du support client d'Acme Store. Vous allez créer l'agent, le déployer, générer des exemples de sessions, exécuter une évaluation par lots et lire les résultats.

Avant de commencer

Assurez-vous d’avoir :

  • La AgentCore CLI installée (agentcore --version)

  • AWS informations d'identification avec autorisations pour bedrock-agentcore et logs

  • Recherche de transactions activée dans CloudWatch

  • Python 3.10+ (pour les exemples boto3)

Pour plus de détails, consultez la section Prérequis.

Les constantes suivantes sont utilisées dans les exemples boto3. Remplacez-les par vos propres valeurs après avoir déployé l'agent :

REGION = "us-west-2" AGENT_ARN = "arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/AcmeSupport-abc123" SERVICE_NAME = "AcmeSupport-abc123.DEFAULT" LOG_GROUP = "/aws/bedrock-agentcore/runtimes/AcmeSupport-abc123-DEFAULT"

Étape 1 : Création et déploiement de l'exemple d'agent

Créez un AgentCore projet et remplacez le code d'agent par défaut par l'agent du support client d'Acme Store. Cet agent dispose de cinq outils pour gérer les commandes, les retours, les expéditions, les remises et les escalades.

Création du projet

agentcore create --name AcmeSupport --framework Strands --model-provider Bedrock --memory none cd AcmeSupport

Remplacez le code de l'agent

Ouvrez app/AcmeSupport/main.py et remplacez son contenu par le texte suivant :

"""Acme Store customer support agent.""" from strands import Agent, tool from strands.models.bedrock import BedrockModel from bedrock_agentcore.runtime import BedrockAgentCoreApp app = BedrockAgentCoreApp() MODEL_ID = "global.anthropic.claude-sonnet-4-6" SYSTEM_PROMPT = ( "You are a helpful customer support assistant for Acme Store. " "Help customers with their orders, returns, and shipping questions." ) @tool def lookup_order(order_id: str) -> str: """Look up an order by ID and return its status, item, and delivery details.""" orders = { "ORD-1001": { "status": "delivered", "item": "Blue T-Shirt (L)", "delivered": "2026-03-28", "total": "$29.99", }, "ORD-1002": { "status": "in_transit", "item": "Running Shoes (10)", "shipped": "2026-03-30", "est_delivery": "2026-04-05", "total": "$89.99", }, "ORD-1003": { "status": "delayed", "item": "Wireless Headphones", "shipped": "2026-03-25", "est_delivery": "2026-03-29", "days_late": 5, "total": "$59.99", }, "ORD-1004": { "status": "processing", "item": "Yoga Mat", "ordered": "2026-04-02", "total": "$34.99", }, "ORD-1005": { "status": "delivered", "item": "Coffee Maker", "delivered": "2026-03-20", "total": "$149.99", }, } return str(orders.get(order_id, {"error": f"Order {order_id} not found"})) @tool def initiate_return(order_id: str, reason: str) -> str: """Initiate a return for an order. Sends a return label to the customer.""" return ( f"Return initiated for {order_id}. Reason: {reason}. " "Return label sent to customer email. Please ship within 14 days." ) @tool def check_shipping_status(order_id: str) -> str: """Check detailed shipping status including carrier location and delays.""" statuses = { "ORD-1002": ( "Package is with carrier, currently in Portland OR. " "On schedule for April 5." ), "ORD-1003": ( "Package delayed at distribution center in Memphis TN. " "Original delivery was March 29. Now 5 days late. " "Acme Store policy: orders delayed 3+ days qualify for 15% discount." ), } return statuses.get(order_id, f"No active shipment found for {order_id}.") @tool def apply_discount(order_id: str, discount_percent: int, reason: str) -> str: """Apply a percentage discount to an order and issue a refund.""" return ( f"Applied {discount_percent}% discount to {order_id}. " f"Reason: {reason}. Refund will appear in 3-5 business days." ) @tool def escalate_to_human(reason: str) -> str: """Escalate the conversation to a human support agent.""" return ( f"Escalated to human agent. Reason: {reason}. " "Estimated wait time: 3 minutes." ) agent = Agent( model=BedrockModel(model_id=MODEL_ID), tools=[lookup_order, initiate_return, check_shipping_status, apply_discount, escalate_to_human], system_prompt=SYSTEM_PROMPT, ) @app.entrypoint def invoke(payload, context): result = agent(str(payload.get("prompt", "Hello"))) return {"response": str(result)} if __name__ == "__main__": app.run()

Déploiement et vérification

agentcore deploy

Après le déploiement, vérifiez que l'agent est en cours d'exécution :

agentcore invoke --prompt "What's the status of order ORD-1001?"

Vous devriez voir une réponse contenant les détails de la commande. Notez l'ARN d'exécution, le nom du service et le groupe de agentcore status --json journaux. Vous en aurez besoin pour les exemples boto3.

Note

Si vous avez déjà déployé un agent sur AgentCore Runtime avec l'observabilité activée, ignorez cette étape et utilisez votre propre agent pour le reste de la procédure pas à pas.

Étape 2 : générer des exemples de sessions

Invoquez l'agent à l'aide de différentes instructions pour créer des sessions d'évaluation. Ces instructions couvrent différents scénarios : recherches de commandes, retours, retards d'expédition, demandes de remises et interactions multi-outils.

Exemple
AgentCore CLI
agentcore invoke --runtime AcmeSupport --prompt "What's the status of my order ORD-1001?" agentcore invoke --runtime AcmeSupport --prompt "I need to return order ORD-1001, the shirt doesn't fit." agentcore invoke --runtime AcmeSupport --prompt "What's the shipping status on ORD-1002?" agentcore invoke --runtime AcmeSupport --prompt "My order ORD-1003 is delayed, can you help?" agentcore invoke --runtime AcmeSupport --prompt "I'd like to check on order ORD-1004 please." agentcore invoke --runtime AcmeSupport --prompt "Can you look up order ORD-1005 for me?" agentcore invoke --runtime AcmeSupport --prompt "I want to return the coffee maker from order ORD-1005, it's defective." agentcore invoke --runtime AcmeSupport --prompt "Where is my order ORD-1002? It should have arrived by now." agentcore invoke --runtime AcmeSupport --prompt "ORD-1003 is really late, I want a discount." agentcore invoke --runtime AcmeSupport --prompt "Can you check order ORD-1001 and tell me when it was delivered?"
AWS SDK (boto3)
import boto3 import json import uuid client = boto3.client("bedrock-agentcore", region_name=REGION) prompts = [ "What's the status of my order ORD-1001?", "I need to return order ORD-1001, the shirt doesn't fit.", "What's the shipping status on ORD-1002?", "My order ORD-1003 is delayed, can you help?", "I'd like to check on order ORD-1004 please.", "Can you look up order ORD-1005 for me?", "I want to return the coffee maker from order ORD-1005, it's defective.", "Where is my order ORD-1002? It should have arrived by now.", "ORD-1003 is really late, I want a discount.", "Can you check order ORD-1001 and tell me when it was delivered?", ] for i, prompt in enumerate(prompts): session_id = f"acme-eval-{uuid.uuid4().hex[:12]}" print(f"[{i+1}/10] {prompt[:60]}...") response = client.invoke_agent_runtime( agentRuntimeArn=AGENT_ARN, runtimeSessionId=session_id, payload=json.dumps({"prompt": prompt}).encode(), ) response_body = response["response"].read() print(f" Done (session: {session_id})") print("\nAll sessions created.")

Attendez 2 à 3 minutes après le dernier appel pour CloudWatch ingérer la télémétrie avant de continuer.

Étape 3 : Exécuter l'évaluation par lots

Lancez une évaluation par lots pour attribuer une note à toutes les sessions récentes. Le service découvre les sessions à partir CloudWatch des journaux, exécute chaque évaluateur pour chaque session et renvoie des résultats agrégés.

Exemple
AgentCore CLI
agentcore run batch-evaluation \ --runtime AcmeSupport \ --evaluator Builtin.GoalSuccessRate Builtin.Helpfulness Builtin.Faithfulness \ --wait

Par défaut, agentcore run batch-evaluation démarre la tâche et revient immédiatement (sans blocage). Passez --wait au mode bloc jusqu'à ce que la tâche atteigne l'état terminal. Avec--wait, la CLI résout le groupe de CloudWatch journaux et le nom du service à partir de la configuration de votre projet, démarre la tâche, la bloque jusqu'à ce qu'elle atteigne l'état terminal, puis affiche les scores moyens par évaluateur :

Batch evaluation completed: acme-eval-a1b2c3d4

Sessions: 10 completed, 0 failed, 10 total

Evaluator                           Avg Score
─────────────────────────────────────────────
Builtin.GoalSuccessRate             0.7200
Builtin.Helpfulness                 0.8100
Builtin.Faithfulness                0.8500

Results saved to .cli/jobs/batch-eval-results/

Ajoutez --json pour émettre des résultats lisibles par machine (y compris batchEvaluationId et pour le pré-évaluateuraverageScore) pour la création de scripts, et -n <name> pour étiqueter l'exécution afin de pouvoir comparer les résultats entre les exécutions. Par exemple :

agentcore run batch-evaluation \ --runtime AcmeSupport \ --evaluator Builtin.GoalSuccessRate Builtin.Helpfulness Builtin.Faithfulness \ -n acme_baseline \ --wait
AWS SDK (boto3)
import boto3 import uuid import time import json eval_client = boto3.client("bedrock-agentcore", region_name=REGION) # Start the batch evaluation response = eval_client.start_batch_evaluation( batchEvaluationName=f"acme_baseline_{uuid.uuid4().hex[:8]}", evaluators=[ {"evaluatorId": "Builtin.GoalSuccessRate"}, {"evaluatorId": "Builtin.Helpfulness"}, {"evaluatorId": "Builtin.Faithfulness"}, ], dataSourceConfig={ "cloudWatchLogs": { "serviceNames": [SERVICE_NAME], "logGroupNames": [LOG_GROUP], } }, clientToken=str(uuid.uuid4()), ) batch_eval_id = response["batchEvaluationId"] print(f"Started: {batch_eval_id}") # Poll until complete while True: result = eval_client.get_batch_evaluation(batchEvaluationId=batch_eval_id) status = result["status"] print(f"Status: {status}") if status in ("COMPLETED", "COMPLETED_WITH_ERRORS", "FAILED", "STOPPED"): break time.sleep(30) print(json.dumps(result, indent=4, default=str))

Étape 4 : Lire les détails par session

Les notes agrégées vous donnent une vue d'ensemble. Pour voir les scores par tour et par évaluateur pour les sessions individuelles, utilisez les commandes d'affichage intégrées de l'interface de ligne de commande ou lisez les événements d'évaluation directement dans les journaux. CloudWatch

Exemple
AgentCore CLI

La CLI fournit des commandes de première classe pour afficher les tâches d'évaluation par lots terminées et leurs résultats. Affichez une tâche spécifique en fonction de son identifiant de tâche d'évaluation par lots, ou répertoriez les tâches précédentes :

# View a batch evaluation job and its results agentcore view batch-evaluation acme-eval-a1b2c3d4 # List batch evaluation jobs agentcore batch-evaluations history

Ces commandes s'exécutent de manière interactive lorsqu'aucun indicateur n'est donné. Ajoutez --json pour une sortie non interactive et lisible par machine, par exemple. agentcore view batch-evaluation acme-eval-a1b2c3d4 --json

AWS SDK (boto3)
# Get the output location from the batch evaluation result output = result["outputConfig"]["cloudWatchConfig"] log_group = output["logGroupName"] log_stream = output["logStreamName"] # Read the events logs_client = boto3.client("logs", region_name=REGION) response = logs_client.get_log_events( logGroupName=log_group, logStreamName=log_stream, ) for event in response["events"]: event_attrs = json.loads(event["message"]).get("attributes", {}) print(f"Score: {event_attrs.get('gen_ai.evaluation.score.value')}") print(f"Label: {event_attrs.get('gen_ai.evaluation.score.label')}") print(f"Explanation: {event_attrs.get('gen_ai.evaluation.explanation', '')[:200]}") print()

Étapes suivantes