HTTP-Protokollvertrag
Machen Sie sich mit den Anforderungen für die Implementierung des HTTP-Protokolls in Ihrer Agentenanwendung vertraut. Verwenden Sie das HTTP-Protokoll, um direkte REST-API-Endpunkte für herkömmliche request/response Muster und WebSocket Endpunkte für bidirektionale Streaming-Verbindungen in Echtzeit zu erstellen.
Anmerkung
Sowohl HTTP (/invocations) als auch WebSocket (/ws) -Endpunkte können über Port 8080 auf demselben Container bereitgestellt werden, sodass eine Implementierung mit einem einzigen Agenten sowohl traditionelle API-Interaktionen als auch bidirektionales Streaming in Echtzeit unterstützt.
Beispielcode finden Sie unter Erste Schritte mit der AgentCore CLI.
Anforderungen an Container
Ihr Agent muss als containerisierte Anwendung bereitgestellt werden, die die folgenden Spezifikationen erfüllt:
-
Gastgeber:
0.0.0.0 -
Port:
8080- Standardport für die HTTP-based Agentenkommunikation -
Plattform: ARM64-Container — Aus Gründen der Kompatibilität mit der AgentCore Runtime-Umgebung erforderlich
Pfadanforderungen
/invocations — POST
Dies ist der primäre Endpunkt für Agenteninteraktionen mit JSON-Eingabe und -Ausgabe. JSON/SSE
Zweck
Empfängt eingehende Anfragen von Benutzern oder Anwendungen und verarbeitet sie mithilfe der Geschäftslogik Ihres Agenten
Anwendungsfälle
Der /invocations Endpunkt dient mehreren wichtigen Zwecken:
-
Direkte Benutzerinteraktionen und Konversationen
-
API-Integrationen mit externen Systemen
-
Stapelverarbeitung mehrerer Anfragen
-
Real-time Streaming-Antworten für lang andauernde Operationen
Beispiel für ein Anforderungsformat
Content-Type: application/json { "prompt": "What's the weather today?" }
Antwortformate
Ihr Agent kann je nach Anwendungsfall mit einem der folgenden Formate antworten:
JSON-Antwort (kein Streaming)
Zweck
Bietet vollständige Antworten auf Anfragen, die schnell bearbeitet werden können
Anwendungsfälle
JSON-Antworten sind ideal für:
-
Einfache Szenarien zur Beantwortung von Fragen
-
Deterministische Berechnungen
-
Schnelle Datensuche
-
Statusbestätigungen
Beispiel für ein JSON-Antwortformat
Content-Type: application/json { "response": "Your agent's response here", "status": "success" }
SSE-Antwort (Streaming)
Server-sent Mit Events (SSE) können Sie Streaming-Antworten in Echtzeit bereitstellen. Weitere Informationen finden Sie in der Server-sent Ereignisspezifikation
Zweck
Ermöglicht die inkrementelle Bereitstellung von Antworten bei lang andauernden Vorgängen und verbessert die Benutzererfahrung
Anwendungsfälle
SSE-Antworten sind ideal für:
-
Real-time Konversationserlebnisse
-
Progressive Generierung von Inhalten
-
Long-running Berechnungen mit Zwischenergebnissen
-
Live-Datenfeeds und Updates
Beispiel für ein SSE-Antwortformat
Content-Type: text/event-stream data: {"event": "partial response 1"} data: {"event": "partial response 2"} data: {"event": "final response"}
/ws — WebSocket (optional)
Dies ist der primäre WebSocket Verbindungsendpunkt für bidirektionale Echtzeitkommunikation.
Zweck
Akzeptiert WebSocket Upgrade-Anfragen und unterhält persistente Verbindungen für Streaming-Agent-Interaktionen
Anwendungsfälle
Der /ws Endpunkt dient mehreren wichtigen Zwecken:
-
Real-time Benutzeroberflächen für Konversationen
-
Interaktive Agentensitzungen mit sofortigem Feedback
-
Streaming-Datenverarbeitung mit bidirektionaler Kommunikation
Verbindungsaufbau
WebSocket Verbindungen beginnen mit einer HTTP-Upgrade-Anfrage:
Beispiel für eine HTTP-Upgrade-Anfrage
GET /ws HTTP/1.1 Host: agent-endpoint Connection: Upgrade Upgrade: websocket Sec-WebSocket-Version: 13 Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== X-Amzn-Bedrock-AgentCore-Runtime-Session-Id: session-uuid
Beispiel für eine WebSocket Upgrade-Antwort
HTTP/1.1 101 Switching Protocols Connection: Upgrade Upgrade: websocket Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Anforderungen an die Nachrichtenverarbeitung
Ihr WebSocket Endpunkt muss Folgendes verarbeiten:
-
Annahme der Verbindung: Rufen Sie an
await websocket.accept(), um die Verbindung herzustellen -
Nachrichtenempfang: Support Text- oder Binärnachrichtentypen je nach Ihren Anwendungsanforderungen
-
Nachrichtenverarbeitung: Behandeln Sie eingehende Nachrichten gemäß der Geschäftslogik Ihres Agenten
-
Senden von Antworten: Senden Sie entsprechende Antworten mit
send_text()odersend_bytes() -
Verbindungslebenszyklus: Verwalten Sie den Verbindungsaufbau, die Wartung und die Beendigung
Nachrichtenformate
Textnachrichten
JSON-Format (empfohlen)
Zweck
Strukturierter Datenaustausch für Agenteninteraktionen
Beispiel für eine Nachricht
{ "prompt": "Hello, can you help me with this question?", "session_id": "session-uuid", "message_type": "user_message" }
Beispielantwort
{ "response": "I'd be happy to help you with your question!", "session_id": "session-uuid", "message_type": "agent_response" }
Nur-Text-Format
Zweck
Einfache textbasierte Kommunikation
Beispiel
Hello, can you help me with this question?
Binäre Nachrichten
Zweck
Support für Nicht-Textdaten wie Bilder, Audio oder andere Binärformate
Anwendungsfälle
Binäre Nachrichten unterstützen mehrere Szenarien:
-
Multi-modal Interaktionen mit Agenten
-
Uploads und Downloads von Dateien
-
Komprimierte Datenübertragung
-
Binäre Protokolldaten
Anforderungen an den Umgang
Für die Verarbeitung binärer Nachrichten ist Folgendes erforderlich:
-
Verwendung
receive_bytes()undsend_bytes()Methoden -
Implementieren Sie eine geeignete binäre Datenverarbeitung
-
Beachten Sie die Beschränkungen der Nachrichtengröße
Lebenszyklus einer Verbindung
Verbindungsaufbau
-
HTTP-Handshake: Der Client sendet eine WebSocket Upgrade-Anfrage
-
Upgrade-Antwort: Der Agent akzeptiert 101 Switching-Protokolle und gibt sie zurück
-
WebSocket Aktiv: Die bidirektionale Kommunikation beginnt
-
Sitzungsbindung: Verknüpfen Sie die Verbindung mit der Sitzungs-ID
Austausch von Nachrichten
-
Kontinuierliche Schleife: Implementieren Sie eine Nachrichtenabhörschleife
-
Nachrichtenverarbeitung: Behandeln Sie eingehende Nachrichten asynchron
-
Generierung von Antworten: Senden Sie entsprechende Antworten
-
Fehlerbehandlung: Ausnahmen und Verbindungsprobleme verwalten
/ping — GET
Zweck
Überprüft, ob Ihr Agent betriebsbereit und bereit ist, Anfragen zu bearbeiten
Anwendungsfälle
Der /ping Endpunkt dient mehreren wichtigen Zwecken:
-
Serviceüberwachung zur Erkennung und Behebung von Problemen
-
Automatisierte Wiederherstellung über die AWS verwaltete Infrastruktur
Format der Antwort
Gibt einen Statuscode zurück, der den Zustand Ihres Agenten angibt:
-
Content-Type :
application/json -
HTTP-Statuscode:
200für fehlerfreie Zustände, entsprechende Fehlercodes für fehlerhafte Zustände
Wenn Ihr Agent Hintergrundaufgaben bearbeiten muss, können Sie dies mit dem /ping Status angeben. Wenn der Ping-Status lautetHealthyBusy, wird die Runtime-Sitzung als aktiv betrachtet.
Beispiel für ein Ping-Antwortformat
{ "status": "<status_value>" }
- Status (erforderlich)
-
Healthy- Das System ist bereit, neue Arbeiten anzunehmenHealthyBusy- Das System ist betriebsbereit, aber derzeit mit asynchronen Aufgaben beschäftigt. Solange der Status lautetHealthyBusy, wird die Runtime-Sitzung als aktiv betrachtet und aktiv gehalten. - time_of_last_update (optional)
-
Unix-Zeitstempel (in Sekunden), wann die letzte Änderung vorgenommen wurde.
statusStellen Sie ihn nur bei einer tatsächlichen Statusänderung ein.Warnung
Stellen Sie nicht
time_of_last_updatebei jedem Ping die aktuelle Uhrzeit ein. Ein Zeitstempel, der bei jedem Ping weitergeht, signalisiert eine kontinuierliche Statusänderung, wodurch verhindert wird, dass das Timeout für inaktive Sitzungen jemals ausgelöst wird. Die Sitzungen dauern dann an, bis Ihr Sitzungskontingent ausgeschöpft istMaxLifetimeund diese möglicherweise aufgebraucht sind. Wenn Sie das Feld weglassen, verfolgt die Plattform die Statusänderungen selbstständig. Wenn Sie das Bedrock AgentCore SDK verwenden, wird die Ping-Antwort für Sie abgewickelt.
Antworten zur OAuth-Authentifizierung
OAuth-configured Agenten folgen den Authentifizierungsstandards RFC 6749 (OAuth 2.0)
401 Nicht autorisiert
Wird zurückgegeben, wenn der Authorization-Header fehlt.
Beinhaltet den WWW-Authenticate Header:
WWW-Authenticate: Bearer resource_metadata="https://bedrock-agentcore.{region}.amazonaws.com/runtimes/{ESCAPED_ARN}/invocations/.well-known/oauth-protected-resource?qualifier={QUALIFIER}"
Anmerkung
SigV4-configured Agenten geben HTTP 403 mit einem ACCESS_DENIED Fehler zurück und schließen keine WWW-Authenticate Header ein.