View a markdown version of this page

Runner di set di dati Batch - Amazon Bedrock AgentCore

Runner di set di dati Batch

I BatchEvaluationRunner delegati si occupano interamente della raccolta e della valutazione fino al servizio tramite le API and. StartBatchEvaluation GetBatchEvaluation Dopo aver richiamato l'agente per ogni scenario, il runner invia un processo in batch ed esegue i sondaggi fino al completamento, restituendo risultati aggregati.

Usa il batch runner quando hai bisogno di punteggi aggregati per più sessioni senza dover gestire personalmente la raccolta degli intervalli; per misurazioni di base, set di dati di grandi dimensioni e confronti. pre/post

Come funziona

Il runner elabora gli scenari in quattro fasi:

  1. Invoke: tutti gli scenari vengono eseguiti contemporaneamente utilizzando un pool di thread. Ogni scenario ottiene un ID di sessione univoco e all'interno di uno scenario viene eseguito in sequenza per mantenere il contesto della conversazione.

  2. Attesa: un ritardo di inserimento configurabile (impostazione predefinita: 180 secondi) consente di inserire i dati di CloudWatch telemetria. Questo ritardo viene pagato una volta, non per scenario.

  3. Invia: il runner chiama StartBatchEvaluation con il gruppo di CloudWatch log, gli ID di sessione della fase di invocazione, gli ID del valutatore e la verità di base dal set di dati.

  4. Sondaggio: il runner effettua un sondaggio GetBatchEvaluation finché il job non raggiunge uno stato terminale e restituisce i risultati aggregati.

Agente invoker

Il runner richiede un agent invoker, un callable che richiama il tuo agente per un solo turno. L'invoker è indipendente dal framework: puoi chiamare il tuo agente tramite invoke_agent_runtime boto3, una chiamata di funzione diretta, una richiesta HTTP o qualsiasi altro metodo.

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))
Campo Tipo Description

AgentInvokerInput.payload

str o dict

Il turno viene immesso dal set di dati.

AgentInvokerInput.session_id

str

Stabile in tutti i turni di uno scenario. Passalo al tuo agente per mantenere il contesto della conversazione.

AgentInvokerOutput.agent_output

Any

La risposta dell'agente.

Esempio

L'esempio seguente carica un set di dati da un file JSON ed esegue la valutazione in batch. Per il formato del set di dati, vedere Schema del set di dati.

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

Recupero dei dettagli per sessione

I risultati aggregati mostrano le medie di tutte le sessioni. Per visualizzare i punteggi per sessione e per valutatore, recupera gli eventi di valutazione da: 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()

Informazioni di riferimento sulla configurazione

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 )
Campo Predefinita Description

batch_evaluation_name

Nome del processo di valutazione in batch.

evaluator_config.evaluator_ids

Elenco degli ID di valutazione (incorporati o personalizzati).

data_source.service_names

Nome del servizio in cui vengono identificate le tracce dell'agente. CloudWatch

data_source.log_group_names

CloudWatch nomi dei gruppi di log in cui è archiviata la telemetria degli agenti.

data_source.ingestion_delay_seconds

180

Secondi di attesa dopo la chiamata per importare gli intervalli. CloudWatch

polling_timeout_seconds

1800

Numero massimo di secondi di attesa per il completamento del processo batch.

polling_interval_seconds

30

Secondi tra le richieste di sondaggio.

simulation_config

Nessuno

Configurazione per scenari simulati. Imposta SimulationConfig(model_id="…​") quando il set di dati contiene SimulatedScenario istanze. Vedi Simulazione utente.

Struttura dei risultati

Il corridore restituisce unBatchEvaluationResult:

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_failureselenca gli scenari in cui la chiamata dell'agente non è riuscita prima dell'invio del processo batch. Queste sessioni non sono incluse nella valutazione in batch.

  • output_data_configpunta al flusso di CloudWatch log in cui vengono scritti i dettagli per sessione. Usalo runner.fetch_evaluation_events(result) per leggerlo.

Gestione degli errori

  • Gli errori di invocazione dello scenario vengono registrati FailedScenario ma non bloccano il processo batch; vengono inviate solo le sessioni riuscite.

  • Se tutti gli scenari falliscono, il runner effettua una segnalazione prima di chiamare l'API. ValueError

  • Timeout per i sondaggi: TimeoutError se il lavoro supera. polling_timeout_seconds

  • Job failure: RuntimeError se lo stato di valutazione del batch è FAILED oSTOPPED.