View a markdown version of this page

Esegui un A/B test per agenti ospitati all'esterno di AgentCore - Amazon Bedrock AgentCore

Esegui un A/B test per agenti ospitati all'esterno di AgentCore

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 e il routing basato su target con 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 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

Oltre ai prerequisiti generali di A/B test, sono necessari:

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

  2. 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à

Per un Lambda-hosted agente, collega il AWS Lambda Layer per OpenTelemetry 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

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

Registra ogni endpoint come destinazione passthrough HTTP su un AgentCore gateway. Per i dettagli sulle destinazioni passthrough, incluse le opzioniprotocolType, stickiness e credenziali, consulta HTTP passthrough targets.

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
  • stickinessConfigurationIndica al gateway di utilizzare l'x-session-idintestazione 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.

Esempio
AgentCore CLI
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 CLI
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 suservice. 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

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 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 orT1), insieme a quello traceId della richiesta. La pipeline di valutazione online unisce lo span del gateway a quello del vostro agentetraceId, 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

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. 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à cui hai configurato.

  2. Crea ed esegui il A/B test. Segui Esegui un A/B test con routing basato sulla destinazione, a partire dalla fase Crea il A/B test: crea il test conperVariantOnlineEvaluationConfig, 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.

Esempio
AgentCore CLI

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à 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.

AWS SDK (boto3)

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 concreate_ab_test, utilizzandoperVariantOnlineEvaluationConfig. 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, a partire dal passaggio Crea il test. A/B

Risoluzione dei problemi

A/B Il test non mostra risultati dopo l'invio del traffico

  • Conferma che il tracciamento del gateway sia abilitato (Fase 4: Abilitare il tracciamento del AgentCore gateway): 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 configurazionesessionTimeoutMinutes, quindi entro circa 15 minuti dal ciclo di punteggio successivo.