View a markdown version of this page

Contrat de protocole HTTP - Base rocheuse de l'Amazonie AgentCore

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Contrat de protocole HTTP

Comprenez les exigences relatives à la mise en œuvre du protocole HTTP dans votre application d'agent. Utilisez le protocole HTTP pour créer des points de terminaison d'API REST directs pour les request/response modèles traditionnels et des points de WebSocket terminaison pour les connexions de streaming bidirectionnelles en temps réel.

Note

Les points de terminaison HTTP (/invocations) et WebSocket (/ws) peuvent être déployés sur le même conteneur à l'aide du port 8080, ce qui permet la mise en œuvre d'un seul agent pour prendre en charge à la fois les interactions API traditionnelles et le streaming bidirectionnel en temps réel.

Pour un exemple de code, voir Commencer à utiliser la AgentCore CLI.

Exigences relatives aux conteneurs

Votre agent doit être déployé en tant qu'application conteneurisée répondant aux spécifications suivantes :

  • Hôte  : 0.0.0.0

  • Port  : 8080 - Port standard pour la communication HTTP-based entre agents

  • Plateforme  : conteneur ARM64 - Nécessaire pour des raisons de compatibilité avec l' AgentCore environnement Runtime

Exigences relatives au chemin

/invocations - POST

Il s'agit du point de terminaison principal de l'interaction des agents avec entrée et JSON/SSE sortie JSON.

Objectif

Reçoit les demandes entrantes des utilisateurs ou des applications et les traite selon la logique métier de votre agent

Cas d’utilisation

Le /invocations point de terminaison répond à plusieurs objectifs principaux :

  • Interactions et conversations directes avec les utilisateurs

  • Intégrations d'API avec des systèmes externes

  • Traitement par lots de plusieurs demandes

  • Real-time réponses en streaming pour les opérations de longue durée

Exemple de format de demande

Content-Type: application/json { "prompt": "What's the weather today?" }

Formats de réponse

Votre agent peut répondre en utilisant l'un des formats suivants en fonction du cas d'utilisation :

Réponse JSON (hors diffusion)

Objectif

Fournit des réponses complètes aux demandes qui peuvent être traitées rapidement

Cas d’utilisation

Les réponses JSON sont idéales pour :

  • Scénarios simples permettant de répondre à des questions

  • Calculs déterministes

  • Recherches rapides de données

  • Confirmations de statut

Exemple de format de réponse JSON

Content-Type: application/json { "response": "Your agent's response here", "status": "success" }

Réponse SSE (streaming)

Server-sent events (SSE) vous permet de fournir des réponses en streaming en temps réel. Pour plus d'informations, consultez la spécification Server-sent des événements.

Objectif

Permet de fournir des réponses incrémentielles pour les opérations de longue durée et d'améliorer l'expérience utilisateur

Cas d’utilisation

Les réponses SSE sont idéales pour :

  • Real-time expériences conversationnelles

  • Génération de contenu progressive

  • Long-running calculs avec résultats intermédiaires

  • Flux de données et mises à jour en direct

Exemple de format de réponse SSE

Content-Type: text/event-stream data: {"event": "partial response 1"} data: {"event": "partial response 2"} data: {"event": "final response"}

/ws - WebSocket (Facultatif)

Il s'agit du point de terminaison de WebSocket connexion principal pour les communications bidirectionnelles en temps réel.

Objectif

Accepte les demandes de WebSocket mise à niveau et maintient des connexions persistantes pour les interactions avec les agents de streaming

Cas d’utilisation

Le /ws point de terminaison répond à plusieurs objectifs principaux :

  • Real-time interfaces conversationnelles

  • Sessions interactives pour les agents avec feedback immédiat

  • Traitement des données en streaming avec communication bidirectionnelle

Établissement de la connexion

WebSocket les connexions commencent par une demande de mise à niveau HTTP :

Exemple de demande de mise à niveau HTTP

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

Exemple de réponse de WebSocket mise à niveau

HTTP/1.1 101 Switching Protocols Connection: Upgrade Upgrade: websocket Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

Exigences relatives à la gestion des messages

Votre WebSocket terminal doit gérer :

  • Acceptation de la connexion  : appel await websocket.accept() pour établir la connexion

  • Réception de messages  : Supporte les types de messages texte ou binaires en fonction des besoins de votre application

  • Traitement des messages  : gérez les messages entrants conformément à la logique métier de votre agent

  • Envoi de réponses  : envoyez les réponses appropriées en utilisant send_text() ou send_bytes()

  • Cycle de vie de la connexion  : gestion de l'établissement, de la maintenance et de la résiliation de la connexion

Formats de message

Messages texte
Format JSON (recommandé)

Objectif

Échange de données structuré pour les interactions entre agents

Exemple de message

{ "prompt": "Hello, can you help me with this question?", "session_id": "session-uuid", "message_type": "user_message" }

Exemple de réponse

{ "response": "I'd be happy to help you with your question!", "session_id": "session-uuid", "message_type": "agent_response" }
Format de texte brut

Objectif

Communication textuelle simple

Exemple

Hello, can you help me with this question?
Messages binaires

Objectif

Prise en charge des données non textuelles telles que des images, du son ou d'autres formats binaires

Cas d’utilisation

Les messages binaires prennent en charge plusieurs scénarios :

  • Multi-modal interactions avec les agents

  • Chargements et téléchargements de fichiers

  • Transmission de données compressées

  • Données de protocole binaire

Exigences en matière de manipulation

La gestion des messages binaires nécessite :

  • Utilisation receive_bytes() et send_bytes() méthodes

  • Mettre en œuvre un traitement de données binaires approprié

  • Tenez compte des limites de taille des messages

Cycle de vie de connexion

Établissement de la connexion
  1. HTTP Handshake  : le client envoie une demande de WebSocket mise à niveau

  2. Réponse de mise à niveau  : l'agent accepte et renvoie 101 protocoles de commutation

  3. WebSocket Actif  : la communication bidirectionnelle commence

  4. Liaison de session  : associez la connexion à l'identifiant de session

Échange de messages
  1. Boucle continue  : implémentez une boucle d'écoute des messages

  2. Traitement des messages  : gestion des messages entrants de manière asynchrone

  3. Génération de réponses  : envoyez les réponses appropriées

  4. Gestion des erreurs  : gestion des exceptions et des problèmes de connexion

/ping - OBTENIR

Objectif

Vérifie que votre agent est opérationnel et prêt à traiter les demandes

Cas d’utilisation

Le /ping point de terminaison répond à plusieurs objectifs principaux :

  • Surveillance des services pour détecter et résoudre les problèmes

  • Restauration automatisée grâce à AWS l'infrastructure gérée

Format de réponse

Renvoie un code d'état indiquant l'état de santé de votre agent :

  • Content-Type : application/json

  • Code d'état HTTP  : 200 pour des codes d'erreur sains et appropriés pour les états défectueux

Si votre agent doit traiter des tâches en arrière-plan, vous pouvez l'indiquer avec le /ping statut. Si l'état du ping est définiHealthyBusy, la session d'exécution est considérée comme active.

Exemple de format de réponse Ping

{ "status": "<status_value>" }
statut (obligatoire)

Healthy- Le système est prêt à accepter de nouveaux travaux

HealthyBusy- Le système est opérationnel mais est actuellement occupé par des tâches asynchrones. Tant que l'état est HealthyBusy défini, la session d'exécution est considérée comme active et reste active.

time_of_last_update (facultatif)

Horodatage Unix (en secondes) de la dernière modification. status Réglez-le uniquement en cas de changement de statut réel.

Avertissement

Ne réglez time_of_last_update pas l'heure actuelle à chaque ping. Un horodatage qui avance à chaque ping indique un changement d'état continu, ce qui empêche le déclenchement du délai d'inactivité. Les sessions persistent alors jusqu'à ce que votre quota MaxLifetime de sessions soit épuisé. Si vous omettez ce champ, la plateforme suit elle-même les changements de statut. Si vous utilisez le AgentCore SDK Bedrock, la réponse ping est gérée pour vous.

Gestion des erreurs

Contrairement aux AG-UI protocoles A2A, MCP et, le protocole HTTP n'enveloppe pas les erreurs dans une enveloppe spécifique au protocole. Le service renvoie les erreurs directement sous forme de réponses HTTP natives : le code d'état HTTP reflète l'exception et l'en-tête de x-amzn-ErrorType réponse contient le nom de l'exception. Le tableau suivant répertorie les exceptions que vous pouvez recevoir.

Code d'erreur HTTP Exception d'exécution (x-amzn-ErrorType) Description

400

ValidationException

Données ou paramètres de demande non valides

401

UnauthorizedException

Authentification requise ou informations d'identification non valides (OAuth-configured agents)

402

ServiceQuotaExceededException

La demande dépasserait un quota de service

403

AccessDeniedException

Autorisations insuffisantes pour l'opération demandée

404

ResourceNotFoundException

La ressource demandée n'existe pas

409

ConflictException

Conflit de ressources - La ressource existe déjà

409

RetryableConflictException

Fonctionnement de la session en cours, veuillez réessayer

424

RuntimeClientError

Le conteneur de votre agent a renvoyé une erreur 4xx ou 5xx. Vérifiez vos journaux CloudWatch

429

ThrottlingException

Trop de demandes : la limite de taux de demandes a été dépassée

500

InternalServerException

Une erreur inattendue s'est produite lors du traitement de la demande

ConflictExceptionet RetryableConflictException les deux renvoient HTTP 409. L'x-amzn-ErrorTypeen-tête et le message les distinguent. Le service renvoie RetryableConflictException (Session operation in progress, please retry) lorsqu'une deuxième opération cible une session que le service est en train de provisionner ou de supprimer. Cette condition est transitoire et peut être réessayée. Réessayez avec une courte temporisation exponentielle. Les AWS kits SDK réessayent automatiquement cette exception lorsque les nouvelles tentatives par défaut sont activées. Si vous appelez l'API directement sans AWS SDK, vous devez réessayer vous-même.

Note

ServiceQuotaExceededExceptionrenvoie HTTP 402 sur cette surface HTTP native. Sur le protocole A2A, il renvoie HTTP 429, le même statut HTTP que la limitation. Sur le protocole MCP, il partage le code JSON-RPC d'erreur d'étranglement (-32003) mais renvoie HTTP 200. AG-UI On utilise un code SERVICE_QUOTA_EXCEEDED SSE distinct et renvoie HTTP 429.

Réponses d'authentification OAuth

OAuth-configured les agents suivent les normes d'authentification RFC 6749 (OAuth 2.0). Lorsque l'authentification est manquante, le service renvoie une réponse 401 Unauthorized avec un WWW-Authenticate en-tête (conformément à la RFC 7235), permettant aux clients de découvrir les points de terminaison du serveur d'autorisation via l'API. GetRuntimeProtectedResourceMetadata

401 Accès non autorisé

Renvoyé lorsque l'en-tête d'autorisation est manquant.

WWW-Authenticate En-tête inclus :

WWW-Authenticate: Bearer resource_metadata="https://bedrock-agentcore.{region}.amazonaws.com/runtimes/{ESCAPED_ARN}/invocations/.well-known/oauth-protected-resource?qualifier={QUALIFIER}"
Note

SigV4-configured les agents renvoient HTTP 403 avec une ACCESS_DENIED erreur et n'incluent pas d'WWW-Authenticateen-têtes.