Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Pelari kumpulan data
D BatchEvaluationRunner elegasi menjangkau pengumpulan dan evaluasi sepenuhnya ke layanan melalui StartBatchEvaluation dan GetBatchEvaluation API. Setelah memanggil agen Anda untuk setiap skenario, pelari mengirimkan pekerjaan batch dan jajak pendapat hingga selesai, mengembalikan hasil agregat.
Gunakan batch runner saat Anda membutuhkan skor agregat di banyak sesi tanpa mengelola sendiri pengumpulan rentang; untuk pengukuran dasar, kumpulan data besar, dan pre/post perbandingan.
Cara kerjanya
Pelari memproses skenario dalam empat fase:
-
Memanggil: Semua skenario berjalan secara bersamaan menggunakan kumpulan utas. Setiap skenario mendapatkan ID sesi unik, dan beralih ke 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: Pelari memang
StartBatchEvaluationgil dengan grup CloudWatch log, ID sesi dari fase pemanggilan, ID evaluator, dan kebenaran dasar dari kumpulan data. -
Polling: Pelari
GetBatchEvaluationmelakukan polling sampai pekerjaan mencapai status terminal dan mengembalikan hasil agregat.
Agen pemanggil
Pelari membutuhkan agen pemanggil, panggilan yang memanggil agen Anda untuk satu giliran. Invoker bersifat framework-agnostik: 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 |
|---|---|---|
|
|
|
Input giliran dari dataset. |
|
|
|
Stabil di semua belokan dalam skenario. Berikan ini ke agen Anda untuk mempertahankan konteks percakapan. |
|
|
|
respon agen tersebut. |
Contoh
Contoh berikut memuat dataset dari file JSON dan menjalankan evaluasi batch. Untuk format dataset, lihat Skema Dataset.
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 (bawaan atau kustom). |
|
|
— |
Nama layanan yang mengidentifikasi jejak agen Anda CloudWatch. |
|
|
— |
CloudWatch nama grup log tempat telemetri agen disimpan. |
|
|
180 |
Detik menunggu setelah pemanggilan CloudWatch untuk menelan rentang. |
|
|
1800 |
Detik maksimum untuk menunggu tugas batch selesai. |
|
|
30 |
Detik antara permintaan jajak pendapat. |
|
|
Tidak ada |
Konfigurasi untuk skenario simulasi. Tet |
Struktur hasil
Pelari mengembalikanBatchEvaluationResult:
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 pem anggilan skenario dicatat sebagai
FailedScenariotetapi tidak memblokir pekerjaan batch; hanya sesi yang berhasil dikirimkan. -
Jika semua skenario gagal, runner akan menaik
ValueErrorkan sebelum memanggil API. -
Batas waktu pemungutan suara:
TimeoutErrorjika pekerjaan melebihi.polling_timeout_seconds -
Kegagalan pekerjaan:
RuntimeErrorjika status evaluasi batch adalahFAILEDatauSTOPPED.