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:
-
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.
-
Tunggu: Penundaan konsumsi yang dapat dikonfigurasi (default: 180 detik) memungkinkan CloudWatch untuk menelan data telemetri. Penundaan ini dibayar sekali, bukan per skenario.
-
Kirim: Panggilan runner
StartBatchEvaluationdengan grup CloudWatch log, ID sesi dari fase pemanggilan, ID evaluator, dan kebenaran dasar dari kumpulan data. -
Poll: Jajak pendapat pelari
GetBatchEvaluationsampai 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 |
|---|---|---|
|
|
|
Masukan giliran dari dataset. |
|
|
|
Stabil di semua belokan dalam skenario. Berikan ini ke agen Anda untuk mempertahankan konteks percakapan. |
|
|
|
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 |
|---|---|---|
|
|
— |
Nama untuk pekerjaan evaluasi batch. |
|
|
— |
Daftar ID evaluator (built-in atau custom). |
|
|
— |
Nama layanan yang mengidentifikasi jejak agen Anda CloudWatch. |
|
|
— |
CloudWatch nama grup log tempat telemetri agen disimpan. |
|
|
180 |
Detik untuk menunggu setelah doa CloudWatch untuk menelan rentang. |
|
|
1800 |
Detik maksimum untuk menunggu pekerjaan batch selesai. |
|
|
30 |
Detik antara permintaan jajak pendapat. |
|
|
Tidak ada |
Konfigurasi untuk skenario simulasi. Setel |
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. Gunakanrunner.fetch_evaluation_events(result)untuk membacanya.
Penanganan kesalahan
-
Kegagalan pemanggilan skenario dicatat sebagai
FailedScenariotetapi tidak memblokir pekerjaan batch; hanya sesi yang berhasil yang dikirimkan. -
Jika semua skenario gagal, runner memunculkan
ValueErrorsebelum memanggil API. -
Batas waktu polling:
TimeoutErrorjika pekerjaan melebihi.polling_timeout_seconds -
Job failure:
RuntimeErrorjika status evaluasi batch adalahFAILEDatauSTOPPED.