

# Esegui un A/B test per agenti ospitati all'esterno di AgentCore
<a name="ab-testing-3p-agents"></a>

Puoi A/B testare un agente che viene eseguito all'esterno di un AgentCore Runtime con un agente ospitato ovunque, ad esempio su AWS Lambda, Amazon EKS o Amazon ECS. Per gli agenti di A/B test, il AgentCore gateway indirizza il traffico tra le varianti, i punteggi di valutazione online per ogni sessione e il servizio calcola la significatività statistica per variante. Quando l'agente non utilizza un AgentCore Runtime, è necessario strumentarlo per verificarne l'osservabilità, registrarlo personalmente come destinazione del AgentCore gateway e abilitare il tracciamento del gateway in modo che le sessioni possano essere attribuite a una variante.

A/B tests supporta [pacchetti di configurazione con un runtime a singolo agente](ab-testing-config-bundle.md) e il [routing basato su target con](ab-testing-target-based.md) due endpoint di agenti. Questa pagina mostra come configurare un endpoint agente raggiungibile tramite HTTP come destinazione sul AgentCore gateway con tracciamento abilitato. Quindi, il AgentCore gateway tracing fornisce l'attribuzione delle varianti e l'osservabilità sull'endpoint dell'agente fornisce il contenuto del messaggio per l'assegnazione del punteggio.

[Questa pagina è un addendum per eseguire un test con il routing basato sulla destinazione. A/B ](ab-testing-target-based.md) Copre solo la configurazione aggiuntiva di cui ha bisogno un agente diverso dal runtime, ad esempio utilizzando un Lambda-hosted agente (dietro l'URL di una funzione); lo stesso approccio si applica a qualsiasi endpoint HTTP-reachable agente registrato come destinazione AgentCore gateway, quindi rimanda a quella pagina per creare ed eseguire il test.

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

Oltre ai [prerequisiti generali di A/B test](ab-testing-prereqs.md), sono necessari:

1. AgentCore il tracciamento del gateway è abilitato sul gateway in modo che le sessioni possano essere attribuite a una variante.

1. L'agente è stato aggiunto come destinazione passthrough su un AgentCore gateway utilizzando un protocollo supportato.

## Fase 1: Strumentate il vostro agente per AgentCore quanto riguarda l'osservabilità
<a name="ab-testing-3p-step1-observability"></a>

**Nota**  
Segui [Abilitazione dell'osservabilità per gli agenti ospitati all'esterno AgentCore](observability-configure.md#observability-configure-3p) per la configurazione completa.

Per un Lambda-hosted agente, collega il [AWS Lambda Layer per OpenTelemetry](https://aws-otel.github.io/docs/getting-started/lambda#adot-lambda-layer-arns) e imposta le seguenti variabili di ambiente:

```
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 gestore Lambda minimale che analizza la richiesta dell'URL della funzione e imposta il bagaglio della sessione:

```
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"
```

Per il routing basato sulla destinazione, implementalo due volte (controllo e trattamento) con la modifica che stai testando, ad esempio un prompt diverso o di sistema. `model_id`

## Passaggio 2: esponi il tuo agente tramite HTTP
<a name="ab-testing-3p-step2-http"></a>

L'agente deve essere raggiungibile su un endpoint HTTP che il AgentCore gateway può chiamare. Per l'esempio Lambda, crea un URL di funzione con autenticazione IAM per ogni funzione:

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

Ripetere l'operazione per la funzione di trattamento. (Per un contenitore o un agente ospitato autonomamente, esponi invece un endpoint HTTPS e vai al passaggio 3.)

## Fase 3: Registra il tuo agente come destinazione del gateway AgentCore
<a name="ab-testing-3p-step3-target"></a>

Registra ogni endpoint come destinazione **passthrough** HTTP su un AgentCore gateway. [Per i dettagli sulle destinazioni passthrough, incluse le opzioni`protocolType`, stickiness e credenziali, consulta HTTP passthrough targets.](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/gateway-target-http-passthrough.html)

Per registrare l'URL di una funzione Lambda come destinazione, imposta `protocolType` `CUSTOM` e fornisci un. `iamCredentialProvider` Il provider di credenziali autorizza il gateway a firmare ogni richiesta in uscita all'URL della funzione come servizio: `lambda`

**Nota**  
`stickinessConfiguration`Indica al gateway di utilizzare l'`x-session-id`intestazione per riconoscere quali richieste appartengono alla stessa sessione. La persistenza della sessione mantiene inalterate le sessioni in volo quando si avvia o si interrompe un A/B test: il gateway continua a indirizzare le sessioni in corso verso lo stesso obiettivo a cui erano già state assegnate e indirizza solo le nuove sessioni in base al peso A/B del trattamento durante il test.
Per motivi di osservabilità, l'agente deve inoltre impostare lo stesso ID di sessione nel contesto di tracciamento (ad esempio, come bagaglio). `session.id` Ciò consente alla valutazione online di valutare le sessioni e le tracce degli agenti e di attribuirle al trattamento del A/B test corretto.

**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" }
      }
    }
  ]'
```

Per un routing basato sull'obiettivo, ripetere l'operazione per l'endpoint del trattamento (denominarlo). `customer-support-treatment` Sottolinea ogni bersaglio con until is. `get-gateway-target` `status` `READY`

**Nota**  
 `iamCredentialProvider`è obbligatorio per un bersaglio IAM-authenticated passthrough. Per l'URL di una funzione Lambda impostato su`service`. `lambda` Il ruolo IAM del gateway deve avere entrambi `lambda:InvokeFunctionUrl` e `lambda:InvokeFunction` sull'ARN di ciascuna funzione.

## Fase 4: Abilitare il tracciamento del AgentCore gateway
<a name="ab-testing-3p-step4-gateway-tracing"></a>

Abilita la tracciabilità della distribuzione sul AgentCore gateway in modo che emetta intervalli di attribuzione delle varianti a. `aws/spans` ****Per abilitare il tracciamento dalla console, apri la pagina dei dettagli del gateway e scegli **Registra** consegne e tracciamento → Tracciamento → Abilita.**** Per ulteriori informazioni, consulta [Configurare](observability-configure.md#observability-configure-tracing) la tracciabilità della consegna su. CloudWatch

Una volta che il traffico inizia a fluire, ogni estensione del gateway contiene gli attributi `aws.agentcore.gateway.routing_experiment_arn` and `aws.agentcore.gateway.routing_experiment_variant_name` (ad esempio, `C` or`T1`), insieme a quello `traceId` della richiesta. La pipeline di valutazione online unisce lo span del gateway a quello del vostro agente`traceId`, vale a dire il modo in cui ogni sessione con punteggio viene attribuita alla sua variante. Senza il gateway tracing, le sessioni vengono comunque valutate, ma non possono essere attribuite a una variante e il A/B test non produce risultati per variante.

## Fase 5: Creare ed eseguire il test A/B
<a name="ab-testing-3p-step5-run"></a>

Il tuo agente è ora un bersaglio gateway che emette telemetria. Rimangono due passaggi:

1.  **Crea una configurazione di valutazione online per endpoint di variante.** Vedi [Creare una valutazione online](create-online-evaluations.md). Per ogni configurazione, usa il `service.name` gruppo di log degli eventi in [Fase 1: Strumentate il vostro agente per AgentCore quanto riguarda l'osservabilità](#ab-testing-3p-step1-observability) cui hai configurato.

1.  **Crea ed esegui il A/B test.** Segui [Esegui un A/B test con routing basato sulla destinazione](ab-testing-target-based.md), a partire dalla fase **Crea il A/B test**: crea il test con`perVariantOnlineEvaluationConfig`, invia traffico, risultati del sondaggio, interrompi e distribuisci il vincitore.

Quando invii traffico attraverso il gateway, indirizzalo verso la destinazione della variante di controllo. Il gateway suddivide tutto il traffico in arrivo al target di controllo tra gli obiettivi control (`C`) e treatment (`T1`) in base alla configurazione A/B del test.

**Example**  
Aggiungi una configurazione di valutazione online per variante, utilizzando il gruppo `service.name` and event log from [Fase 1: Strumentate il vostro agente per AgentCore quanto riguarda l'osservabilità](#ab-testing-3p-step1-observability) come fonte di dati, quindi avvia il test nella `target-based` modalità:  

```
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
```
Utilizzalo `agentcore status` per visualizzare i risultati per variante durante l'esecuzione del test e `agentcore stop` per terminarlo.
Crea una configurazione di valutazione online per variante con. `create_online_evaluation_config` Imposta `serviceNames` sul gruppo del registro degli eventi dell'endpoint `service.name` e `logGroupNames` sul relativo gruppo. Quindi crea il test con`create_ab_test`, utilizzando`perVariantOnlineEvaluationConfig`. **Per l'esempio completo di boto3, che include l'invio del traffico, i risultati dei sondaggi e l'interruzione del test, consulta [Esegui un A/B test con il routing basato sul target](ab-testing-target-based.md), a partire dal passaggio Crea il test. A/B **

## Risoluzione dei problemi
<a name="ab-testing-3p-troubleshooting"></a>

### A/B Il test non mostra risultati dopo l'invio del traffico
<a name="ab-testing-3p-no-results"></a>
+ Conferma che il tracciamento del gateway sia abilitato ([Fase 4: Abilitare il tracciamento del AgentCore gateway](#ab-testing-3p-step4-gateway-tracing)): senza di esso la pipeline di aggregazione non può attribuire sessioni alle varianti.
+ Verifica che ogni configurazione di valutazione online `serviceNames` corrisponda a quella dell'endpoint `service.name` e `logGroupNames` includa il gruppo di registro degli eventi dell'endpoint. La valutazione online `aws/spans` viene letta automaticamente, quindi non devi elencarla, ma deve essere elencato il gruppo del registro degli eventi (contenuto del messaggio).
+ I risultati vengono visualizzati dopo che una sessione è inattiva per la configurazione`sessionTimeoutMinutes`, quindi entro circa 15 minuti dal ciclo di punteggio successivo.