Jalankan A/B pengujian dengan perutean berbasis target
Gunakan pola routing berbasis target ketika perubahan yang Anda uji melibatkan perubahan kode, upgrade kerangka kerja, atau implementasi agen yang sama sekali berbeda. Target-based routing merutekan lalu lintas antara beberapa versi AgentCore Runtime yang sama (bernama endpoint), atau antara Runtime yang sama sekali berbeda. AgentCore AgentCore Gateway mendaftarkan setiap titik akhir sebagai target terpisah dan merutekan setiap sesi ke satu titik akhir atau yang lain berdasarkan bobot lalu lintas A/B pengujian.
Konfigurasi kunci untuk A/B pengujian berbasis target:
-
Konfigurasi varian:
variantConfiguration.targetdengan nama target AgentCore Gateway -
Konfigurasi evaluasi:
perVariantOnlineEvaluationConfig(satu konfigurasi evaluasi online per varian, karena setiap titik akhir memiliki grup lognya sendiri) -
Filter gateway:
gatewayFilter.targetPathscakupan AgentCore Gateway mana yang dilalui oleh A/B tes yang dicegat
Panduan ini menyebarkan dua versi agen dukungan pelanggan - satu menggunakan Claude Sonnet (kontrol) dan satu menggunakan Claude Opus (perawatan) - membuat titik akhir bernama untuk setiap versi, membuat A/B tes, mengirim lalu lintas, meninjau hasil, dan menyebarkan pemenang.
catatan
Panduan ini untuk agen yang dihosting di Runtime. AgentCore Jika agen Anda berjalan di luar AgentCore Runtime (agen pihak ketiga atau yang dihosting sendiri — misalnya di AWS Lambda), lihat Menjalankan A/B pengujian untuk agen yang dihosting di luar. AgentCore
Untuk perbandingan rinci pola A/B pengujian, lihat Memilih pola.
Langkah 1: Buat proyek
Buat proyek dengan AgentCore CLI:
agentcore create --name ABTestTargetBased --no-agent cd ABTestTargetBased
Langkah 2: Tambahkan runtime
Tambahkan runtime agen. Anda akan menerapkan dua versi runtime ini — satu untuk kontrol dan satu untuk perawatan — lalu membuat titik akhir bernama ke alias setiap versi.
agentcore add agent \ --name csAgent \ --language Python \ --framework Strands \ --model-provider Bedrock \ --memory none \ --build CodeZip
Struktur proyek:
ABTestTargetBased/
├── agentcore/
│ ├── agentcore.json
│ ├── aws-targets.json
│ └── cdk/
└── app/
└── csAgent/
├── main.py
└── pyproject.toml
Langkah 3: Menyebarkan versi kontrol dan perawatan
Ganti app/csAgent/main.py dengan versi kontrol (menggunakan Claude Sonnet):
"""Customer support agent — control variant.""" from strands import Agent, tool from strands.models.bedrock import BedrockModel from bedrock_agentcore.runtime import BedrockAgentCoreApp app = BedrockAgentCoreApp() MODEL_ID = "global.anthropic.claude-sonnet-4-5-20250929-v1:0" SYSTEM_PROMPT = "You are a helpful customer support assistant for Acme Store." @tool def lookup_order(order_id: str) -> str: """Look up an order by ID.""" orders = { "ORD-1001": {"status": "delivered", "item": "Blue T-Shirt", "total": "$29.99"}, "ORD-1002": {"status": "in_transit", "item": "Running Shoes", "est_delivery": "2026-04-05"}, "ORD-1003": {"status": "delayed", "item": "Wireless Headphones", "days_late": 5}, } return str(orders.get(order_id, {"error": f"Order {order_id} not found"})) @tool def initiate_return(order_id: str, reason: str) -> str: """Initiate a return for an order.""" return f"Return initiated for {order_id}. Reason: {reason}. Return label sent to customer email." @tool def apply_discount(order_id: str, discount_percent: int, reason: str) -> str: """Apply a discount to an order.""" return f"Applied {discount_percent}% discount to {order_id}. Reason: {reason}." agent = Agent( model=BedrockModel(model_id=MODEL_ID), tools=[lookup_order, initiate_return, apply_discount], system_prompt=SYSTEM_PROMPT, ) @app.entrypoint def invoke(payload, context): result = agent(payload.get("prompt", "Hello")) return {"response": result.message["content"][0]["text"]} if __name__ == "__main__": app.run()
Perbarui app/csAgent/pyproject.toml dependensi:
dependencies = [ "aws-opentelemetry-distro", "bedrock-agentcore >= 1.8.0", "boto3", "botocore[crt] >= 1.35.0", "strands-agents[otel] >= 1.13.0", "opentelemetry-distro", "opentelemetry-instrumentation", ]
Terapkan versi kontrol (ini membuat versi 1):
agentcore deploy
Sekarang perbarui main.py untuk menggunakan model yang berbeda untuk varian perawatan dan terapkan (ini membuat versi 2):
MODEL_ID = "global.anthropic.claude-opus-4-6-v1"
agentcore deploy
Buat titik akhir bernama untuk setiap versi dan terapkan:
agentcore add runtime-endpoint \ --runtime csAgent \ --endpoint control \ --version 1 \ --description "Control variant — Claude Sonnet" agentcore add runtime-endpoint \ --runtime csAgent \ --endpoint treatment \ --version 2 \ --description "Treatment variant — Claude Opus" agentcore deploy
Anda sekarang memiliki:
-
Runtime endpoint
control— melayani versi 1 dengan Claude Sonnet. -
Runtime endpoint
treatment— melayani versi 2 dengan Claude Opus.
Verifikasi bahwa runtime berfungsi:
agentcore invoke --runtime csAgent --prompt "What is the status of order ORD-1003?"
Anda sekarang memiliki:
-
Runtime endpoint
control— melayani versi 1 dengan Claude Sonnet. -
Runtime endpoint
treatment— melayani versi 2 dengan Claude Opus.
Langkah 4: Buat konfigurasi evaluasi online
Setiap titik akhir memiliki grup lognya sendiri (nama grup log diakhiri dengan nama titik akhir), jadi Anda memerlukan satu konfigurasi evaluasi online per varian:
agentcore add online-eval \ --name controlEvalTb \ --runtime csAgent \ --endpoint control \ --evaluator "Builtin.Helpfulness" \ --sampling-rate 100.0 \ --enable-on-create agentcore add online-eval \ --name treatmentEvalTb \ --runtime csAgent \ --endpoint treatment \ --evaluator "Builtin.Helpfulness" \ --sampling-rate 100.0 \ --enable-on-create agentcore deploy
Setelah setiap penerapan, perhatikan konfigurasi evaluasi online ARN — Anda akan memerlukan keduanya saat membuat pengujian. A/B
Untuk detail selengkapnya tentang opsi dan konfigurasi evaluator, lihat Membuat evaluasi online.
Langkah 5: Buat gateway dan target
A/B Pengujian berbasis target merutekan lalu lintas melalui AgentCore Gateway, jadi gateway dan dua targetnya harus sudah digunakan sebelum Anda memulai pengujian. Tambahkan gateway dan daftarkan setiap titik akhir runtime sebagai http-runtime target, lalu terapkan:
agentcore add gateway --name csGateway agentcore add gateway-target \ --name customer-support-control \ --gateway csGateway \ --type http-runtime \ --runtime csAgent \ --runtime-endpoint control agentcore add gateway-target \ --name customer-support-treatment \ --gateway csGateway \ --type http-runtime \ --runtime csAgent \ --runtime-endpoint treatment agentcore deploy
Langkah 6: Buat A/B tes
Mulai A/B tes denganagentcore run ab-test. Setiap varian mereferensikan salah satu target gateway yang Anda buat dan memiliki konfigurasi evaluasi online-nya sendiri. Perintah memulai pengujian langsung pada layanan terhadap gateway yang sudah digunakan.
contoh
Langkah 7: Kirim lalu lintas melalui AgentCore Gateway
Setelah A/B pengujian berjalan, kirim lalu lintas melalui titik akhir HTTP AgentCore Gateway. AgentCore Gateway menetapkan setiap permintaan ke varian (kontrol atau perlakuan) berdasarkan ID sesi runtime.
Cara kerja penugasan varian
AgentCore Gateway menggunakan X-Amzn-Bedrock-AgentCore-Runtime-Session-Id header untuk menentukan target mana yang akan mengarahkan lalu lintas ke. Header ini opsional — jika Anda tidak menyediakannya, runtime akan menghasilkan ID sesi secara otomatis. AgentCore Gateway kemudian menggunakan ID sesi (apakah Anda menyediakannya atau runtime yang dihasilkannya) untuk menetapkan permintaan ke varian berdasarkan bobot lalu lintas yang dikonfigurasi.
Penugasan sesi bersifat lengket: setelah ID sesi ditetapkan ke varian, semua permintaan berikutnya dengan ID sesi yang sama merutekan ke target yang sama. Ini memastikan pengalaman yang konsisten dalam sesi sambil tetap mendistribusikan sesi baru di seluruh varian sesuai dengan pembagian lalu lintas Anda.
Menghasilkan lalu lintas untuk pengujian
Simpan skrip berikut sebagailoadgen.sh, ganti <gateway-id> dan <target-name> dengan nilai dari output penyebaran Anda. Anda juga dapat menyalin URL pemanggilan lengkap dari: agentcore view ab-test <ab-test-id>
#!/bin/bash export AWS_ACCESS_KEY_ID=$(aws configure get aws_access_key_id) export AWS_SECRET_ACCESS_KEY=$(aws configure get aws_secret_access_key) export AWS_SESSION_TOKEN=$(aws configure get aws_session_token) GATEWAY_URL="https://<gateway-id>.gateway.bedrock-agentcore.us-west-2.amazonaws.com/<target-name>/invocations" PROMPTS=( "What is the status of order ORD-1003?" "I want to return order ORD-1001, it doesn't fit." "My order ORD-1003 is late. Can I get a discount?" "Where is my order ORD-1002?" "I need help with a return for order ORD-1001. The color is wrong." "Can you check on order ORD-1003? I've been waiting forever." "I'd like to cancel order ORD-1002 if it hasn't shipped yet." "Order ORD-1003 is delayed again. This is unacceptable." "What's your return policy for order ORD-1001?" "My headphones order ORD-1003 still hasn't arrived. What can you do?" ) for i in $(seq 1 30); do PROMPT="${PROMPTS[$(( (i - 1) % ${#PROMPTS[@]} ))]}" echo "=== Request $i: $PROMPT ===" curl -s --aws-sigv4 "aws:amz:us-west-2:bedrock-agentcore" \ --user "$AWS_ACCESS_KEY_ID:$AWS_SECRET_ACCESS_KEY" \ -H "x-amz-security-token: $AWS_SESSION_TOKEN" \ -H "Content-Type: application/json" \ -H "X-Amzn-Bedrock-AgentCore-Runtime-Session-Id: $(uuidgen)" \ -d "{\"prompt\": \"$PROMPT\"}" \ -X POST \ "$GATEWAY_URL" echo "" sleep 2 done
Jalankan skrip .
bash loadgen.sh
Langkah 8: Dapatkan hasil
Jajak pendapat A/B tes untuk memantau hasil saat ukuran sampel bertambah. Polling tidak mempengaruhi validitas statistik.
contoh
catatan
Waktu yang diperlukan agar hasil muncul tergantung terutama pada batas waktu sesi yang dikonfigurasi dalam konfigurasi evaluasi online Anda. Sesi dianggap selesai setelah tidak ada permintaan baru yang tiba dalam jendela batas waktu. Setelah sesi berakhir, hasil biasanya muncul dalam 15 menit. Hasil terakumulasi karena lebih banyak sesi selesai — signifikansi statistik meningkat dengan ukuran sampel.
Menafsirkan hasil
-
P-nilai < 0,05 dan positif
percentChange: Perawatan secara signifikan lebih baik daripada kontrol. Pertimbangkan untuk menerapkan perawatan. -
nilai-p < 0,05 dan negatif
percentChange: Perawatannya jauh lebih buruk. Jaga kontrolnya. -
P-value >= 0.05: Tidak cukup bukti untuk menyimpulkan perbedaan. Lanjutkan mengumpulkan sampel atau meningkatkan lalu lintas ke perawatan.
-
Periksa semua evaluator: Perawatan dapat meningkatkan satu metrik sementara regresi yang lain. Tinjau semua hasil evaluator sebelum memutuskan.
Langkah 9: Konfirmasikan hasil dan hentikan A/B tes
Setelah A/B tes mencapai signifikansi statistik, tinjau hasilnya dan hentikan percobaan.
-
Konfirmasikan signifikansi. Verifikasi bahwa evaluator target memiliki
isSignificant: truedan positifpercentChangepada varian pengobatan (atau konfirmasikan kontrol adalah pemenang jika pengobatan mengalami kemunduran). -
Hentikan A/B tes. Jalankan
agentcore stop ab-test -i <ab-test-id>. Perutean lalu lintas segera berakhir dan semua permintaan kembali ke target default. Lihat Lihat, jeda, lanjutkan, dan hentikan.
Langkah 10: Menyebarkan pemenang
Setelah menghentikan A/B tes, rute semua lalu lintas ke varian pemenang.
agentcore promote ab-test -i <ab-test-id> agentcore deploy
promotemenghentikan A/B pengujian (jika masih berjalan), memperbarui titik akhir kontrol untuk menunjuk ke versi perawatan (misalnya, memperbarui control dari versi 1 ke versi 2), dan menghapus titik akhir perawatan. Jalankan agentcore deploy untuk menerapkan perubahan.
Atau, Anda dapat menyebarkan pemenang secara manual dengan melakukan salah satu hal berikut:
-
Opsi A: Gunakan aturan perutean AgentCore Gateway untuk mengarahkan lalu lintas dari kedua target ke target pemenang.
-
Opsi B: Hapus target yang hilang dari AgentCore Gateway dan rute semua lalu lintas ke pemenang.
-
Opsi C: Perbarui target yang kalah untuk menunjuk ke titik akhir yang menang.
Langkah selanjutnya
Setelah menyebarkan pemenang:
-
Hapus A/B tes untuk membersihkan sumber daya. Lihat Menghapus A/B tes.
-
Pantau baseline baru. Evaluasi online melanjutkan sesi penilaian pada konfigurasi pemenang. Perhatikan regresi.
-
Mulai iterasi berikutnya. Jejak baru dari konfigurasi pemenang memberikan dasar untuk siklus rekomendasi berikutnya. Lihat Cara Kerjanya.
Memahami hasil
Saat Anda meneleponGetABTest, respons menyertakan results objek setelah pipeline agregasi telah memproses sesi yang cukup. Hasilnya berisi metrik per-evaluator yang dipecah berdasarkan varian.
Struktur hasil
{ "results": { "analysisTimestamp": "2026-04-30T18:45:00Z", "evaluatorMetrics": [ { "evaluatorArn": "arn:aws:bedrock-agentcore:us-west-2:123456789012:evaluator/Builtin.Helpfulness", "controlStats": { "variantName": "C", "sampleSize": 24, "mean": 0.72 }, "variantResults": [ { "variantName": "T1", "sampleSize": 6, "mean": 0.85, "absoluteChange": 0.13, "percentChange": 18.1, "pValue": 0.032, "confidenceInterval": { "lower": 0.02, "upper": 0.24 }, "isSignificant": true } ] } ] } }
Referensi bidang
| Bidang | Deskripsi |
|---|---|
|
|
Ketika layanan terakhir dihitung statistik. |
|
|
Satu entri per evaluator dalam konfigurasi evaluasi online. |
|
|
Skor evaluator rata-rata di semua sesi kontrol. |
|
|
Jumlah sesi skor untuk varian kontrol. |
|
|
Skor evaluator rata-rata di semua sesi perawatan. |
|
|
Jumlah sesi yang dinilai untuk varian pengobatan. |
|
|
Perbedaan antara rata-rata pengobatan dan rata-rata kontrol. |
|
|
Persentase peningkatan (positif) atau regresi (negatif) relatif terhadap kontrol. |
|
|
Probabilitas perbedaan yang diamati adalah karena kebetulan. Di bawah 0,05 menunjukkan signifikansi statistik. |
|
|
Interval kepercayaan 95% untuk perubahan absolut ( |
|
|
|
Pemecahan masalah
A/B tes tidak menunjukkan hasil setelah mengirim lalu lintas
Hasil tidak segera muncul. Waktu yang dibutuhkan tergantung pada batas waktu sesi yang dikonfigurasi dalam konfigurasi evaluasi online Anda — sesi dianggap selesai hanya setelah tidak ada permintaan baru yang tiba dalam jendela batas waktu. Setelah sesi berakhir, harapkan hasil dalam waktu sekitar 15 menit.
Jika hasil masih tidak muncul setelah jendela ini:
-
Verifikasi grup log eval online. Konfigurasi evaluasi online harus mengarah ke grup log keluaran agen runtime. Jika konfigurasi eval online mereferensikan grup log yang berbeda (atau yang tidak menerima rentang dari runtime Anda), sesi tidak akan dinilai dan A/B tes tidak akan pernah membuahkan hasil.
-
Periksa nama grup log. Untuk perutean berbasis target, setiap titik akhir memiliki grup lognya sendiri (nama grup log diakhiri dengan nama titik akhir). Pastikan setiap konfigurasi eval online mereferensikan grup log titik akhir yang benar.
-
Konfirmasikan bahwa runtime memancarkan rentang. Periksa CloudWatch Log untuk grup log yang diharapkan. Atribut kunci yang Anda cari pada setiap rentang:
-
aws.agentcore.gateway.routing_experiment_arn -
aws.agentcore.gateway.routing_experiment_variant_name(nilai:CatauT1) -
session.id
-
-
Verifikasi CLI-created vs konfigurasi manual. Jika Anda menggunakan
agentcore add online-eval --runtime <name>, CLI secara otomatis mengkonfigurasi grup log yang benar. Jika Anda membuat konfigurasi eval online secara manual melalui API, pastikan AgentCore Online EvaldataSourceConfig.cloudWatchLogs.logGroupNamesConfig cocok dengan grup log rentang waktu proses Anda.