View a markdown version of this page

Memulai streaming dua arah menggunakan WebSocket - Batu Dasar Amazon AgentCore

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Memulai streaming dua arah menggunakan WebSocket

Amazon Bedrock AgentCore Runtime memungkinkan Anda menyebarkan agen yang mendukung WebSocket streaming untuk komunikasi dua arah waktu nyata. Panduan ini memandu Anda melalui pembuatan, pengujian, dan penerapan agen streaming dua arah pertama Anda menggunakan. WebSocket

Di bagian ini, Anda belajar:

  • Bagaimana AgentCore Runtime mendukung WebSocket koneksi

  • Cara membuat aplikasi agen dengan kemampuan streaming dua arah

  • Cara menguji agen Anda secara lokal

  • Cara menyebarkan agen Anda ke AWS

  • Cara memanggil agen yang Anda gunakan

  • Cara menggunakan sesi dengan WebSocket koneksi

Untuk informasi lebih lanjut tentang WebSocket protokol, lihat WebSocket RFC 64 55.

Bagaimana AgentCore Runtime mendukung WebSocket koneksi

AgentCore Dukungan Runtime memungkinkan koneksi streaming dua arah yang persisten antara klien dan agen. WebSocket AgentCore Runtime mengharapkan kontainer untuk WebSocket mengimplementasikan titik akhir 8080 pada port di /ws jalur, yang selaras dengan praktik WebSocket server standar.

AgentCore Dukungan Runtime menyediakan kemampuan tanpa server, isolasi sesi, identitas, dan pengamatan yang sama seperti. WebSocket InvokeAgentRuntime Selain itu, ini memungkinkan streaming pesan dua arah latensi rendah, real-time melalui WebSocket koneksi menggunakan otentikasi SigV4 atau OAuth 2.0, menjadikannya ideal untuk aplikasi seperti agen suara percakapan waktu nyata.

Pustaka WebSocket yang didukung

Streaming dua arah menggunakan WebSockets AgentCore Runtime mendukung aplikasi menggunakan pustaka WebSocket bahasa apa pun. Satu-satunya persyaratan adalah klien terhubung ke titik akhir layanan dengan koneksi WebSocket protokol:

wss://bedrock-agentcore.<region>.amazonaws.com/runtimes/<agentRuntimeArn>/ws

menggunakan salah satu metode otentikasi yang didukung (header SIGv4, URL pra-tanda tangan SigV4, atau OAuth 2.0) dan bahwa aplikasi agen mengimplementasikan kontrak WebSocket layanan seperti yang ditentukan dalam kontrak protokol HTTP. Kontrak protokol HTTP

Fleksibilitas ini memungkinkan Anda untuk menggunakan WebSocket implementasi pilihan Anda di berbagai bahasa pemrograman dan kerangka kerja, memastikan kompatibilitas dengan basis kode dan alur kerja pengembangan yang ada.

Menggunakan WebSocket dengan AgentCore Runtime

Dalam tutorial memulai ini Anda akan membuat, menguji, dan menerapkan aplikasi agen yang mendukung streaming dua arah menggunakan bedrock-agentcore Python SDK dan CLI untuk penerapan. AgentCore

Prasyarat

Sebelum memulai, pastikan Anda memiliki:

Langkah 1: Siapkan proyek dan instal dependensi

Buat folder proyek dan instal paket yang diperlukan:

mkdir agentcore-runtime-quickstart-websocket cd agentcore-runtime-quickstart-websocket python3 -m venv .venv source .venv/bin/activate

Tingkatkan pip ke versi terbaru:

pip install --upgrade pip

Instal paket yang diperlukan berikut:

  • bedrock-agentcore - Amazon Bedrock AgentCore SDK untuk membangun agen AI, ketergantungan perpustakaan python disertakan websockets

pip install bedrock-agentcore

Langkah 2: Buat agen streaming dua arah

Buat file sumber untuk kode agen streaming dua arah Anda bernamawebsocket_echo_agent.py. Tambahkan kode berikut:

from bedrock_agentcore import BedrockAgentCoreApp app = BedrockAgentCoreApp() @app.websocket async def websocket_handler(websocket, context): """Simple echo WebSocket handler.""" await websocket.accept() try: data = await websocket.receive_json() # Echo back await websocket.send_json({"echo": data}) except Exception as e: print(f"Error: {e}") finally: await websocket.close() if __name__ == "__main__": app.run(log_level="info")

Buat requirements.txt dan tambahkan yang berikut ini:

bedrock-agentcore

Ketergantungan websockets pustaka python disertakan

Memahami kode

  • BedrockAgentCoreApp: Membuat aplikasi agen yang memperluas Starlette untuk penyebaran agen AI, memberikan WebSocket dukungan, perutean HTTP, middleware, dan kemampuan penanganan pengecualian

  • WebSocket Dekorator: @app.websocket Dekorator secara otomatis menangani koneksi di /ws jalur pada port 8080

  • Echo Logic: Mengirim kembali data yang diterima menggunakan {"echo": data}

  • Penanganan Kes alahan: Menggunakan struktur try/except /akhirnya untuk memastikan pencatatan kesalahan yang tepat dan penutupan koneksi yang anggun.

Langkah 3: Uji agen streaming dua arah Anda secara lokal

Mulai agen streaming dua arah Anda

Buka jendela terminal dan mulai agen streaming dua arah Anda dengan perintah berikut:

python websocket_echo_agent.py

Anda akan melihat output yang menunjukkan server berjalan pada port 8080.

Uji WebSocket koneksi

Buat WebSocket klien lokal bernamawebsocket_agent_client.py:

import asyncio import websockets import json async def local_websocket(): uri = "ws://localhost:8080/ws" try: async with websockets.connect(uri) as websocket: # Send a message await websocket.send(json.dumps({"inputText": "Hello WebSocket!"})) # Receive the echo response response = await websocket.recv() print(f"Received: {response}") except Exception as e: print(f"Connection failed: {e}") if __name__ == "__main__": asyncio.run(local_websocket())

Uji agen streaming dua arah Anda secara lokal dengan membuka jendela terminal lain dan menjalankan klien:

python websocket_agent_client.py

Sukses: Anda harus melihat respons sepertiReceived: {"echo":{"inputText":"Hello WebSocket!"}}. Di jendela terminal yang menjalankan agen, masukkan Ctrl+C untuk menghentikan agen.

Langkah 4: Terapkan agen streaming dua arah Anda ke Runtime AgentCore

Instal alat penyebaran

Instal AgentCore CLI:

npm install -g @aws/agentcore

Verifikasi instalasi:

agentcore --version

Untuk perintah dan opsi yang tersedia, lihat referensi AgentCore CLI.

Buat proyek dan terapkan ke AWS

Buat proyek baru untuk agen streaming dua arah Anda:

cd .. agentcore create --project-name WebSocketProject --no-agent cd WebSocketProject agentcore add agent \ --name WebSocketAgent \ --type byo \ --language Python \ --framework Strands \ --model-provider Bedrock \ --memory none \ --protocol HTTP \ --code-location ../agentcore-runtime-quickstart-websocket \ --entrypoint websocket_echo_agent.py

Menyebarkan agen Anda:

agentcore deploy

AgentCore Proyek mereferensikan direktori agentcore-runtime-quickstart-websocket sumber yang ada.

Setelah penerapan, Anda akan menerima ARN runtime agen yang terlihat seperti:

arn:aws:bedrock-agentcore:us-west-2:accountId:runtime/websocket_echo_agent-xyz123

Simpan ARN ini karena Anda akan membutuhkannya untuk memanggil agen yang Anda gunakan.

Langkah 5: Panggil agen streaming dua arah yang Anda gunakan

Menyiapkan variabel lingkungan

Siapkan variabel lingkungan yang diperlukan:

  1. Ekspor agen Anda ARN:

    export AGENT_ARN="arn:aws:bedrock-agentcore:us-west-2:accountId:runtime/websocket_echo_agent-xyz123"
  2. Jika menggunakan OAuth, ekspor token pembawa Anda:

    export BEARER_TOKEN="your_oauth_token_here"

Metode autentikasi

T InvokeAgentRuntimeWithWebSocketStream indakan API membuat WebSocket koneksi yang mendukung streaming dua arah antara klien dan agen. Anda dapat mengotentik WebSocket asi koneksi menggunakan metode berikut:

  • AWS Header Signature Versi 4: Tanda tangani header permintaan WebSocket jabat tangan menggunakan kredensibilitas Anda AWS

  • AWS URL Tanda Tangan Versi 4: Buat Pre-signed URL yang ditandatangani sebelumnya WebSocket dengan tanda tangan SIGv4 yang disediakan sebagai parameter kueri

  • Token Pembawa OAuth: Berikan token OAuth di header Otorisasi untuk integrasi penyedia identitas eksternal

Tip

Pastikan Anda memiliki bedrock-agentcore:InvokeAgentRuntimeWithWebSocketStream izin.

Hubungkan menggunakan header yang ditandatangani SIGv4

Contoh berikut menunjukkan cara membuat WebSocket koneksi dan berkomunikasi dengan runtime agen menggunakan header yang ditandatangani SIGv4:

from bedrock_agentcore.runtime import AgentCoreRuntimeClient import websockets import asyncio import json import os async def main(): # Get runtime ARN from environment variable runtime_arn = os.getenv('AGENT_ARN') if not runtime_arn: raise ValueError("AGENT_ARN environment variable is required") # Initialize client client = AgentCoreRuntimeClient(region="us-west-2") # Generate WebSocket connection with authentication ws_url, headers = client.generate_ws_connection( runtime_arn=runtime_arn ) try: async with websockets.connect(ws_url, additional_headers=headers) as ws: # Send message await ws.send(json.dumps({"inputText": "Hello!"})) # Receive response response = await ws.recv() print(f"Received: {response}") except websockets.exceptions.InvalidStatus as e: print(f"WebSocket handshake failed with status code: {e.response.status_code}") print(f"Response headers: {e.response.headers}") print(f"Response body: {e.response.body.decode()}") except Exception as e: print(f"Connection failed: {e}") if __name__ == "__main__": asyncio.run(main())

Jalankan klien untuk menguji agen yang Anda gunakan:

python websocket_agent_client_sigv4_headers.py

Sukses: Anda akan melihat respons seperti:

Received: {"echo":{"inputText":"Hello!"}}

Hubungkan menggunakan URL yang telah ditandatangani sebelumnya (SIGv4 melalui parameter kueri)

Contoh berikut menunjukkan cara membuat WebSocket URL dengan parameter kueri SIGv4 dan membuat koneksi:

from bedrock_agentcore.runtime import AgentCoreRuntimeClient import websockets import asyncio import json import os async def main(): runtime_arn = os.getenv('AGENT_ARN') if not runtime_arn: raise ValueError("AGENT_ARN environment variable is required") client = AgentCoreRuntimeClient(region="us-west-2") # Generate WebSocket pre-signed URL (with SigV4 via query parameters) # wss://...amazonaws.com/runtimes/.../ws?X-Amz-Algorithm=AWS4-HMAC-SHA256 # &X-Amz-Credential=...&X-Amz-Date=...&X-Amz-Expires=300 # &X-Amz-SignedHeaders=...&X-Amz-Signature=... sigv4_url = client.generate_presigned_url( runtime_arn=runtime_arn, expires=300 # 5 minutes ) try: async with websockets.connect(sigv4_url) as ws: await ws.send(json.dumps({"inputText": "Hello!"})) response = await ws.recv() print(f"Received: {response}") except websockets.exceptions.InvalidStatus as e: print(f"WebSocket handshake failed with status code: {e.response.status_code}") print(f"Response headers: {e.response.headers}") print(f"Response body: {e.response.body.decode()}") except Exception as e: print(f"Connection failed: {e}") if __name__ == "__main__": asyncio.run(main())

Jalankan klien untuk menguji agen yang Anda gunakan:

python websocket_agent_client_sigv4_query_parameters.py

Sukses: Anda akan melihat respons seperti:

Received: {"echo":{"inputText":"Hello!"}}

Hubungkan menggunakan OAuth

AgentCore Runtime mendukung otentikasi token OAuth Bearer untuk koneksi. WebSocket Untuk menggunakan otentikasi OAuth, Anda perlu mengonfigurasi runtime agen Anda dengan otorisasi JWT seperti yang dijelaskan di bagian contoh otorisasi masuk JWT dan akses keluar OAuth dari Otentikasi dan otorisasi dengan Auth Masuk dan Auth Keluar.

Setelah Anda menyelesaikan pengaturan OAuth dan memperoleh token pembawa mengikuti Langkah 4: Gunakan token pembawa untuk memanggil agen Anda di panduan OAuth, Anda dapat menggunakan token itu untuk membuat koneksi. WebSocket

Klien Python dengan OAuth

Contoh berikut menunjukkan cara membuat WebSocket koneksi dari Python menggunakan OAuth:

from bedrock_agentcore.runtime import AgentCoreRuntimeClient import websockets import asyncio import json import os async def main(): # Get runtime ARN from environment variable runtime_arn = os.getenv('AGENT_ARN') if not runtime_arn: raise ValueError("AGENT_ARN environment variable is required") # Get OAuth bearer token from environment variable bearer_token = os.getenv('BEARER_TOKEN') if not bearer_token: raise ValueError("BEARER_TOKEN environment variable required for OAuth") # Initialize client client = AgentCoreRuntimeClient(region="us-west-2") # Generate WebSocket connection with OAuth ws_url, headers = client.generate_ws_connection_oauth( runtime_arn=runtime_arn, bearer_token=bearer_token ) try: async with websockets.connect(ws_url, additional_headers=headers) as ws: # Send message await ws.send(json.dumps({"inputText": "Hello!"})) # Receive response response = await ws.recv() print(f"Received: {response}") except websockets.exceptions.InvalidStatus as e: print(f"WebSocket handshake failed with status code: {e.response.status_code}") print(f"Response headers: {e.response.headers}") print(f"Response body: {e.response.body.decode()}") except Exception as e: print(f"Connection failed: {e}") if __name__ == "__main__": asyncio.run(main())

Jalankan klien untuk menguji agen yang Anda gunakan:

python websocket_agent_client_oauth.py

Sukses: Anda akan melihat respons seperti:

Received: {"echo":{"inputText":"Hello!"}}
JavaScript Klien browser dengan OAuth

WebSocket API asli browser tidak menyediakan metode untuk mengatur header khusus selama jabat tangan. Untuk mendukung otentikasi OAuth dari browser, AgentCore Runtime menerima token pembawa yang disematkan di Sec-WebSocket-Protocol header selama jabat tangan. WebSocket

Token harus dikodekan base64url dan diawali denganbase64UrlBearerAuthorization., diikuti oleh subprotokol sentinel. base64UrlBearerAuthorization

Contoh berikut menunjukkan cara membuat WebSocket koneksi dari browser JavaScript menggunakan OAuth:

<!DOCTYPE html> <html> <body> <button onclick="connect()">Connect</button> <div id="output"></div> <script> function connect() { const bearerToken = "your_oauth_token_here"; const runtimeArn = "arn:aws:bedrock-agentcore:us-west-2:accountId:runtime/agent-xyz123"; // Base64url encode token const base64url = btoa(bearerToken) .replace(/\+/g, '-') .replace(/\//g, '_') .replace(/=/g, ''); const ws = new WebSocket( `wss://bedrock-agentcore.us-west-2.amazonaws.com/runtimes/${runtimeArn}/ws`, [`base64UrlBearerAuthorization.${base64url}`, "base64UrlBearerAuthorization"] ); ws.onopen = () => ws.send(JSON.stringify({ inputText: "Hello!" })); ws.onmessage = (e) => document.getElementById("output").innerText = e.data; } </script> </body> </html>
catatan

Metode otentikasi ini untuk klien berbasis browser di mana pengaturan header khusus tidak dimungkinkan. Untuk klien non-browser (Python, Node.js server, dll.), Gunakan otentikasi header OAuth yang ditampilkan di klien Python dengan OAuth.

catatan

Subprotokol selain belum base64UrlBearerAuthorization didukung.

penting

Ini adalah contoh referensi. Tidak disarankan untuk hardcode token dalam kode produksi.

Manajemen sesi

Menye session_id di X-Amzn-Bedrock-AgentCore-Runtime-Session-Id akan () pada WebSocket koneksi (baik sebagai parameter kueri URL atau header permintaan) merutekan koneksi ke sesi runtime yang terisolasi. Agen dapat mengakses konteks percakapan yang disimpan dalam sesi tersebut, untuk menerapkan kontinuitas percakapan dengan mereferensikan interaksi sebelumnya. ID sesi yang berbeda mengakses konteks terisolasi yang terpisah, memastikan isolasi lengkap antara pengguna atau percakapan.

Untuk manajemen siklus hidup sesi yang komprehensif termasuk pelacakan, pembersihan, dan penanganan kesalahan, lihat Menggunakan sesi terisolasi untuk agen.

Menggunakan sesi dengan WebSocket koneksi

Untuk menggunakan sesi dengan WebSocket koneksi, buat ID sesi unik untuk setiap pengguna atau percakapan dan berikan saat membuat koneksi:

contoh
SigV4 Headers
  1. from bedrock_agentcore.runtime import AgentCoreRuntimeClient import websockets import asyncio import json import os async def websocket_with_session(): client = AgentCoreRuntimeClient(region="us-west-2") session_id = "user-123-conversation-456" runtime_arn = os.getenv('AGENT_ARN') ws_url, headers = client.generate_ws_connection( runtime_arn=runtime_arn, session_id=session_id ) try: async with websockets.connect(ws_url, additional_headers=headers) as ws: await ws.send(json.dumps({"inputText": "Hello!"})) response = await ws.recv() print(f"Response: {response}") except websockets.exceptions.InvalidStatus as e: print(f"WebSocket handshake failed with status code: {e.response.status_code}") print(f"Response headers: {e.response.headers}") print(f"Response body: {e.response.body.decode()}") except Exception as e: print(f"Connection failed: {e}") asyncio.run(websocket_with_session())
SigV4 Pre-signed URL
  1. from bedrock_agentcore.runtime import AgentCoreRuntimeClient import websockets import asyncio import json import os async def websocket_with_session(): client = AgentCoreRuntimeClient(region="us-west-2") session_id = "user-123-conversation-456" runtime_arn = os.getenv('AGENT_ARN') presigned_url = client.generate_presigned_url( runtime_arn=runtime_arn, session_id=session_id, expires=300 ) try: async with websockets.connect(presigned_url) as ws: await ws.send(json.dumps({"inputText": "Hello!"})) response = await ws.recv() print(f"Response: {response}") except websockets.exceptions.InvalidStatus as e: print(f"WebSocket handshake failed with status code: {e.response.status_code}") print(f"Response headers: {e.response.headers}") print(f"Response body: {e.response.body.decode()}") except Exception as e: print(f"Connection failed: {e}") asyncio.run(websocket_with_session())
OAuth
  1. from bedrock_agentcore.runtime import AgentCoreRuntimeClient import websockets import asyncio import json import os async def websocket_with_session(): client = AgentCoreRuntimeClient(region="us-west-2") session_id = "user-123-conversation-456" runtime_arn = os.getenv('AGENT_ARN') bearer_token = os.getenv('BEARER_TOKEN') ws_url, headers = client.generate_ws_connection_oauth( runtime_arn=runtime_arn, session_id=session_id, bearer_token=bearer_token ) try: async with websockets.connect(ws_url, additional_headers=headers) as ws: await ws.send(json.dumps({"inputText": "Hello!"})) response = await ws.recv() print(f"Response: {response}") except websockets.exceptions.InvalidStatus as e: print(f"WebSocket handshake failed with status code: {e.response.status_code}") print(f"Response headers: {e.response.headers}") print(f"Response body: {e.response.body.decode()}") except Exception as e: print(f"Connection failed: {e}") asyncio.run(websocket_with_session())
Tip

Untuk hasil terbaik, gunakan UUID atau pengenal unik lainnya untuk ID sesi Anda untuk menghindari tabrakan antara pengguna atau percakapan yang berbeda.

Dengan menggunakan ID sesi yang sama untuk WebSocket koneksi terkait, Anda memastikan bahwa konteks dipertahankan di percakapan yang sama, memungkinkan agen Anda memberikan respons koheren yang dibangun berdasarkan interaksi sebelumnya.

Siklus hidup sesi dengan WebSocket koneksi

Untuk WebSocket koneksi, batas waktu idle sesi diatur ulang setiap kali ada aktivitas pesan antara klien dan agen. Ini termasuk pertukaran WebSocket pesan apa pun seperti mengirim data dari klien ke agen, menerima tanggapan dari agen ke klien, atau WebSocket ping/pong bingkai. Ini berarti bahwa WebSocket percakapan aktif akan menjaga sesi tetap hidup selama pesan terus mengalir, mencegah penghentian sesi prematur selama interaksi yang sedang berlangsung.

Untuk informasi selengkapnya tentang mengonfigurasi setelan siklus hidup, lihat Meng onfigurasi pengaturan AgentCore siklus hidup Amazon Bedrock. Untuk kontrol langsung siklus hidup sesi melalui status kesehatan agen, lihat Manajemen siklus hidup sesi Runtime.

Hentikan sesi runtime

Untuk menghentikan sesi berjalan sebelum sesi yang dapat dikonfigurasi IdleRuntimeSessionTimeout (default pada 15 menit), lihat Menghentikan sesi yang sedang berjalan.

Observabilitas

Amazon Bedrock AgentCore Observability membantu Anda melacak, men-debug, dan memantau agen yang Anda host di Amazon Bedrock Runtime. AgentCore Pertama aktifkan Pencarian CloudWatch Transaksi dengan mengikuti petunjuk di Meng aktifkan pengamatan AgentCore runtime Amazon Bedrock. Untuk mengamati agen Anda, lihat Meli hat data pengamatan untuk agen Amazon Bedrock AgentCore Anda.

Untuk WebSocket koneksi, jejak mewakili sesi koneksi lengkap, bukan pertukaran pesan individual.

Header Kustom

Header khusus memungkinkan Anda meneruskan informasi kontekstual dari aplikasi Anda langsung ke kode agen Anda pada WebSocket koneksi awal. Untuk informasi lengkap tentang dukungan, konfigurasi, dan batasan header kustom, lihat Mener uskan header khusus ke Amazon Bedrock AgentCore Runtime.

Selain itu, header yang diawali dengan X-Amzn-Bedrock-AgentCore-Runtime-Custom- dapat diteruskan sebagai parameter kueri URL dalam WebSocket koneksi.

Misalnya, Anda dapat meneruskan header kustom sebagai parameter kueri di WebSocket URL:

wss://bedrock-agentcore.<region>.amazonaws.com/runtimes/<agentRuntimeArn>/ws?X-Amzn-Bedrock-AgentCore-Runtime-Custom-TestHeader=query-param-test-value

Wadah aplikasi agen akan menerima ini sebagai header:

"headers": { "x-amzn-bedrock-agentcore-runtime-custom-testheader": "query-param-test-value" }

Lampiran

Pertimbangan keamanan

Tip

Untuk tampilan gabungan dari semua rekomendasi keamanan Runtime, lihat Prakti k terbaik keamanan untuk AgentCore Runtime.

Autentikasi

Semua WebSocket koneksi memerlukan AWS otentikasi yang tepat melalui SigV4 atau OAuth 2.0

Isolasi Sesi

Setiap sesi berjalan di lingkungan eksekusi terisolasi dengan sumber daya khusus

Keamanan Transportasi

Semua koneksi menggunakan WSS (WebSocket Secure) melalui HTTPS untuk komunikasi terenkripsi

Kontrol Akses

Kebijakan IAM mengontrol izin WebSocket koneksi dan akses ke agen tertentu

Pemecahan masalah

WebSocket-specific Masalah umum

Berikut ini adalah masalah umum yang mungkin Anda temui:

Kegagalan koneksi

Verifikasi bahwa aplikasi agen Anda memproses permintaan koneksi di /ws

Metode otentikasi ketidakcocokan

Pastikan klien Anda menggunakan metode otentikasi yang sama (OAuth atau SigV4) yang dikonfigurasi dengan agen

Koneksi ditutup karena batas terlampaui

Koneksi ditutup secara otomatis jika batas terlampaui, seperti kecepatan bingkai pesan atau batas ukuran bingkai pesan. Untuk informasi batas lengkap, lihat Ku ota untuk Amazon Bedrock AgentCore

Ukuran bingkai pesan terlampaui

Konfigurasikan fragmentasi bingkai pesan atau terapkan chunking agar tetap di bawah batas ukuran bingkai 32KB. Pisahkan pesan besar menjadi potongan-potongan kecil sebelum mengirim

Kegagalan pemeriksaan kesehatan

Pastikan wadah agen Anda mengimplementasikan /ping titik akhir seperti yang ditentukan dalam kontrak protokol HTTP. Titik akhir ini memverifikasi bahwa agen Anda beroperasi dan siap menangani permintaan, memungkinkan pemantauan layanan dan pemulihan otomatis

Penanganan kesalahan

WebSocket kesalahan muncul dalam dua fase, tergantung kapan mereka terjadi.

Pembentukan koneksi (sebelum WebSocket peningkatan)

Membuka koneksi adalah permintaan HTTP standar. Kode status HTTP mencerminkan pengecualian, dan header x-amzn-ErrorType respons membawa nama pengecualian. Layanan dapat mengembalikan salah satu kesalahan berikut sebelum membuat WebSocket koneksi.

Kode Kesalahan HTTP Pengecualian Runtime (x-amzn-ErrorType) Deskripsi

400

ValidationException

Data atau parameter permintaan tidak valid

401

UnauthorizedException

Diperlukan otentikasi atau kredentif tidak valid (OAuth-configured agen)

402

ServiceQuotaExceededException

Permintaan akan melebihi kuota layanan

403

AccessDeniedException

Izin tidak mencukupi untuk operasi yang diminta

404

ResourceNotFoundException

Sumber daya yang diminta tidak ada

409

ConflictException

Konflik sumber daya - Sumber daya sudah ada

409

RetryableConflictException

Operasi sesi sedang berlangsung, silakan coba lagi

424

RuntimeClientError

Wadah agen Anda mengembalikan kesalahan 4xx atau 5xx - periksa log Anda CloudWatch

429

ThrottlingException

Terlalu banyak permintaan - batas tarif permintaan terlampaui

500

InternalServerException

Terjadi kesalahan tak terduga saat memproses permintaan

catatan

Layanan kembali RetryableConflictException (HTTP 409,Session operation in progress, please retry) ketika Anda membuka WebSocket koneksi ke sesi yang disediakan atau dihancurkan layanan. Kondisi ini bersifat sementara dan dapat dicoba kembali. Coba lagi dengan mundur eksponensial pendek. Ini berlaku untuk panggilan bersamaan yang menargetkan sesi yang sama. Already-running sesi tidak terpengaruh.

Koneksi aktif (setelah WebSocket upgrade)

Setelah ditetapkan, kesalahan dikomunikasikan dengan kode WebSocket tutup standar daripada kode status HTTP. WebSocket Kode penutupan umum meliputi:

  • 1000- Penutupan normal

  • 1001- Pergi

  • 1008- Kebijakan dilanggar (batas terlampaui)

  • 1009- Pesan terlalu besar (batas ukuran bingkai pesan terlampaui)

  • 1011- Kesalahan server

WebSocket vs protokol lainnya

Kapan menggunakan WebSocket:

  • Real-time percakapan suara dengan streaming audio langsung untuk aliran percakapan alami

  • Aliran data audio/text dua arah/biner (streaming potongan data dari klien ke agen dan sebaliknya)

  • Penanganan interupsi (pengguna dapat mengganggu agen di tengah percakapan)

Kapan menggunakan HTTP:

  • HTTP untuk pola respons permintaan tanpa kebutuhan streaming dua arah

Contoh memulai tambahan

Untuk contoh tambahan menggunakan streaming WebSocket dua arah dengan AgentCore Runtime, lihat contoh streaming WebSocket dua arah: GitHub

  • Implementasi Sonic (Python): WebSocket Implementasi asli Amazon Nova Sonic dengan percakapan audio real-time, pemilihan suara, dan dukungan interupsi

  • Implementasi Strands (Python): Framework-based implementasi menggunakan Str BidiAgent ands untuk percakapan audio real-time yang disederhanakan dengan manajemen sesi otomatis dan integrasi alat

  • Implementasi Echo (Python): Server echo sederhana untuk menguji WebSocket konektivitas dan otentikasi