View a markdown version of this page

Führen Sie einen A/B Test für Agenten durch, die außerhalb von gehostet werden AgentCore - Amazon Grundgestein AgentCore

Führen Sie einen A/B Test für Agenten durch, die außerhalb von gehostet werden AgentCore

Sie können einen Agenten, der außerhalb einer AgentCore Runtime ausgeführt wird, mit einem Agenten A/B testen, der irgendwo gehostet wird, z. B. auf AWS Lambda, Amazon EKS oder Amazon ECS. Beim A/B Testen von Agents leitet AgentCore das Gateway den Datenverkehr zwischen den Varianten weiter, die Online-Evaluierung bewertet jede Sitzung und der Service berechnet die statistische Signifikanz pro Variante. Wenn sich Ihr Agent nicht in einer AgentCore Runtime befindet, müssen Sie ihn auf Beobachtbarkeit prüfen und ihn selbst als AgentCore Gateway-Ziel registrieren. Außerdem müssen Sie das Gateway-Tracing aktivieren, sodass Sitzungen einer Variante zugeordnet werden können.

A/B Tests unterstützt Konfigurationspakete mit einer Laufzeit für einen einzelnen Agenten sowie zielbasiertes Routing mit zwei Agenten-Endpunkten. Auf dieser Seite wird gezeigt, wie Sie einen über HTTP erreichbaren Agentenendpunkt als Ziel auf dem AgentCore Gateway einrichten, wenn die Ablaufverfolgung aktiviert ist. Anschließend stellt die AgentCore Gateway-Ablaufverfolgung die Variantenzuweisung bereit, und Observability auf dem Agenten-Endpunkt liefert den Nachrichteninhalt für die Bewertung.

Diese Seite ist ein Nachtrag zum Ausführen eines Tests mit zielbasiertem Routing. A/B Sie behandelt nur die zusätzliche Einrichtung, die ein Agent benötigt, der kein Runtime-Agent ist. Dabei wird ein Lambda-hosted Agent (hinter einer Funktions-URL) als Beispiel verwendet; derselbe Ansatz gilt für jeden HTTP-reachable Agent-Endpunkt, den Sie als AgentCore Gateway-Ziel registrieren. Anschließend werden Sie zu dieser Seite zurückgeleitet, um den Test zu erstellen und auszuführen.

Voraussetzungen

Zusätzlich zu den allgemeinen A/B Testvoraussetzungen benötigen Sie:

  1. AgentCore Die Gateway-Ablaufverfolgung ist auf dem Gateway aktiviert, sodass Sitzungen einer Variante zugeordnet werden können.

  2. Ihr Agent wurde mithilfe eines unterstützten Protokolls als Passthrough-Ziel auf einem AgentCore Gateway hinzugefügt.

Schritt 1: Instrumentieren Sie Ihren Agenten im Hinblick auf die AgentCore Beobachtbarkeit

Anmerkung

Fügen Sie für einen Lambda-hosted Agenten den AWS Lambda-Layer für hinzu OpenTelemetry und legen Sie die folgenden Umgebungsvariablen fest:

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

Ein minimaler Lambda-Handler, der die URL-Anfrage der Funktion analysiert und das Sitzungs-Backage festlegt:

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"

Für zielbasiertes Routing sollten Sie diesen Vorgang zweimal (Kontrolle und Behandlung) zusammen mit der Änderung, die Sie testen, einsetzen, z. B. eine andere model_id oder eine Systemaufforderung.

Schritt 2: Machen Sie Ihren Agenten über HTTP verfügbar

Der Agent muss an einem HTTP-Endpunkt erreichbar sein, den das AgentCore Gateway aufrufen kann. Erstellen Sie für das Lambda-Beispiel eine Funktions-URL mit IAM-Authentifizierung für jede Funktion:

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

Wiederholen Sie den Vorgang für die Behandlungsfunktion. (Machen Sie für einen Container oder einen selbst gehosteten Agenten stattdessen einen HTTPS-Endpunkt verfügbar und fahren Sie mit Schritt 3 fort.)

Schritt 3: Registrieren Sie Ihren Agenten als AgentCore Gateway-Ziel

Registrieren Sie jeden Endpunkt als HTTP-Passthrough-Ziel auf einem AgentCore Gateway. Einzelheiten zu den Passthrough-Zielen — einschließlich der OptionenprotocolType, Stickiness und Credential-Optionen — finden Sie unter HTTP-Passthrough-Ziele.

Um eine Lambda-Funktions-URL als Ziel zu registrieren, setzen Sie protocolType auf CUSTOM und geben Sie eine aniamCredentialProvider. Der Anmeldeinformationsanbieter autorisiert das Gateway, jede ausgehende Anfrage an die Funktions-URL als Dienst zu signieren: lambda

Anmerkung
  • Der stickinessConfiguration weist das Gateway an, anhand des x-session-id Headers zu erkennen, welche Anfragen zu derselben Sitzung gehören. Die Sitzungsbindung sorgt dafür, dass während des Tests laufende Sitzungen nicht beeinträchtigt werden, wenn Sie einen A/B Test starten oder beenden: Das Gateway leitet laufende Sitzungen weiterhin an dasselbe Ziel weiter, dem sie bereits zugewiesen wurden, und leitet nur neue Sitzungen entsprechend Ihren A/B Testbehandlungsgewichten weiter, während der Test läuft.

  • Aus Gründen der Beobachtbarkeit muss Ihr Agent dieselbe Sitzungs-ID auch in seinem Trace-Kontext angeben (z. B. als Gepäck). session.id Auf diese Weise können Online-Evaluierungen die Sitzungen und Traces der Agenten bewerten und sie der richtigen A/B Testbehandlung zuordnen.

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

Für eine zielbasierte Weiterleitung wiederholen Sie den Vorgang für den Behandlungsendpunkt (geben Sie ihm einen Namencustomer-support-treatment). Fragen Sie jedes Ziel mit get-gateway-target bis status ist READY ab.

Anmerkung

iamCredentialProviderist für ein IAM-authenticated Passthrough-Ziel erforderlich. Für eine Lambda-Funktions-URL, die service auf lambda gesetzt ist. Die Gateway-IAM-Rolle muss lambda:InvokeFunctionUrl sowohl als auch lambda:InvokeFunction im ARN jeder Funktion enthalten sein.

Schritt 4: AgentCore Gateway-Ablaufverfolgung aktivieren

Aktivieren Sie die Ablaufverfolgungszustellung auf dem AgentCore Gateway, sodass Spans mit Variantenzuweisung an ausgegeben werden. aws/spans Um die Ablaufverfolgung von der Konsole aus zu aktivieren, öffnen Sie die Gateway-Detailseite und wählen Sie Lieferungen und Ablaufverfolgung protokollieren → Ablaufverfolgung → Aktivieren aus. Weitere Informationen finden Sie unter Tracing Delivery to konfigurieren. CloudWatch

Sobald der Datenverkehr zu fließen beginnt, enthält jeder Gateway-Bereich die Attribute aws.agentcore.gateway.routing_experiment_arn und aws.agentcore.gateway.routing_experiment_variant_name (z. B. C oderT1) zusammen mit den Attributen traceId der Anfrage. Die Online-Evaluierungspipeline verknüpft den Gateway-Span mit den Spans Ihres Agenten durchtraceId. Auf diese Weise wird jede bewertete Sitzung ihrer Variante zugeordnet. Ohne Gateway-Tracing werden Sitzungen immer noch bewertet, aber sie können keiner Variante zugeordnet werden, und der A/B Test liefert keine Ergebnisse pro Variante.

Schritt 5: Den Test erstellen und ausführen A/B

Ihr Agent ist jetzt ein Gateway-Ziel, das Telemetrie sendet. Es bleiben zwei Schritte übrig:

  1. Erstellen Sie eine Online-Evaluierungskonfiguration pro Variantenendpunkt. Siehe Online-Evaluierung erstellen. Verwenden Sie für jede Konfiguration die Ereignisprotokollgruppe service.name und die Ereignisprotokollgruppe, in der Sie konfiguriert habenSchritt 1: Instrumentieren Sie Ihren Agenten im Hinblick auf die AgentCore Beobachtbarkeit.

  2. Erstellen Sie den A/B Test und führen Sie ihn aus. Führen Sie einen A/B Test mit zielbasiertem Routing aus, und beginnen Sie mit dem Schritt A/B Test erstellen. Erstellen Sie den Test mitperVariantOnlineEvaluationConfig, senden Sie Traffic, fragen Sie die Ergebnisse ab, beenden Sie den Test und stellen Sie ihn bereit.

Wenn Sie Datenverkehr über das Gateway senden, leiten Sie ihn an das Ziel der Kontrollvariante weiter. Das Gateway teilt den gesamten Datenverkehr, der am Kontrollziel ankommt, entsprechend Ihrer A/B Testkonfiguration auf die Kontroll- (CT1) und Behandlungsziele () auf.

Beispiel
AgentCore CLI

Fügen Sie pro Variante eine Konfiguration für die Online-Evaluierung hinzu service.name und verwenden Sie dabei die Ereignisprotokollgruppe von Schritt 1: Instrumentieren Sie Ihren Agenten im Hinblick auf die AgentCore Beobachtbarkeit als Datenquelle. Starten Sie dann den Test im target-based Modus:

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

Wird verwendetagentcore status, um die Ergebnisse pro Variante anzuzeigen, während der Test ausgeführt wirdagentcore stop, und um ihn zu beenden.

AWS SDK (boto3)

Erstellen Sie eine Online-Evaluierungskonfiguration pro Variante mitcreate_online_evaluation_config. Legt serviceNames die Gruppe des Endpunkts service.name und logGroupNames dessen Ereignisprotokollgruppe fest. Erstellen Sie dann den Test mitcreate_ab_test, mitperVariantOnlineEvaluationConfig. Das vollständige boto3-Beispiel — einschließlich Senden von Datenverkehr, Abfragen von Ergebnissen und Beenden des Tests — finden Sie unter Ausführen eines Tests mit zielbasiertem Routing, beginnend mit dem Schritt A/B Test erstellen. A/B

Fehlerbehebung

A/B Der Test zeigt nach dem Senden von Datenverkehr keine Ergebnisse

  • Vergewissern Sie sich, dass die Gateway-Ablaufverfolgung aktiviert ist (Schritt 4: AgentCore Gateway-Ablaufverfolgung aktivieren). Andernfalls kann die Aggregationspipeline keine Sitzungen Varianten zuordnen.

  • Vergewissern Sie sich, dass alle Konfigurationen für die Online-Evaluierung serviceNames mit denen des Endpunkts übereinstimmen service.name und dass sie die Ereignisprotokollgruppe des Endpunkts logGroupNames enthalten. Die Online-Evaluierung aws/spans wird automatisch gelesen, sodass Sie sie nicht auflisten. Die Ereignisprotokollgruppe (Nachrichteninhalt) muss jedoch aufgeführt werden.

  • Die Ergebnisse werden angezeigt, nachdem eine Sitzung für die Konfiguration inaktiv sessionTimeoutMinutes war, und dann innerhalb von etwa 15 Minuten nach dem nächsten Bewertungszyklus.