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:
-
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.
-
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.
-
Invia: il runner chiama
StartBatchEvaluationcon 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. -
Sondaggio: il corridore esegue il polling
GetBatchEvaluationfinché 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 |
|---|---|---|
|
|
|
L'input di turno dal set di dati. |
|
|
|
Stabile in tutte le curve in uno scenario. Trasmettilo al tuo agente per mantenere il contesto della conversazione. |
|
|
|
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 |
|---|---|---|
|
|
— |
Nome del processo di valutazione in batch. |
|
|
— |
Elenco degli ID del valutatore (integrati o personalizzati). |
|
|
— |
Nome del servizio che identifica le tracce del tuo agente in CloudWatch. |
|
|
— |
CloudWatch registri i nomi dei gruppi in cui è archiviata la telemetria degli agenti. |
|
|
180 |
Secondi di attesa dopo la chiamata per l'inserimento degli intervalli. CloudWatch |
|
|
1800 |
Numero massimo di secondi di attesa per il completamento del processo batch. |
|
|
30 |
Secondi tra le richieste di sondaggio. |
|
|
Nessuno |
Configurazione per scenari simulati. Impostato |
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. Usalorunner.fetch_evaluation_events(result)per leggerlo.
Gestione degli errori
-
Gli errori di richiamo dello scenario vengono registrati come processo batch
FailedScenario, 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:
TimeoutErrorse il job viene superato.polling_timeout_seconds -
Errore del lavoro:
RuntimeErrorse lo stato di valutazione del batch è o.FAILEDSTOPPED