View a markdown version of this page

Memulai dengan evaluasi batch - Batuan Dasar Amazon AgentCore

Memulai dengan evaluasi batch

Panduan ini membawa Anda dari agen yang digunakan ke hasil evaluasi batch menggunakan agen dukungan pelanggan Acme Store. Anda akan membuat agen, menerapkannya, menghasilkan sesi sampel, menjalankan evaluasi batch, dan membaca hasilnya.

Sebelum Anda mulai

Pastikan Anda memiliki:

  • AgentCore CLI diinstal () agentcore --version

  • AWS kredensyal dengan izin untuk dan bedrock-agentcore logs

  • Penelusuran Transaksi diaktifkan di CloudWatch

  • Python 3.10+ (untuk contoh boto3)

Untuk detail selengkapnya, lihat Prasyarat.

Konstanta berikut digunakan dalam contoh boto3. Ganti dengan nilai Anda sendiri setelah menerapkan agen:

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"

Langkah 1: Buat dan gunakan agen sampel

Buat AgentCore proyek dan ganti kode agen default dengan agen dukungan pelanggan Acme Store. Agen ini memiliki lima alat untuk menangani pesanan, pengembalian, pengiriman, diskon, dan eskalasi.

Buat proyek

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

Ganti kode agen

Buka app/AcmeSupport/main.py dan ganti isinya dengan yang berikut:

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

Menyebarkan dan memverifikasi

agentcore deploy

Setelah penerapan, verifikasi agen sedang berjalan:

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

Anda akan melihat respons dengan detail pesanan. Perhatikan ARN runtime, nama layanan, dan grup log agentcore status --json dari — Anda akan memerlukannya untuk contoh boto3.

catatan

Jika Anda sudah memiliki agen yang digunakan di AgentCore Runtime dengan observabilitas diaktifkan, lewati langkah ini dan gunakan agen Anda sendiri untuk penelusuran lainnya.

Langkah 2: Hasilkan sesi sampel

Panggil agen dengan berbagai petunjuk untuk membuat sesi evaluasi. Petunjuk ini mencakup skenario yang berbeda: pencarian pesanan, pengembalian, penundaan pengiriman, permintaan diskon, dan interaksi multi-alat.

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

Tunggu 2-3 menit setelah doa terakhir untuk menelan telemetri CloudWatch sebelum melanjutkan.

Langkah 3: Jalankan evaluasi batch

Mulai evaluasi batch untuk mencetak semua sesi terakhir. Layanan menemukan sesi dari CloudWatch Log, menjalankan setiap evaluator terhadap setiap sesi, dan mengembalikan hasil agregat.

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

Secara default, agentcore run batch-evaluation mulai pekerjaan dan segera kembali (tanpa memblokir). Lulus --wait ke blok sampai pekerjaan mencapai status terminal. Dengan--wait, CLI menyelesaikan grup CloudWatch log dan nama layanan dari konfigurasi proyek Anda, memulai pekerjaan, memblokir hingga mencapai status terminal, dan kemudian mencetak skor rata-rata per evaluator:

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/

Tambahkan --json untuk memancarkan hasil yang dapat dibaca mesin (termasuk batchEvaluationId dan per-evaluatoraverageScore) untuk skrip, dan beri label proses -n <name> sehingga Anda dapat membandingkan hasil di seluruh proses. Contoh:

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

Langkah 4: Baca detail per sesi

Skor agregat memberi tahu Anda gambaran keseluruhan. Untuk melihat skor per-putaran, per-evaluator untuk sesi individual, gunakan perintah tampilan CLI bawaan atau baca peristiwa evaluasi langsung dari Log. CloudWatch

contoh
AgentCore CLI

CLI menyediakan perintah kelas satu untuk melihat pekerjaan evaluasi batch yang telah selesai dan hasilnya. Lihat pekerjaan tertentu berdasarkan ID pekerjaan evaluasi batch, atau daftar pekerjaan sebelumnya:

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

Perintah ini berjalan secara interaktif ketika tidak ada flag yang diberikan. Tambahkan --json untuk output non-interaktif yang dapat dibaca mesin, misalnya. 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()

Langkah selanjutnya

  • Sesi filter - Evaluasi sesi tertentu berdasarkan ID atau rentang waktu. Lihat Memulai evaluasi batch.

  • Jalankan terhadap kumpulan data — Panggil agen Anda terhadap skenario yang telah ditentukan dan evaluasi hasilnya secara otomatis. Lihat Evaluasi Dataset.

  • Bandingkan proses — Jalankan evaluasi batch sebelum dan sesudah perubahan dan bandingkan skor. Lihat Memahami hasil dan output.