View a markdown version of this page

Batch-Datensatz-Runner - Amazon Grundgestein AgentCore

Batch-Datensatz-Runner

Die BatchEvaluationRunner Delegierten erstrecken sich über die GetBatchEvaluation APIs und auf die gesamte Erfassung StartBatchEvaluation und Auswertung bis hin zum Service. Nachdem Sie Ihren Agenten für jedes Szenario aufgerufen haben, sendet der Runner einen Batch-Job und führt Abfragen durch, bis der Vorgang abgeschlossen ist. Dabei werden aggregierte Ergebnisse zurückgegeben.

Verwenden Sie den Batch-Runner, wenn Sie aggregierte Ergebnisse über viele Sitzungen hinweg benötigen, ohne die Erfassung der Spanne selbst verwalten zu müssen; für Basismessungen, große Datensätze und Vergleiche. pre/post

Funktionsweise

Der Runner verarbeitet Szenarien in vier Phasen:

  1. Aufrufen: Alle Szenarien werden gleichzeitig unter Verwendung eines Threadpools ausgeführt. Jedes Szenario erhält eine eindeutige Sitzungs-ID und wird innerhalb eines Szenarios sequentiell ausgeführt, um den Konversationskontext aufrechtzuerhalten.

  2. Warten: Eine konfigurierbare Aufnahmeverzögerung (Standard: 180 Sekunden) ermöglicht die Aufnahme der CloudWatch Telemetriedaten. Diese Verzögerung wird einmal bezahlt, nicht pro Szenario.

  3. Senden: Der Runner ruft StartBatchEvaluation mit der CloudWatch Protokollgruppe, den Sitzungs-IDs aus der Aufrufphase, den Evaluator-IDs und Ground Truth aus dem Datensatz auf.

  4. Umfrage: Der Runner fragt ab, GetBatchEvaluation bis der Job einen Terminalstatus erreicht hat, und gibt die Gesamtergebnisse zurück.

Aufrufer des Agenten

Der Runner benötigt einen Agenten-Invoker, einen Callable, der Ihren Agenten für einen einzigen Zug aufruft. Der Invoker ist Framework-unabhängig: Sie können Ihren Agenten über boto3invoke_agent_runtime, einen direkten Funktionsaufruf, eine HTTP-Anfrage oder eine andere Methode aufrufen.

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))
Feld Typ Description

AgentInvokerInput.payload

str oder dict

Die Turn-Eingabe aus dem Datensatz.

AgentInvokerInput.session_id

str

In einem Szenario über alle Kurven hinweg stabil. Geben Sie dies an Ihren Agenten weiter, um den Gesprächskontext aufrechtzuerhalten.

AgentInvokerOutput.agent_output

Any

Die Antwort des Agenten.

Beispiel

Im folgenden Beispiel wird ein Datensatz aus einer JSON-Datei geladen und die Batch-Auswertung ausgeführt. Informationen zum Datensatzformat finden Sie unter Datensatzschema.

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

Details pro Sitzung werden abgerufen

Die aggregierten Ergebnisse zeigen Durchschnittswerte für alle Sitzungen. Um die Ergebnisse pro Sitzung und pro Evaluator zu sehen, rufen Sie die Bewertungsereignisse ab von: 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()

Konfigurationsreferenz

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 )
Feld Standard Description

batch_evaluation_name

Name für den Batch-Evaluierungsauftrag.

evaluator_config.evaluator_ids

Liste der Evaluator-IDs (integriert oder benutzerdefiniert).

data_source.service_names

Dienstname, der die Spuren Ihres Agenten in CloudWatch identifiziert.

data_source.log_group_names

CloudWatch Gruppennamen protokollieren, in denen die Agententelemetrie gespeichert ist.

data_source.ingestion_delay_seconds

180

Sekunden, die nach dem Aufruf auf die Aufnahme von Spans gewartet CloudWatch werden müssen.

polling_timeout_seconds

1800

Maximale Wartezeit in Sekunden, bis der Batch-Job abgeschlossen ist.

polling_interval_seconds

30

Sekunden zwischen Umfrageanfragen.

simulation_config

Keine

Konfiguration für simulierte Szenarien. Legt festSimulationConfig(model_id="…​"), wenn der Datensatz SimulatedScenario Instanzen enthält. Siehe Benutzersimulation.

Struktur der Ergebnisse

Der Läufer gibt Folgendes zurückBatchEvaluationResult:

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_failureslistet Szenarien auf, in denen der Agentenaufruf fehlgeschlagen ist, bevor der Batch-Job gesendet wurde. Diese Sitzungen sind nicht in der Batch-Auswertung enthalten.

  • output_data_configverweist auf den CloudWatch Protokollstream, in den Sitzungsdetails geschrieben werden. Verwenden Sie esrunner.fetch_evaluation_events(result), um es zu lesen.

Fehlerbehandlung

  • Fehlgeschlagene Szenarioaufrufe werden als Batch-Job aufgezeichnet, blockieren ihn FailedScenario aber nicht. Es werden nur erfolgreiche Sitzungen gesendet.

  • Wenn alle Szenarien fehlschlagen, startet der Runner, ValueError bevor er die API aufruft.

  • Timeout für die Abfrage: TimeoutError wenn der Job den Wert überschreitet. polling_timeout_seconds

  • Auftragsfehler: RuntimeError wenn der Status der Batchauswertung FAILED oder lautetSTOPPED.