View a markdown version of this page

批次資料集執行器 - Amazon Bedrock AgentCore

批次資料集執行器

BatchEvaluationRunner 委派代表會透過 和 GetBatchEvaluation APIs,將收集StartBatchEvaluation和評估完全跨到服務。為每個案例叫用您的代理程式後,執行器會提交批次任務並輪詢,直到完成為止,並傳回彙總結果。

當您需要跨多個工作階段彙總分數而不自行管理跨度收集時,請使用批次執行器;用於基準測量、大型資料集和前/後比較。

運作方式

執行器會以四個階段處理案例:

  1. 調用:所有案例都會使用執行緒集區同時執行。每個案例都會取得唯一的工作階段 ID,並在案例內依序執行,以維持對話內容。

  2. 等待:可設定的擷取延遲 (預設值:180 秒) 可讓 CloudWatch 擷取遙測資料。此延遲會支付一次,而非每個案例。

  3. 提交:執行器StartBatchEvaluation呼叫 CloudWatch 日誌群組、調用階段的工作階段 IDs、評估器 IDs,以及資料集的 Ground Truth。

  4. 輪詢:執行器輪詢GetBatchEvaluation直到任務達到結束狀態,並傳回彙總結果。

客服人員叫用程式

執行器需要代理程式叫用程式,這是可呼叫的,可叫用您的代理程式一次。叫用者與架構無關:您可以透過 boto3 invoke_agent_runtime、直接函數呼叫、HTTP 請求或任何其他方法呼叫您的代理程式。

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))
欄位 Type 說明

AgentInvokerInput.payload

strdict

來自資料集的轉彎輸入。

AgentInvokerInput.session_id

str

在案例的所有轉彎中保持穩定。將此傳遞給您的客服人員,以維持對話內容。

AgentInvokerOutput.agent_output

Any

代理程式的回應。

範例

下列範例會從 JSON 檔案載入資料集,並執行批次評估。如需資料集格式,請參閱資料集結構描述

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

擷取每個工作階段的詳細資訊

彙總結果會顯示所有工作階段的平均值。若要查看每個工作階段、每個評估者分數,請從 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()

組態參考

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 )
欄位 預設 說明

batch_evaluation_name

批次評估任務的名稱。

evaluator_config.evaluator_ids

評估器 IDs清單 (內建或自訂)。

data_source.service_names

在 CloudWatch 中識別代理程式追蹤的服務名稱。

data_source.log_group_names

存放代理程式遙測的 CloudWatch 日誌群組名稱。

data_source.ingestion_delay_seconds

180

叫用 CloudWatch 擷取範圍後等待的秒數。

polling_timeout_seconds

1800

等待批次任務完成的秒數上限。

polling_interval_seconds

30

輪詢請求之間的秒數。

simulation_config

模擬案例的組態。當資料集包含SimulatedScenario執行個體SimulationConfig(model_id="…​")時設定 。請參閱使用者模擬

結果結構

執行器會傳回 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_failures 列出在提交批次任務之前,客服人員調用失敗的情況。這些工作階段不包含在批次評估中。

  • output_data_config 會指向寫入每個工作階段詳細資訊的 CloudWatch 日誌串流。使用 runner.fetch_evaluation_events(result) 讀取它。

錯誤處理

  • 案例調用失敗會記錄為 ,FailedScenario但不會封鎖批次任務;只會提交成功的工作階段。

  • 如果所有案例都失敗,執行器會在呼叫 API ValueError之前引發 。

  • 輪詢逾時:TimeoutError如果任務超過 polling_timeout_seconds

  • 任務失敗:RuntimeError如果批次評估狀態為 FAILEDSTOPPED