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 :
-
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.
-
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.
-
Soumettre : le coureur appelle
StartBatchEvaluationavec 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. -
Sondage : le coureur interroge
GetBatchEvaluationjusqu'à 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 |
|---|---|---|
|
|
|
Entrée Turn issue de l'ensemble de données. |
|
|
|
Stable dans tous les virages d'un scénario. Transmettez-le à votre agent pour conserver le contexte de la conversation. |
|
|
|
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 |
|---|---|---|
|
|
— |
Nom de la tâche d'évaluation par lots. |
|
|
— |
Liste des identifiants des évaluateurs (intégrés ou personnalisés). |
|
|
— |
Nom du service identifiant les traces de votre agent dans CloudWatch. |
|
|
— |
CloudWatch noms des groupes de journaux dans lesquels la télémétrie de l'agent est stockée. |
|
|
180 |
Quelques secondes après l'invocation pour CloudWatch ingérer les spans. |
|
|
1800 |
Nombre maximum de secondes d'attente jusqu'à la fin du traitement par lots. |
|
|
30 |
Quelques secondes entre les demandes de sondage. |
|
|
Aucune |
Configuration pour des scénarios simulés. Définit |
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
FailedScenariomais ne bloquent pas le traitement par lots ; seules les sessions réussies sont soumises. -
Si tous les scénarios échouent, le coureur déclenche
ValueErroravant d'appeler l'API. -
Délai d'attente du sondage :
TimeoutErrorsi la tâche estpolling_timeout_secondsdépassée. -
Échec de la tâche :
RuntimeErrorsi le statut de l'évaluation des lots estFAILEDouSTOPPED.