View a markdown version of this page

Behandeln Sie asynchrone und lang laufende Agenten mit Amazon AgentCore Bedrock Runtime - Amazon Grundgestein AgentCore

Behandeln Sie asynchrone und lang laufende Agenten mit Amazon AgentCore Bedrock Runtime

Amazon Bedrock AgentCore Runtime kann asynchrone Verarbeitung und Agenten mit langer Laufzeit verarbeiten. Asynchrone Aufgaben ermöglichen es Ihrem Agenten, die Verarbeitung fortzusetzen, nachdem er dem Client geantwortet hat, und lang andauernde Operationen abzuwickeln, ohne Antworten zu blockieren. Mit der asynchronen Verarbeitung kann Ihr Agent:

  • Eine Aufgabe starten, die Minuten oder Stunden dauern kann

  • Antworten Sie sofort auf den Benutzer, der sagt: „Ich habe angefangen, daran zu arbeiten“

  • Setzen Sie die Verarbeitung im Hintergrund fort

  • Erlauben Sie dem Benutzer, zu einem späteren Zeitpunkt erneut nach Ergebnissen zu suchen

Die wichtigsten Konzepte

Asynchrones Verarbeitungsmodell

Das Amazon Bedrock AgentCore SDK unterstützt sowohl synchrone als auch asynchrone Verarbeitung über eine einheitliche API. Dadurch entsteht ein flexibles Implementierungsmuster sowohl für Kunden als auch für Agentenentwickler. Agent-Clients können mit derselben API arbeiten, ohne auf der Clientseite zwischen synchroner und asynchroner API unterscheiden zu müssen. Durch die Möglichkeit, dieselbe Sitzung bei mehreren Aufrufen aufzurufen, können Agentenentwickler den Kontext wiederverwenden und schrittweise auf diesem Kontext aufbauen, ohne eine komplexe Aufgabenverwaltungslogik implementieren zu müssen.

Verwaltung des Lebenszyklus von Runtime-Sitzungen

Der Agentencode übermittelt seinen Verarbeitungsstatus mithilfe des Integritätsstatus des Endpunkts „/ping“. Der /ping Endpunkt muss eine HTTP 200-Antwort mit der folgenden JSON-Payload zurückgeben:

{"status": "HealthyBusy"}

Die Antwort enthält ein erforderliches Feld und ein optionales Feld:

  • status(erforderlich) — entweder "Healthy" (inaktiv, Warten auf Anfragen) oder "HealthyBusy" (Verarbeitung von Hintergrundaufgaben). Die Plattform verwendet dieses Feld, um festzustellen, ob die Sitzung noch aktiv ist.

  • time_of_last_update(optional) — Unix-Zeitstempel in Sekunden ab dem Zeitpunkt der status letzten Änderung. Stellen Sie ihn nur bei einer tatsächlichen Statusänderung ein, nicht bei jedem Ping.

Eine Sitzung, die sich 15 Minuten lang im Ruhezustand ("Healthy") befindet, wird automatisch beendet. Eine zurückkehrende Sitzung "HealthyBusy" bleibt über das Timeout im Leerlauf hinaus aktiv.

Warnung

Wenn Sie diese Option angebentime_of_last_update, stellen Sie sie nicht bei jedem Ping auf die aktuelle Uhrzeit ein. Ein Zeitstempel, der bei jedem Ping voranschreitet, signalisiert eine kontinuierliche Statusänderung, wodurch verhindert wird, dass das Timeout für inaktive Sitzungen jemals ausgelöst wird. Die Sitzungen bleiben dann bestehen, bis Ihr Sitzungskontingent MaxLifetime ausgeschöpft sein kann. Lassen Sie das Feld weg (die Plattform verfolgt Statusänderungen selbstständig) oder aktualisieren Sie es nur, wenn sich der Status tatsächlich ändert. Wenn Sie das Bedrock AgentCore SDK verwenden, wird dies für Sie erledigt.

Implementierung asynchroner Aufgaben

Um zu beginnen, installieren Sie das bedrock-agentcore Paket:

pip install bedrock-agentcore

AgentCore Das SDK bietet die folgenden Integrationsoptionen für die asynchrone Verarbeitung.

Beispiel
API based task management
  1. Um interaktive Agenten zu erstellen, die asynchrone Aufgaben ausführen, müssen Sie add_async_task sie aufrufen, wenn Sie eine Aufgabe starten und complete_async_task wenn die Aufgabe abgeschlossen ist. Das SDK übernimmt die Aufgabenverfolgung und verwaltet den Ping-Status automatisch.

    # 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. Sie können Ihren eigenen benutzerdefinierten Ping-Handler implementieren, um den Status der Runtime-Sitzung zu verwalten. Der Zustand Ihres Agenten wird über den Endpunkt /ping gemeldet:

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

    Statuswerte:

    • „Gesund“: Bereit für neue Arbeit

    • "HealthyBusy„: Hintergrundaufgabe wird verarbeitet

Wichtig

Stellen Sie sicher, dass der @app.entrypoint Handler keine blockierenden Operationen ausführt, da dies auch den /ping-Integritätsprüfendpunkt blockieren könnte. Verwenden Sie separate Threads oder asynchrone Methoden zum Blockieren von Vorgängen.

Vollständiges Beispiel

Installieren Sie zunächst das erforderliche Paket:

pip install strands-agents

Erstellen Sie dann eine Python-Datei mit dem folgenden Code:

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()

Dieses Beispiel zeigt:

  • Eine Hintergrundaufgabe erstellen, die asynchron ausgeführt wird

  • Den Status der Aufgabe mit add_async_task und verfolgen complete_async_task

  • Sofortige Antwort an den Benutzer, während die Bearbeitung fortgesetzt wird

  • Automatische Verwaltung des Gesundheitsstatus des Agenten

Häufige Probleme und Lösungen

Long-running Der Agent wird nach 15 Minuten beendet

Dies kann passieren, wenn die Anwendung über einen einzigen Thread verfügt und der Ping-Thread blockiert ist.

  • Stellen Sie sicher, dass blockierende Aufrufe im Aufrufpfad in einem separaten Thread oder in einem asynchronen, nicht blockierenden Thread erfolgen

  • Führen Sie den asynchronen Agent-Server lokal aus und simulieren Sie Szenarien, während Sie den Ping-Status überprüfen.