View a markdown version of this page

Gérez les agents asynchrones et de longue durée avec Amazon Bedrock Runtime AgentCore - Amazon Bedrock AgentCore

Gérez les agents asynchrones et de longue durée avec Amazon Bedrock Runtime AgentCore

Amazon Bedrock AgentCore Runtime peut gérer le traitement asynchrone et les agents de longue durée. Les tâches asynchrones permettent à votre agent de poursuivre le traitement après avoir répondu au client et de gérer les opérations de longue durée sans bloquer les réponses. Grâce au traitement asynchrone, votre agent peut :

  • Démarrez une tâche qui peut prendre des minutes ou des heures

  • Répondez immédiatement à l'utilisateur en disant « J'ai commencé à travailler là-dessus »

  • Poursuivre le traitement en arrière-plan

  • Permettre à l'utilisateur de consulter les résultats ultérieurement

Concepts clés

Modèle de traitement asynchrone

Le AgentCore SDK Amazon Bedrock prend en charge le traitement synchrone et asynchrone via une API unifiée. Cela crée un modèle d'implémentation flexible à la fois pour les clients et les développeurs d'agents. Les clients agents peuvent travailler avec la même API sans faire la différence entre synchrone et asynchrone côté client. Grâce à la possibilité d'invoquer la même session entre les invocations, les développeurs d'agents peuvent réutiliser le contexte et s'appuyer sur ce contexte de manière incrémentielle sans mettre en œuvre une logique de gestion des tâches complexe.

Gestion du cycle de vie des sessions d'exécution

Le code de l'agent communique son état de traitement à l'aide de l'état de santé du point de terminaison « /ping ». Le /ping point de terminaison doit renvoyer une réponse HTTP 200 avec la charge utile JSON suivante :

{"status": "HealthyBusy"}

La réponse contient un champ obligatoire et un champ facultatif :

  • status(obligatoire) : soit "Healthy" (inactif, en attente de demandes), soit "HealthyBusy" (traitement des tâches en arrière-plan). La plateforme utilise ce champ pour déterminer si la session est toujours active.

  • time_of_last_update(facultatif) — Horodatage Unix en secondes à compter de la status date de dernière modification. Réglez-le uniquement lors d'un changement de statut réel, pas à chaque ping.

Une session inactive ("Healthy") pendant 15 minutes est automatiquement interrompue. Une session qui revient "HealthyBusy" reste active au-delà du délai d'inactivité.

Avertissement

Si vous l'inclueztime_of_last_update, ne le réglez pas à l'heure actuelle à chaque ping. Un horodatage qui avance à chaque ping indique un changement d'état continu, ce qui empêche le délai d'inactivité de se déclencher. Les sessions persistent alors jusqu'à ce que votre quota de sessions soit épuisé MaxLifetime et peuvent être épuisées. Omettez le champ (la plateforme suit elle-même les changements de statut) ou mettez-le à jour uniquement lorsque le statut change réellement. Si vous utilisez le AgentCore SDK Bedrock, cela est géré pour vous.

Implémentation de tâches asynchrones

Pour commencer, installez le bedrock-agentcore package :

pip install bedrock-agentcore

AgentCore Le SDK fournit les options suivantes pour le traitement asynchrone d'intégration.

Exemple
API based task management
  1. Pour créer des agents interactifs qui exécutent des tâches asynchrones, vous devez appeler au add_async_task début et complete_async_task à la fin d'une tâche. Le SDK gère le suivi des tâches et gère automatiquement l'état du ping.

    # Start tracking a task manually task_id = app.add_async_task("data_processing") # Do work... # Mark task as complete app.complete_async_task(task_id)
Custom ping handler
  1. Vous pouvez implémenter votre propre gestionnaire de ping personnalisé pour gérer l'état de la session d'exécution. L'état de santé de votre agent est signalé via le point de terminaison /ping :

    @app.ping def custom_status(): if system_busy(): return PingStatus.HEALTHY_BUSY return PingStatus.HEALTHY

    Valeurs de statut :

    • « En bonne santé » : prêt pour un nouveau travail

    • HealthyBusy« : Tâche de traitement en arrière-plan

Important

Assurez-vous que le @app.entrypoint gestionnaire n'effectue pas d'opérations de blocage, car cela pourrait également bloquer le point de terminaison /ping health check. Utilisez des threads séparés ou des méthodes asynchrones pour bloquer les opérations.

Exemple complet

Tout d'abord, installez le package requis :

pip install strands-agents

Créez ensuite un fichier Python avec le code suivant :

import threading import time from strands import Agent, tool from bedrock_agentcore.runtime import BedrockAgentCoreApp # Initialize app with debug mode for task management app = BedrockAgentCoreApp() @tool def start_background_task(duration: int = 5) -> str: """Start a simple background task that runs for specified duration.""" # Start tracking the async task task_id = app.add_async_task("background_processing", {"duration": duration}) # Run task in background thread def background_work(): time.sleep(duration) # Simulate work app.complete_async_task(task_id) # Mark as complete threading.Thread(target=background_work, daemon=True).start() return f"Started background task (ID: {task_id}) for {duration} seconds. Agent status is now BUSY." # Create agent with the tool agent = Agent(tools=[start_background_task]) @app.entrypoint def main(payload): """Main entrypoint - handles user messages.""" user_message = payload.get("prompt", "Try: start_background_task(3)") return {"message": agent(user_message).message} if __name__ == "__main__": print("🚀 Simple Async Strands Example") print("Test: curl -X POST http://localhost:8080/invocations -H 'Content-Type: application/json' -d '{\"prompt\": \"start a 3 second task\"}'") app.run()

Cet exemple montre :

  • Création d'une tâche en arrière-plan qui s'exécute de manière asynchrone

  • Suivi de l'état de la tâche avec add_async_task et complete_async_task

  • Répondre immédiatement à l'utilisateur pendant que le traitement se poursuit

  • Gestion automatique de l'état de santé de l'agent

Problèmes courants et solutions correspondantes

Long-running l'agent est résilié au bout de 15 minutes

Cela peut se produire lorsque l'application est mono-thread et que le thread ping est bloqué.

  • Vérifiez que les appels bloquants dans le chemin d'invocation se trouvent dans un thread distinct ou qu'ils sont asynchrones non bloquants

  • Exécutez le serveur d'agent asynchrone localement et simulez des scénarios tout en vérifiant l'état du ping.