View a markdown version of this page

Pelari kumpulan data Batch - Batuan Dasar Amazon AgentCore

Pelari kumpulan data Batch

BatchEvaluationRunnerDelegasi mencakup pengumpulan dan evaluasi sepenuhnya ke layanan melalui GetBatchEvaluation API StartBatchEvaluation dan. Setelah memanggil agen Anda untuk setiap skenario, pelari mengirimkan pekerjaan batch dan polling hingga selesai, mengembalikan hasil agregat.

Gunakan batch runner saat Anda membutuhkan skor agregat di banyak sesi tanpa mengelola pengumpulan rentang sendiri; untuk pengukuran dasar, kumpulan data besar, dan perbandingan. pre/post

Cara kerjanya

Pelari memproses skenario dalam empat fase:

  1. Invoke: Semua skenario berjalan secara bersamaan menggunakan kumpulan utas. Setiap skenario mendapatkan ID sesi unik, dan berubah dalam skenario yang dijalankan secara berurutan untuk mempertahankan konteks percakapan.

  2. Tunggu: Penundaan konsumsi yang dapat dikonfigurasi (default: 180 detik) memungkinkan CloudWatch untuk menelan data telemetri. Penundaan ini dibayar sekali, bukan per skenario.

  3. Kirim: Panggilan runner StartBatchEvaluation dengan grup CloudWatch log, ID sesi dari fase pemanggilan, ID evaluator, dan kebenaran dasar dari kumpulan data.

  4. Poll: Jajak pendapat pelari GetBatchEvaluation sampai pekerjaan mencapai status terminal dan mengembalikan hasil agregat.

Agen invoker

Pelari membutuhkan agen pemanggil, panggilan yang memanggil agen Anda untuk satu giliran. Invoker adalah framework-agnostic: Anda dapat memanggil agen Anda melalui boto3invoke_agent_runtime, panggilan fungsi langsung, permintaan HTTP, atau metode lainnya.

import json import boto3 from bedrock_agentcore.evaluation import AgentInvokerInput, AgentInvokerOutput REGION = "<region-code>" AGENT_ARN = "arn:aws:bedrock-agentcore:<region-code>:<account-id>:runtime/<agent-id>" LOG_GROUP = "/aws/bedrock-agentcore/runtimes/<agent-id>-DEFAULT" SERVICE_NAME = "<agent-id>.DEFAULT" agentcore_client = boto3.client("bedrock-agentcore", region_name=REGION) def agent_invoker(invoker_input: AgentInvokerInput) -> AgentInvokerOutput: payload = invoker_input.payload if isinstance(payload, str): payload = json.dumps({"prompt": payload}).encode() elif isinstance(payload, dict): payload = json.dumps(payload).encode() print(f"[{invoker_input.session_id}] > sending payload: {payload.decode()}") response = agentcore_client.invoke_agent_runtime( agentRuntimeArn=AGENT_ARN, runtimeSessionId=invoker_input.session_id, payload=payload, ) response_body = response["response"].read() print(f"[{invoker_input.session_id}] < received response: {response_body.decode()}") return AgentInvokerOutput(agent_output=json.loads(response_body))
Bidang Tipe Deskripsi

AgentInvokerInput.payload

str atau dict

Masukan giliran dari dataset.

AgentInvokerInput.session_id

str

Stabil di semua belokan dalam skenario. Berikan ini ke agen Anda untuk mempertahankan konteks percakapan.

AgentInvokerOutput.agent_output

Any

Tanggapan agen.

Contoh

Contoh berikut memuat dataset dari file JSON dan menjalankan evaluasi batch. Untuk format kumpulan data, lihat Skema kumpulan data.

from bedrock_agentcore.evaluation import ( BatchEvaluationRunner, BatchEvaluationRunConfig, BatchEvaluatorConfig, CloudWatchDataSourceConfig, FileDatasetProvider, ) # Load dataset from a local file (see Dataset schema for format) dataset = FileDatasetProvider("dataset.json").get_dataset() # Or load from the Dataset Management service from bedrock_agentcore.evaluation import DatasetClient, DatasetManagementServiceProvider ds_client = DatasetClient(region_name=REGION) dataset = DatasetManagementServiceProvider(dataset_id="my-dataset-id", client=ds_client).get_dataset() # Configure the batch evaluation config = BatchEvaluationRunConfig( batch_evaluation_name="dataset-batch-eval", evaluator_config=BatchEvaluatorConfig( evaluator_ids=[ "Builtin.GoalSuccessRate", "Builtin.Correctness", "Builtin.TrajectoryExactOrderMatch", "Builtin.Helpfulness", ], ), data_source=CloudWatchDataSourceConfig( service_names=[SERVICE_NAME], log_group_names=[LOG_GROUP], ingestion_delay_seconds=180, ), polling_timeout_seconds=1800, polling_interval_seconds=30, ) # Run runner = BatchEvaluationRunner(region=REGION) result = runner.run_dataset_evaluation( agent_invoker=agent_invoker, dataset=dataset, config=config, ) # Display aggregate results print(f"Status: {result.status}") print(f"Batch evaluation ID: {result.batch_evaluation_id}") if result.evaluation_results: er = result.evaluation_results print(f"Sessions completed: {er.number_of_sessions_completed}") print(f"Sessions failed: {er.number_of_sessions_failed}") print(f"Total sessions: {er.total_number_of_sessions}") for summary in er.evaluator_summaries or []: avg = summary.statistics.average_score if summary.statistics else None print(f" {summary.evaluator_id}: avg={avg}")

Mengambil detail per sesi

Hasil agregat menunjukkan rata-rata di semua sesi. Untuk melihat skor per sesi, per-evaluator, ambil peristiwa evaluasi dari: CloudWatch

if result.output_data_config: events = runner.fetch_evaluation_events(result) print(f"\nEvaluation events: {len(events)}") for ev in events: attrs = ev.get("attributes", {}) print(f" session: {attrs.get('session.id', '')[:40]}") print(f" evaluator: {attrs.get('gen_ai.evaluation.name')}") print(f" score: {attrs.get('gen_ai.evaluation.score.value')}") print(f" label: {attrs.get('gen_ai.evaluation.score.label')}") print()

Referensi konfigurasi

BatchEvaluationRunConfig( batch_evaluation_name="my-batch-eval", # Job name evaluator_config=BatchEvaluatorConfig( evaluator_ids=["Builtin.GoalSuccessRate"], ), data_source=CloudWatchDataSourceConfig( service_names=["MyAgent.DEFAULT"], # Exactly 1 service name log_group_names=[LOG_GROUP], # 1-5 log group names ingestion_delay_seconds=180, # Wait for CW ingestion (default: 180) ), polling_timeout_seconds=1800, # Max wait for job completion (default: 1800) polling_interval_seconds=30, # Poll interval (default: 30) simulation_config=None, # Set SimulationConfig for simulated scenarios )
Bidang Default Deskripsi

batch_evaluation_name

Nama untuk pekerjaan evaluasi batch.

evaluator_config.evaluator_ids

Daftar ID evaluator (built-in atau custom).

data_source.service_names

Nama layanan yang mengidentifikasi jejak agen Anda CloudWatch.

data_source.log_group_names

CloudWatch nama grup log tempat telemetri agen disimpan.

data_source.ingestion_delay_seconds

180

Detik untuk menunggu setelah doa CloudWatch untuk menelan rentang.

polling_timeout_seconds

1800

Detik maksimum untuk menunggu pekerjaan batch selesai.

polling_interval_seconds

30

Detik antara permintaan jajak pendapat.

simulation_config

Tidak ada

Konfigurasi untuk skenario simulasi. Setel SimulationConfig(model_id="…​") saat dataset berisi SimulatedScenario instance. Lihat Simulasi pengguna.

Struktur hasil

Pelari mengembalikan: BatchEvaluationResult

BatchEvaluationResult ├── batch_evaluation_id: str ├── batch_evaluation_arn: str ├── batch_evaluation_name: str ├── status: str ├── created_at: datetime ├── evaluation_results: Optional[BatchEvaluationSummary] │ ├── number_of_sessions_completed: int │ ├── number_of_sessions_in_progress: int │ ├── number_of_sessions_failed: int │ ├── number_of_sessions_ignored: int │ ├── total_number_of_sessions: int │ └── evaluator_summaries: List │ ├── evaluator_id: str │ ├── statistics.average_score: float │ ├── total_evaluated: int │ └── total_failed: int ├── error_details: Optional[List[str]] ├── agent_invocation_failures: List[FailedScenario] └── output_data_config: Optional[CloudWatchOutputDataConfig] ├── log_group_name: str └── log_stream_name: str
  • agent_invocation_failuresmencantumkan skenario di mana pemanggilan agen gagal sebelum pekerjaan batch dikirimkan. Sesi ini tidak termasuk dalam evaluasi batch.

  • output_data_configmenunjuk ke aliran CloudWatch log tempat detail per sesi ditulis. Gunakan runner.fetch_evaluation_events(result) untuk membacanya.

Penanganan kesalahan

  • Kegagalan pemanggilan skenario dicatat sebagai FailedScenario tetapi tidak memblokir pekerjaan batch; hanya sesi yang berhasil yang dikirimkan.

  • Jika semua skenario gagal, runner memunculkan ValueError sebelum memanggil API.

  • Batas waktu polling: TimeoutError jika pekerjaan melebihi. polling_timeout_seconds

  • Job failure: RuntimeError jika status evaluasi batch adalah FAILED atauSTOPPED.