

# Realice una A/B prueba para los agentes alojados fuera de AgentCore
<a name="ab-testing-3p-agents"></a>

Puede A/B probar un agente que se ejecute fuera de un AgentCore entorno de ejecución con un agente alojado en cualquier lugar, por ejemplo, en AWS Lambda, Amazon EKS o Amazon ECS. En el caso de los agentes de A/B pruebas, la AgentCore puerta de enlace enruta el tráfico entre las variantes, la evaluación en línea puntúa cada sesión y el servicio calcula la significación estadística de cada variante. Cuando tu agente no esté en AgentCore ejecución, tendrás que instrumentarlo para garantizar su observabilidad, registrarlo tú mismo como destino de AgentCore pasarela y habilitar el seguimiento de la pasarela para poder atribuir las sesiones a una variante.

A/B Las pruebas admiten [paquetes de configuración con un único tiempo de ejecución de agente](ab-testing-config-bundle.md), así como el [enrutamiento basado en objetivos con dos](ab-testing-target-based.md) terminales de agente. En esta página, se muestra cómo configurar un punto final de agente accesible por HTTP como destino en una AgentCore puerta de enlace con el rastreo habilitado. A continuación, el rastreo de la AgentCore pasarela proporciona la atribución de variantes y la observabilidad en el punto final del agente proporciona el contenido del mensaje para la puntuación.

Esta página es una adición a la sección [Ejecute una prueba con un A/B ](ab-testing-target-based.md) enrutamiento basado en objetivos. Abarca únicamente la configuración adicional que necesita un agente que no esté en tiempo de ejecución: por ejemplo, se utiliza un Lambda-hosted agente (detrás de la URL de una función); el mismo enfoque se aplica a cualquier terminal de HTTP-reachable agente que registre como destino de la AgentCore puerta de enlace y, a continuación, le devuelve a esa página para crear y ejecutar la prueba.

## Requisitos previos
<a name="ab-testing-3p-prereqs"></a>

Además de los [requisitos generales A/B de las pruebas](ab-testing-prereqs.md), necesita:

1. AgentCore el rastreo de la puerta de enlace está habilitado en la puerta de enlace para poder atribuir las sesiones a una variante.

1. Su agente lo agregó como objetivo de acceso directo a una AgentCore puerta de enlace mediante un protocolo compatible.

## Paso 1: Instrumente a su agente para AgentCore garantizar la observabilidad
<a name="ab-testing-3p-step1-observability"></a>

**nota**  
Consulte [Habilitar la observabilidad para los agentes alojados fuera de o AgentCore para ver](observability-configure.md#observability-configure-3p) la configuración completa.

Para un Lambda-hosted agente, adjunte la [capa AWS Lambda OpenTelemetry](https://aws-otel.github.io/docs/getting-started/lambda#adot-lambda-layer-arns) y establezca las siguientes variables de entorno:

```
aws lambda update-function-configuration \
  --function-name <function-name> \
  --region <region> \
  --layers <adot-python-layer-arn> \
  --environment "Variables={
    AGENT_OBSERVABILITY_ENABLED=true,
    OTEL_PROPAGATORS='baggage,xray-lambda,tracecontext',
    OTEL_PYTHON_DISTRO=aws_distro,
    OTEL_PYTHON_CONFIGURATOR=aws_configurator,
    OTEL_LOGS_EXPORTER=otlp,
    OTEL_TRACES_EXPORTER=otlp,
    OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf,
    OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED=true,
    OTEL_AWS_APPLICATION_SIGNALS_ENABLED=false,
    OTEL_EXPORTER_OTLP_LOGS_HEADERS='x-aws-log-group=/aws/bedrock-agentcore/agents/<function-name>/runtime-logs,x-aws-log-stream=runtime-logs,x-aws-metric-namespace=agentcore',
    OTEL_RESOURCE_ATTRIBUTES='service.name=<function-name>',
    AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-instrument
  }"
```

Un controlador Lambda mínimo que analiza la solicitud de URL de la función y establece el equipaje de la sesión:

```
import base64, json
from strands import Agent
from strands.models.bedrock import BedrockModel
from opentelemetry import baggage, context

_model = BedrockModel(model_id="global.anthropic.claude-sonnet-4-5-20250929-v1:0")


def lambda_handler(event, _context):
    # Lambda function URL payload format 2.0: JSON body is in event["body"], no httpMethod.
    raw = event.get("body")
    if raw is not None and event.get("isBase64Encoded"):
        raw = base64.b64decode(raw).decode()
    body = json.loads(raw) if isinstance(raw, str) else (raw or event)

    session_id = _session_id(event)
    token = context.attach(baggage.set_baggage("session.id", session_id))
    try:
        agent = Agent(model=_model, system_prompt="You are a helpful assistant. Be concise.")
        result = agent(body.get("prompt", "Hello"))
    finally:
        context.detach(token)
    return {"response": str(result), "sessionId": session_id}


def _session_id(event):
    return (event.get("headers") or {}).get("x-session-id") or "default"
```

Para el enrutamiento basado en objetivos, impleméntelo dos veces (control y tratamiento) con el cambio que esté probando (por ejemplo, un indicador diferente `model_id` o del sistema).

## Paso 2: Exponga su agente a través de HTTP
<a name="ab-testing-3p-step2-http"></a>

El agente debe estar accesible en un punto final HTTP al que pueda llamar la AgentCore puerta de enlace. Para el ejemplo de Lambda, cree una URL de función con autenticación de IAM para cada función:

```
aws lambda create-function-url-config \
  --function-name cs-agent-control \
  --auth-type AWS_IAM \
  --region us-west-2
```

Repita el procedimiento para la función de tratamiento. (En el caso de un contenedor o un agente autohospedado, en su lugar, exponga un punto final HTTPS y vaya al paso 3).

## Paso 3: Registre a su agente como destino de AgentCore puerta de enlace
<a name="ab-testing-3p-step3-target"></a>

Registre cada punto final como destino de **acceso HTTP en una AgentCore puerta de enlace**. [Para obtener más información sobre los destinos de transferencia, incluidas las opciones de acceso `protocolType` directo, adherencia y credenciales, consulte los destinos de acceso directo HTTP.](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/gateway-target-http-passthrough.html)

Para registrar la URL de una función Lambda como destino, configúrela en `CUSTOM` y `protocolType` proporcione una. `iamCredentialProvider` El proveedor de credenciales autoriza a la pasarela a firmar cada solicitud saliente a la URL de la función como servicio: `lambda`

**nota**  
`stickinessConfiguration`Indica a la puerta de enlace que utilice el `x-session-id` encabezado para reconocer qué solicitudes pertenecen a la misma sesión. La rigidez de las sesiones evita que las sesiones en curso se vean afectadas al iniciar o detener una A/B prueba: la pasarela sigue dirigiendo las sesiones en curso al mismo objetivo al que ya estaban asignadas y dirige solo las sesiones nuevas en función de las ponderaciones del tratamiento de la A/B prueba mientras se está realizando la prueba.
Para garantizar la visibilidad, el agente también debe establecer este mismo identificador de sesión en su contexto de rastreo (por ejemplo, como equipaje). `session.id` Esto permite que la evaluación en línea puntúe las sesiones y los rastros de los agentes y los atribuya al tratamiento de A/B prueba correcto.

**Example**  

```
agentcore add gateway-target \
  --name customer-support-control \
  --gateway cs-3p-abtest-gw \
  --type passthrough \
  --passthrough-endpoint https://<control-id>.lambda-url.us-west-2.on.aws/ \
  --passthrough-protocol CUSTOM \
  --stickiness-identifier '$context.header.x-session-id' \
  --stickiness-timeout 28800 \
  --signing-service lambda \
  --signing-region us-west-2
```

```
aws bedrock-agentcore-control create-gateway-target \
  --gateway-identifier cs-3p-abtest-gw-abc123 \
  --name customer-support-control \
  --region us-west-2 \
  --target-configuration '{
    "http": {
      "passthrough": {
        "endpoint": "https://<control-id>.lambda-url.us-west-2.on.aws/",
        "protocolType": "CUSTOM",
        "stickinessConfiguration": {
          "identifier": "$context.header.x-session-id",
          "timeout": 28800
        }
      }
    }
  }' \
  --credential-provider-configurations '[
    {
      "credentialProviderType": "GATEWAY_IAM_ROLE",
      "credentialProvider": {
        "iamCredentialProvider": { "service": "lambda", "region": "us-west-2" }
      }
    }
  ]'
```

Para el enrutamiento basado en objetivos, repita el procedimiento para el punto final del tratamiento (asígnele un nombre`customer-support-treatment`). Encueste cada objetivo con `get-gateway-target` hasta que `status` sea`READY`.

**nota**  
 `iamCredentialProvider`es necesario para un objetivo IAM-authenticated de acceso directo. Para una URL de función Lambda establecida `service` en. `lambda` El rol de IAM de la puerta de enlace debe tener ambos `lambda:InvokeFunctionUrl` y estar `lambda:InvokeFunction` en el ARN de cada función.

## Paso 4: Habilitar AgentCore el rastreo de la puerta de enlace
<a name="ab-testing-3p-step4-gateway-tracing"></a>

Habilite el rastreo de la entrega en la AgentCore puerta de enlace para que emita intervalos de atribución variables hasta. `aws/spans` ****Para activar el rastreo desde la consola, abra la página de detalles de la pasarela y elija **Registrar entregas** y rastreo → Rastreo → Activar.**** Para obtener más información, consulte [Configurar el seguimiento](observability-configure.md#observability-configure-tracing) de la entrega a. CloudWatch

Una vez que el tráfico comienza a fluir, cada tramo de puerta de enlace incluye los atributos `aws.agentcore.gateway.routing_experiment_arn` y `aws.agentcore.gateway.routing_experiment_variant_name` (por ejemplo, `C` o`T1`), junto con los `traceId` de la solicitud. El proceso de evaluación en línea une el intervalo de la pasarela con el intervalo del agente`traceId`, que es la forma en que cada sesión puntuada se atribuye a su variante. Sin el rastreo inicial, las sesiones se siguen puntuando, pero no se pueden atribuir a una variante y la A/B prueba no arroja resultados por variante.

## Paso 5: Crea y ejecuta la prueba A/B
<a name="ab-testing-3p-step5-run"></a>

Su agente es ahora un objetivo de puerta de enlace que emite telemetría. Quedan dos pasos:

1.  **Cree una configuración de evaluación en línea por cada variante de punto final.** Consulte [Crear una evaluación en línea](create-online-evaluations.md). Para cada configuración, utilice el `service.name` grupo de registro de eventos en el que se configuró[Paso 1: Instrumente a su agente para AgentCore garantizar la observabilidad](#ab-testing-3p-step1-observability).

1.  **Crea y ejecuta la A/B prueba.** Siga [Ejecute una A/B prueba con un enrutamiento basado en objetivos](ab-testing-target-based.md), empezando por el paso **Crear la A/B prueba**: cree la prueba con`perVariantOnlineEvaluationConfig`, envíe el tráfico, los resultados de la encuesta, detenga y despliegue al ganador.

Cuando envíe tráfico a través de la puerta de enlace, diríjalo al objetivo de la variante de control. La puerta de enlace divide todo el tráfico que llega al objetivo de control entre los objetivos de control (`C`) y de tratamiento (`T1`) según la configuración de A/B prueba.

**Example**  
Agregue una configuración de evaluación en línea por variante (utilizando el grupo de registro de eventos `service.name` y de [Paso 1: Instrumente a su agente para AgentCore garantizar la observabilidad](#ab-testing-3p-step1-observability) como fuente de datos) y, a continuación, inicie la prueba en el `target-based` modo:  

```
agentcore add online-eval \
  --name cs-control-eval \
  --evaluator Builtin.Correctness \
  --service-name customer-support-control \
  --log-group-name /aws/bedrock-agentcore/agents/cs-agent-control/runtime-logs \
  --enable-on-create

agentcore add online-eval \
  --name cs-treatment-eval \
  --evaluator Builtin.Correctness \
  --service-name customer-support-treatment \
  --log-group-name /aws/bedrock-agentcore/agents/cs-agent-treatment/runtime-logs \
  --enable-on-create

agentcore deploy

agentcore run ab-test \
  --name cs-3p-abtest \
  --gateway cs-3p-abtest-gw \
  --mode target-based \
  --control-target customer-support-control \
  --treatment-target customer-support-treatment \
  --control-online-eval cs-control-eval \
  --treatment-online-eval cs-treatment-eval \
  --control-weight 50 \
  --treatment-weight 50 \
  --wait
```
Se usa `agentcore status` para ver los resultados por variante mientras se ejecuta la prueba y `agentcore stop` para finalizarla.
Cree una configuración de evaluación en línea por variante con`create_online_evaluation_config`. `serviceNames`Configúrelo en el punto final `service.name` y `logGroupNames` en su grupo de registros de eventos. A continuación, cree la prueba con`create_ab_test`, utilizando`perVariantOnlineEvaluationConfig`. Para ver el ejemplo completo de boto3, que incluye el envío del tráfico, los resultados del sondeo y la detención de la prueba, consulte [Ejecutar una A/B prueba con un enrutamiento basado en objetivos](ab-testing-target-based.md), empezando por el paso **Crear la A/B ** prueba.

## Resolución de problemas
<a name="ab-testing-3p-troubleshooting"></a>

### A/B La prueba no muestra resultados después de enviar el tráfico
<a name="ab-testing-3p-no-results"></a>
+ Confirme que el rastreo de puertas de enlace esté habilitado ([Paso 4: Habilitar AgentCore el rastreo de la puerta de enlace](#ab-testing-3p-step4-gateway-tracing)); sin él, la canalización de agregación no puede atribuir las sesiones a las variantes.
+ Confirme que cada configuración de evaluación en línea `serviceNames` coincide con la del punto final `service.name` e `logGroupNames` incluye el grupo de registro de eventos del punto final. La evaluación en línea `aws/spans` se lee automáticamente, por lo que no se incluye en la lista, pero sí se debe incluir el grupo de registro de eventos (contenido del mensaje).
+ Los resultados aparecen después de que una sesión esté inactiva para la sesión configurada y`sessionTimeoutMinutes`, a continuación, aproximadamente 15 minutos después del siguiente ciclo de puntuación.