View a markdown version of this page

Gestionnaire de jeux de données par lots - Base rocheuse de l'Amazonie AgentCore

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Gestionnaire de jeux de données par lots

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

Utilisez le système de traitement par lots lorsque vous avez besoin de scores agrégés pour 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 coureur 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, au sein d'un scénario, s'exécute de manière séquentielle pour conserver 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 retard est payé une fois, et non par scénario.

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

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

Invocateur d'agent

Le coureur a besoin d'un invocateur d'agent, un appelable qui invoque votre agent pendant 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 Turn issue de l'ensemble de données.

AgentInvokerInput.session_id

str

Stable dans tous les virages d'un scénario. Transmettez-le à votre agent pour conserver 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 présentent des moyennes pour toutes les sessions. Pour voir les scores par session et par évaluateur, récupérez les événements d'évaluation à l'adresse suivante : 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 des évaluateurs (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 de l'agent est stockée.

data_source.ingestion_delay_seconds

180

Quelques secondes après l'invocation pour CloudWatch ingérer les spans.

polling_timeout_seconds

1800

Nombre maximum de secondes d'attente jusqu'à la fin du traitement par lots.

polling_interval_seconds

30

Quelques secondes entre les demandes de sondage.

simulation_config

Aucune

Configuration pour des scénarios simulés. Définit SimulationConfig(model_id="…​") quand l'ensemble de données contient des SimulatedScenario 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 la soumission du traitement par lots. Ces sessions ne sont pas incluses dans l'évaluation par lots.

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

Gestion des erreurs

  • Les échecs d'invocation des scénarios 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 coureur déclenche ValueError avant d'appeler l'API.

  • Délai d'attente du sondage : TimeoutError si la tâche est polling_timeout_seconds dépassée.

  • Échec de la tâche : RuntimeError si le statut de l'évaluation des lots est FAILED ouSTOPPED.