View a markdown version of this page

Ejecutor de conjuntos de datos por lotes - Amazon Bedrock AgentCore

Ejecutor de conjuntos de datos por lotes

Los BatchEvaluationRunner delegados transfieren la recopilación y la evaluación por completo al servicio a través de las GetBatchEvaluation API StartBatchEvaluation y. Tras invocar a su agente para cada escenario, el encargado envía un trabajo por lotes y sondea hasta que se complete, y devuelve los resultados agregados.

Utilice el sistema de procesamiento por lotes cuando necesite sumar las puntuaciones de varias sesiones sin tener que gestionar usted mismo la recopilación de intervalos, para realizar mediciones de referencia, conjuntos de datos de gran tamaño y realizar comparaciones. pre/post

Funcionamiento

El ejecutor procesa los escenarios en cuatro fases:

  1. Invocar: todos los escenarios se ejecutan simultáneamente mediante un grupo de subprocesos. Cada escenario recibe un identificador de sesión único y, dentro de un escenario, se ejecuta secuencialmente para mantener el contexto de la conversación.

  2. Espera: un retraso de ingesta configurable (predeterminado: 180 segundos) permite CloudWatch ingerir los datos de telemetría. Este retraso se paga una vez, no por escenario.

  3. Enviar: el ejecutor llama StartBatchEvaluation con el grupo de CloudWatch registros, los ID de sesión de la fase de invocación, los ID del evaluador y la información básica del conjunto de datos.

  4. Encuesta: el corredor sondea GetBatchEvaluation hasta que el trabajo alcance un estado terminal y devuelva los resultados agregados.

Invocador de agentes

El corredor requiere un invocador de agentes, un invocador que invoca a tu agente durante un solo turno. El invocador es independiente del marco: puedes llamar a tu agente mediante boto3invoke_agent_runtime, una llamada directa a una función, una solicitud HTTP o cualquier otro método.

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))
Campo Tipo Description (Descripción)

AgentInvokerInput.payload

str o dict

El turno es la entrada del conjunto de datos.

AgentInvokerInput.session_id

str

Estable en todos los giros de un escenario. Transmita esta información a su agente para mantener el contexto de la conversación.

AgentInvokerOutput.agent_output

Any

La respuesta del agente.

Ejemplo

El siguiente ejemplo carga un conjunto de datos desde un archivo JSON y ejecuta la evaluación por lotes. Para conocer el formato del conjunto de datos, consulte Esquema del conjunto de datos.

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

Obteniendo detalles por sesión

Los resultados agregados muestran los promedios de todas las sesiones. Para ver las puntuaciones por sesión y por evaluador, busque los eventos de evaluación en: 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()

Referencia de la configuración

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 )
Campo Predeterminado Description (Descripción)

batch_evaluation_name

Nombre del trabajo de evaluación por lotes.

evaluator_config.evaluator_ids

Lista de identificadores de evaluadores (integrados o personalizados).

data_source.service_names

Nombre del servicio que identifica las huellas de su agente. CloudWatch

data_source.log_group_names

CloudWatch nombres de grupos de registros donde se almacena la telemetría del agente.

data_source.ingestion_delay_seconds

180

Hay que esperar segundos después de la invocación para CloudWatch ingerir los intervalos.

polling_timeout_seconds

1800

Tiempo máximo de espera para que se complete el trabajo por lotes.

polling_interval_seconds

30

Segundos entre las solicitudes de sondeo.

simulation_config

Ninguno

Configuración para escenarios simulados. Se establece SimulationConfig(model_id="…​") cuándo el conjunto de datos contiene SimulatedScenario instancias. Consulte Simulación de usuario.

Estructura de resultados

El corredor devuelve unBatchEvaluationResult:

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_failuresenumera los escenarios en los que la invocación del agente falló antes de que se enviara el trabajo por lotes. Estas sesiones no se incluyen en la evaluación por lotes.

  • output_data_configapunta al flujo de CloudWatch registro en el que se escriben los detalles de cada sesión. Se usa runner.fetch_evaluation_events(result) para leerlo.

Gestión de errores

  • Los errores de invocación del escenario se registran como trabajo por lotes, FailedScenario pero no lo bloquean; solo se envían las sesiones correctas.

  • Si todos los escenarios fallan, el ejecutor se activa ValueError antes de llamar a la API.

  • Tiempo de espera de la encuesta: TimeoutError si el trabajo lo superapolling_timeout_seconds.

  • Job fallido: RuntimeError si el estado de evaluación del lote es FAILED oSTOPPED.