對託管在 AgentCore 外部的代理程式執行 A/B 測試
您可以 A/B 測試在 AgentCore 執行期外執行的代理程式,並在任何地方託管代理程式,例如 AWS Lambda、Amazon EKS 或 Amazon ECS。對於 A/B 測試代理程式,AgentCore 閘道會路由變體之間的流量、每個工作階段的線上評估分數,而且服務會計算每個變體的統計重要性。當您的代理程式不在 AgentCore 執行時間上時,您需要對其進行可觀測性檢測,並自行將其註冊為 AgentCore 閘道目標,並啟用閘道追蹤,以便工作階段可以歸因於變體。
A/B 測試支援具有單一代理程式執行時間的組態套件,以及具有兩個代理程式端點的目標型路由。此頁面說明如何在啟用追蹤的 AgentCore 閘道上將 HTTP 可連線代理程式端點設定為目標。然後,AgentCore 閘道追蹤會提供變體屬性,而代理端點上的可觀測性會提供訊息內容以供評分。
此頁面是使用目標型路由執行 A/B 測試的附錄。它僅涵蓋非執行期代理程式所需的額外設定 — 使用 Lambda 託管代理程式 (函數 URL 後方) 作為範例;相同的方法適用於您註冊為 AgentCore 閘道目標的任何 HTTP 可連線代理程式端點 — 然後將您傳回該頁面以建立和執行測試。
先決條件
除了一般 A/B 測試先決條件之外,您還需要:
-
在閘道上啟用 AgentCore 閘道追蹤,讓工作階段可以歸因於變體。
-
您的代理程式已新增為使用支援通訊協定的 AgentCore 閘道上的傳遞目標。
步驟 1:檢測您的代理程式以取得 AgentCore 可觀測性
注意
請遵循在 AgentCore 外部託管的代理程式啟用可觀測性進行完整設定。
對於 Lambda 託管的代理程式,連接適用於 AWS OpenTelemetry 的 Lambda Layer
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 }"
最小 Lambda 處理常式,可剖析函數 URL 請求並設定工作階段封包:
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"
對於目標型路由,請使用您正在測試的變更來部署此項目兩次 (控制和處理),例如不同的 model_id或系統提示。
步驟 2:透過 HTTP 公開您的代理程式
代理程式必須在 AgentCore 閘道可以呼叫的 HTTP 端點上連線。針對 Lambda 範例,為每個函數建立具有 IAM 身分驗證的函數 URL:
aws lambda create-function-url-config \ --function-name cs-agent-control \ --auth-type AWS_IAM \ --region us-west-2
針對處理函數重複此步驟。(對於容器或自我託管代理程式,請改為公開 HTTPS 端點並跳至步驟 3。)
步驟 3:將您的代理程式註冊為 AgentCore 閘道目標
將每個端點註冊為 AgentCore 閘道上的 HTTP 傳遞目標。如需傳遞目標的詳細資訊,包括 protocolType、黏性和登入資料選項,請參閱 HTTP 傳遞目標。
若要將 Lambda 函數 URL 註冊為目標,protocolType請將 設定為 CUSTOM並提供 iamCredentialProvider。登入資料提供者授權閘道將每個傳出請求簽署為 lambda 服務的函數 URL:
注意
-
stickinessConfiguration告知閘道使用x-session-id標頭來識別哪些請求屬於相同的工作階段。當您開始或停止 A/B 測試時,工作階段黏性可保持傳輸中的工作階段不受影響:閘道會繼續將進行中工作階段路由至已指派的目標,並在測試執行時根據您的 A/B 測試處理權重僅路由新工作階段。 -
為了可觀察性,您的代理程式也必須在其追蹤內容中設定此相同的工作階段 ID (例如,當做
session.id空間)。這可讓線上評估分數代理程式工作階段和追蹤,並將其歸因於正確的 A/B 測試處理。
範例
對於目標型路由,請重複處理端點 (將其命名為 customer-support-treatment)。使用 輪詢每個目標,get-gateway-target直到 status為 READY。
注意
iamCredentialProvider IAM 驗證的傳遞目標需要 。對於service設定為 的 Lambda 函數 URLlambda。閘道 IAM 角色必須在每個函數的 ARN lambda:InvokeFunction上同時具有 lambda:InvokeFunctionUrl和 。
步驟 4:啟用 AgentCore 閘道追蹤
在 AgentCore 閘道上啟用追蹤交付,使其向 發出變體歸因範圍aws/spans。若要從主控台啟用追蹤,請開啟閘道詳細資訊頁面,然後選擇日誌傳遞和追蹤 → 追蹤 → 啟用。如需詳細資訊,請參閱設定追蹤交付至 CloudWatch。
一旦流量開始流動,每個閘道範圍都會攜帶 aws.agentcore.gateway.routing_experiment_arn和 aws.agentcore.gateway.routing_experiment_variant_name(例如 C或 T1) 屬性,以及請求traceId的 。線上評估管道會將閘道跨度加入 代理程式的跨度traceId,這是每個評分工作階段歸因於其變體的方式。如果沒有閘道追蹤,工作階段仍會獲得分數,但無法歸因於變體,且 A/B 測試不會產生每個變體的結果。
步驟 5:建立並執行 A/B 測試
您的代理程式現在是閘道目標發出遙測。剩下兩個步驟:
-
為每個變體端點建立一個線上評估組態。請參閱建立線上評估。對於每個組態,請使用您在 中設定的
service.name和 事件日誌群組步驟 1:檢測您的代理程式以取得 AgentCore 可觀測性。 -
建立並執行 A/B 測試。遵循使用目標型路由執行 A/B 測試,從建立 A/B 測試步驟開始 — 使用 建立測試
perVariantOnlineEvaluationConfig、傳送流量、輪詢結果、停止和部署獲勝者。
當您透過閘道傳送流量時,請將其導向至控制變體的目標。閘道會根據您的 A/B 測試組態,將到達控制目標的所有流量分割至控制目標 (C) 和處理 (T1) 目標。
範例
疑難排解
A/B 測試在傳送流量後未顯示任何結果
-
確認閘道追蹤已啟用 (步驟 4:啟用 AgentCore 閘道追蹤) — 如果沒有閘道追蹤,彙總管道就無法將工作階段歸因於變體。
-
確認每個線上評估組態的
serviceNames符合端點的 ,service.name並logGroupNames包含端點的事件日誌群組。線上評估aws/spans會自動讀取,因此您不會列出它,但必須列出事件日誌群組 (訊息內容)。 -
結果會在工作階段對設定的 閒置後出現
sessionTimeoutMinutes,然後在下一個評分週期的大約 15 分鐘內出現。