View a markdown version of this page

Erste Schritte mit der Batch-Auswertung - Amazon Grundgestein AgentCore

Erste Schritte mit der Batch-Auswertung

Diese exemplarische Vorgehensweise führt Sie von einem eingesetzten Agenten zu den Ergebnissen der Batch-Auswertung mithilfe eines Kundendienstmitarbeiters von Acme Store. Sie erstellen den Agenten, stellen ihn bereit, generieren Beispielsitzungen, führen eine Batch-Auswertung durch und lesen die Ergebnisse.

Bevor Sie beginnen

Stellen Sie Folgendes sicher:

  • Die AgentCore CLI ist installiert (agentcore --version)

  • AWS Anmeldeinformationen mit Berechtigungen für bedrock-agentcore und logs

  • Die Transaktionssuche ist aktiviert in CloudWatch

  • Python 3.10+ (für Boto3-Beispiele)

Vollständige Informationen finden Sie unter Voraussetzungen.

Die folgenden Konstanten werden in den boto3-Beispielen verwendet. Ersetzen Sie sie nach der Bereitstellung des Agenten durch Ihre eigenen Werte:

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"

Schritt 1: Den Beispielagenten erstellen und bereitstellen

Erstellen Sie ein AgentCore Projekt und ersetzen Sie den Standard-Agentencode durch den Kundendienstmitarbeiter von Acme Store. Dieser Mitarbeiter verfügt über fünf Tools für die Bearbeitung von Bestellungen, Rücksendungen, Versand, Rabatten und Eskalationen.

Erstellen des Projekts

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

Ersetzen Sie den Agentencode

Öffnen Sie den Inhalt app/AcmeSupport/main.py und ersetzen Sie ihn durch Folgendes:

"""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(payload.get("prompt", "Hello")) return {"response": str(result)} if __name__ == "__main__": app.run()

Bereitstellen und verifizieren

agentcore deploy

Stellen Sie nach der Bereitstellung sicher, dass der Agent ausgeführt wird:

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

Sie sollten eine Antwort mit den Bestelldetails sehen. Notieren Sie sich den Runtime-ARN, den Dienstnamen und die Protokollgruppe von agentcore status --json — Sie benötigen diese für die boto3-Beispiele.

Anmerkung

Wenn Sie bereits einen Agenten auf AgentCore Runtime mit aktivierter Observability bereitgestellt haben, überspringen Sie diesen Schritt und verwenden Sie für den Rest der exemplarischen Vorgehensweise Ihren eigenen Agenten.

Schritt 2: Generieren Sie Beispielsitzungen

Rufen Sie den Agenten mit verschiedenen Eingabeaufforderungen auf, um Sitzungen zur Evaluierung zu erstellen. Diese Eingabeaufforderungen decken verschiedene Szenarien ab: Bestellanfragen, Rücksendungen, Versandverzögerungen, Rabattanfragen und Interaktionen mit mehreren Tools.

Beispiel
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.")

Warten Sie nach dem letzten Aufruf 2—3 Minuten, bis die Telemetriedaten aufgenommen wurden CloudWatch , bevor Sie fortfahren.

Schritt 3: Führen Sie die Batch-Auswertung durch

Starten Sie eine Batch-Auswertung, um alle letzten Sitzungen zu bewerten. Der Dienst erkennt Sitzungen anhand von CloudWatch Protokollen, führt jeden Evaluator für jede Sitzung aus und gibt aggregierte Ergebnisse zurück.

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

Standardmäßig agentcore run batch-evaluation startet der Job und kehrt sofort zurück (ohne Blockierung). Wechselt --wait zum Blockieren, bis der Auftrag einen Terminalstatus erreicht hat. Mit --wait löst die CLI die CloudWatch Protokollgruppe und den Dienstnamen aus Ihrer Projektkonfiguration auf, startet den Job, blockiert, bis er einen Terminalstatus erreicht, und gibt dann Durchschnittswerte pro Evaluator aus:

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/

Fügen Sie hinzu--json, um maschinenlesbare Ergebnisse (einschließlich batchEvaluationId und pro EvaluatoraverageScore) für die Skripterstellung auszugeben und den Lauf -n <name> zu kennzeichnen, sodass Sie die Ergebnisse der einzelnen Durchläufe vergleichen können. Beispiel:

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))

Schritt 4: Lesen Sie die Details pro Sitzung

Die Gesamtpunktzahlen geben Ihnen einen Überblick über das Gesamtbild. Verwenden Sie die integrierten CLI-Anzeigebefehle oder lesen Sie die Evaluierungsereignisse direkt aus den Protokollen, um die Ergebnisse pro Runde und pro Evaluator für einzelne Sitzungen zu sehen. CloudWatch

Beispiel
AgentCore CLI

Die CLI bietet erstklassige Befehle zum Anzeigen abgeschlossener Batch-Evaluierungsjobs und ihrer Ergebnisse. Zeigen Sie einen bestimmten Job anhand seiner Job-ID für die Batch-Auswertung an oder listen Sie frühere Jobs auf:

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

Diese Befehle werden interaktiv ausgeführt, wenn keine Flags angegeben sind. Fügen Sie --json dies beispielsweise für eine nicht interaktive, maschinenlesbare Ausgabe hinzu. 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()

Nächste Schritte

  • Sitzungen filtern — Bewerten Sie bestimmte Sitzungen nach ID oder Zeitraum. Siehe Eine Batch-Auswertung starten.

  • Anhand eines Datensatzes ausführen — Rufen Sie Ihren Agenten anhand vordefinierter Szenarien auf und werten Sie die Ergebnisse automatisch aus. Siehe Auswertung von Datensätzen.

  • Durchläufe vergleichen — Führen Sie vor und nach einer Änderung eine Batch-Auswertung durch und vergleichen Sie die Ergebnisse. Weitere Informationen finden Sie unter Ergebnisse und Ergebnisse verstehen.