View a markdown version of this page

Exécuteur de jeux de données Batch - Amazon Bedrock AgentCore

Exécuteur de jeux de données Batch

Les BatchEvaluationRunner délégués couvrent entièrement la collecte et l'évaluation du service via les GetBatchEvaluation API StartBatchEvaluation and. Après avoir appelé votre agent pour chaque scénario, le coureur soumet une tâche par lots et interroge jusqu'à ce qu'elle soit terminée, renvoyant des résultats agrégés.

Utilisez le batch runner lorsque vous avez besoin de scores agrégés sur de nombreuses sessions sans avoir à gérer vous-même la collecte des intervalles ; pour les mesures de référence, les grands ensembles de données et les pre/post comparaisons.

Comment ça marche

Le runner traite les scénarios en quatre phases :

  1. Invoke : tous les scénarios s'exécutent simultanément à l'aide d'un pool de threads. Chaque scénario reçoit un identifiant de session unique et transforme un scénario exécuté de manière séquentielle pour maintenir le contexte de la conversation.

  2. Attendre : un délai d'ingestion configurable (par défaut : 180 secondes) permet d' CloudWatch ingérer les données de télémétrie. Ce délai est payé une seule fois, et non par scénario.

  3. Soumettre : le coureur appelle StartBatchEvaluation avec le groupe de CloudWatch log, les identifiants de session depuis la phase d'invocation, les identifiants de l'évaluateur et les informations de base issues de l'ensemble de données.

  4. Sondage : le candidat interroge GetBatchEvaluation jusqu'à ce que la tâche atteigne un état terminal et renvoie les résultats agrégés.

Invocateur de l'agent

Le coureur a besoin d'un invocateur d'agent, un appelable qui invoque votre agent pour un seul tour. L'invocateur est indépendant du framework : vous pouvez appeler votre agent via boto3invoke_agent_runtime, un appel de fonction direct, une requête HTTP ou toute autre méthode.

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))
Champ Type Description

AgentInvokerInput.payload

str ou dict

Entrée du tour de l'ensemble de données.

AgentInvokerInput.session_id

str

Stable à tous les virages d'un scénario. Transmettez-le à votre agent pour maintenir le contexte de la conversation.

AgentInvokerOutput.agent_output

Any

La réponse de l'agent.

Exemple

L'exemple suivant charge un ensemble de données à partir d'un fichier JSON et exécute l'évaluation par lots. Pour le format du jeu de données, voir Schéma du jeu de données.

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

Récupération des détails par session

Les résultats agrégés indiquent les moyennes de toutes les sessions. Pour voir les scores par session et par évaluateur, récupérez les événements d'évaluation depuis : 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()

Référence de configuration

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 )
Champ Par défaut Description

batch_evaluation_name

Nom de la tâche d'évaluation par lots.

evaluator_config.evaluator_ids

Liste des identifiants d'évaluateur (intégrés ou personnalisés).

data_source.service_names

Nom du service identifiant les traces de votre agent dans CloudWatch.

data_source.log_group_names

CloudWatch noms des groupes de journaux dans lesquels la télémétrie des agents est stockée.

data_source.ingestion_delay_seconds

180

Quelques secondes à attendre après l'invocation pour CloudWatch ingérer des spans.

polling_timeout_seconds

1800

Nombre maximal de secondes à attendre pour que le traitement par lots soit terminé.

polling_interval_seconds

30

Quelques secondes entre les demandes de sondage.

simulation_config

Aucune

Configuration pour les scénarios simulés. Définissez le SimulationConfig(model_id="…​") moment où l'ensemble de données contient SimulatedScenario des instances. Voir Simulation utilisateur.

Structure des résultats

Le coureur renvoie un BatchEvaluationResult :

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_failuresrépertorie les scénarios dans lesquels l'appel de l'agent a échoué avant que le traitement par lots ne soit soumis. Ces sessions ne sont pas incluses dans l'évaluation par lots.

  • output_data_configpointe vers le flux de CloudWatch journal dans lequel sont écrits les détails de chaque session. runner.fetch_evaluation_events(result)Utilisez-le pour le lire.

Gestion des erreurs

  • Les échecs d'invocation du scénario sont enregistrés FailedScenario mais ne bloquent pas le traitement par lots ; seules les sessions réussies sont soumises.

  • Si tous les scénarios échouent, le lanceur déclenche l'appel ValueError avant d'appeler l'API.

  • Délai d'interrogation : TimeoutError si la tâche dépassepolling_timeout_seconds.

  • Échec du job : RuntimeError si le statut d'évaluation du lot est FAILED ouSTOPPED.