View a markdown version of this page

Gestore di set di dati in batch - Fondamento Amazon AgentCore

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Gestore di set di dati in batch

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

Usa il batch runner quando hai bisogno di aggregare i punteggi in più sessioni senza dover gestire tu stesso la raccolta degli intervalli, per misurazioni di base, set di dati di grandi dimensioni e confronto. 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 i turni all'interno di uno scenario vengono eseguiti in sequenza per mantenere il contesto della conversazione.

  2. Attendi: un ritardo di inserimento configurabile (predefinito: 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 richiamo, gli ID del valutatore e la ground truth del set di dati.

  4. Sondaggio: il corridore esegue il polling GetBatchEvaluation finché il lavoro non raggiunge lo stato terminale e restituisce i risultati aggregati.

Agente invocatore

Il runner richiede un agent invoker, un callable che invoca il tuo agente per un solo turno. L'invoker è indipendente dal framework: puoi chiamare il tuo agente tramite invoke_agent_runtime boto3, una chiamata diretta di funzione, 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

L'input di turno dal set di dati.

AgentInvokerInput.session_id

str

Stabile in tutte le curve in uno scenario. Trasmettilo 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 del 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 vedere 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 del valutatore (integrati o personalizzati).

data_source.service_names

—

Nome del servizio che identifica le tracce del tuo agente in CloudWatch.

data_source.log_group_names

—

CloudWatch registri i nomi dei gruppi in cui è archiviata la telemetria degli agenti.

data_source.ingestion_delay_seconds

180

Secondi di attesa dopo la chiamata per l'inserimento degli 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. Impostato 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 l'invocazione dell'agente non è riuscita prima dell'invio del processo batch. Queste sessioni non sono incluse nella valutazione del batch.

  • output_data_configindica il 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 richiamo dello scenario vengono registrati come processo batchFailedScenario, ma non bloccano; vengono inviate solo le sessioni riuscite.

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

  • Timeout del polling: TimeoutError se il job viene superato. polling_timeout_seconds

  • Errore del lavoro: RuntimeError se lo stato di valutazione del batch è o. FAILED STOPPED