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:
-
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.
-
Warten: Eine konfigurierbare Aufnahmeverzögerung (Standard: 180 Sekunden) ermöglicht die Aufnahme der CloudWatch Telemetriedaten. Diese Verzögerung wird einmal bezahlt, nicht pro Szenario.
-
Senden: Der Runner ruft
StartBatchEvaluationmit der CloudWatch Protokollgruppe, den Sitzungs-IDs aus der Aufrufphase, den Evaluator-IDs und Ground Truth aus dem Datensatz auf. -
Umfrage: Der Runner fragt ab,
GetBatchEvaluationbis 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 |
|---|---|---|
|
|
|
Die Turn-Eingabe aus dem Datensatz. |
|
|
|
In einem Szenario über alle Kurven hinweg stabil. Geben Sie dies an Ihren Agenten weiter, um den Gesprächskontext aufrechtzuerhalten. |
|
|
|
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 |
|---|---|---|
|
|
— |
Name für den Batch-Evaluierungsauftrag. |
|
|
— |
Liste der Evaluator-IDs (integriert oder benutzerdefiniert). |
|
|
— |
Dienstname, der die Spuren Ihres Agenten in CloudWatch identifiziert. |
|
|
— |
CloudWatch Gruppennamen protokollieren, in denen die Agententelemetrie gespeichert ist. |
|
|
180 |
Sekunden, die nach dem Aufruf auf die Aufnahme von Spans gewartet CloudWatch werden müssen. |
|
|
1800 |
Maximale Wartezeit in Sekunden, bis der Batch-Job abgeschlossen ist. |
|
|
30 |
Sekunden zwischen Umfrageanfragen. |
|
|
Keine |
Konfiguration für simulierte Szenarien. Legt fest |
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
FailedScenarioaber nicht. Es werden nur erfolgreiche Sitzungen gesendet. -
Wenn alle Szenarien fehlschlagen, startet der Runner,
ValueErrorbevor er die API aufruft. -
Timeout für die Abfrage:
TimeoutErrorwenn der Job den Wert überschreitet.polling_timeout_seconds -
Auftragsfehler:
RuntimeErrorwenn der Status der BatchauswertungFAILEDoder lautetSTOPPED.