Gestisci agenti asincroni e di lunga durata con Amazon Bedrock Runtime AgentCore
Amazon Bedrock AgentCore Runtime è in grado di gestire l'elaborazione asincrona e gli agenti a lunga esecuzione. Le attività asincrone consentono all'agente di continuare l'elaborazione dopo aver risposto al client e di gestire operazioni di lunga durata senza bloccare le risposte. Con l'elaborazione asincrona, l'agente può:
-
Avviare un'attività che potrebbe richiedere minuti o ore
-
Rispondi immediatamente all'utente dicendo «Ho iniziato a lavorarci»
-
Continua l'elaborazione in background
-
Consenti all'utente di controllare più tardi i risultati
Concetti chiave
Modello di elaborazione asincrono
L' AgentCore SDK Amazon Bedrock supporta l'elaborazione sincrona e asincrona tramite un'API unificata. Questo crea un modello di implementazione flessibile sia per i clienti che per gli agenti sviluppatori. I client agente possono lavorare con la stessa API senza distinguere tra sincroni e asincroni sul lato client. Grazie alla possibilità di richiamare la stessa sessione tra le chiamate, gli sviluppatori di agenti possono riutilizzare il contesto e svilupparlo in modo incrementale senza implementare una logica di gestione delle attività complessa.
Gestione del ciclo di vita della sessione di runtime
Il codice dell'agente comunica lo stato di elaborazione utilizzando lo stato di integrità dell'endpoint «/ping». L'/pingendpoint deve restituire una risposta HTTP 200 con il seguente payload JSON:
{"status": "HealthyBusy"}
La risposta contiene un campo obbligatorio e un campo facoltativo:
-
status(obbligatorio):"Healthy"(inattivo, in attesa di richieste) o"HealthyBusy"(elaborazione di attività in background). La piattaforma utilizza questo campo per determinare se la sessione è ancora attiva. -
time_of_last_update(opzionale) — Timestamp Unix in secondi dell'ultima modifica.statusImpostalo solo su una modifica di stato effettiva, non su ogni ping.
Una sessione in stato di inattività ("Healthy") per 15 minuti viene terminata automaticamente. Una sessione che ritorna "HealthyBusy" rimane attiva oltre il timeout di inattività.
avvertimento
Se lo includetetime_of_last_update, non impostatelo sull'ora corrente a ogni ping. Un timestamp che avanza a ogni ping segnala un cambiamento continuo dello stato, che impedisce che il timeout della sessione inattiva si verifichi. Le sessioni persistono fino a MaxLifetime esaurimento della quota di sessione. Ometti il campo (la piattaforma tiene traccia delle modifiche allo stato da sola) o aggiornalo solo quando lo stato cambia effettivamente. Se utilizzi Bedrock AgentCore SDK, questo viene gestito automaticamente.
Implementazione di attività asincrone
Per iniziare, installa il pacchetto: bedrock-agentcore
pip install bedrock-agentcore
AgentCore L'SDK offre le seguenti opzioni per l'integrazione dell'elaborazione asincrona.
Esempio
Importante
Assicurati che il @app.entrypoint gestore non esegua operazioni di blocco, poiché ciò potrebbe anche bloccare l'endpoint /ping health check. Utilizzate thread separati o metodi asincroni per bloccare le operazioni.
Esempio completo
Innanzitutto, installa il pacchetto richiesto:
pip install strands-agents
Quindi, crea un file Python con il seguente codice:
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()
Questo esempio dimostra:
-
Creazione di un'attività in background che viene eseguita in modo asincrono
-
Monitoraggio dello stato dell'attività con e
add_async_taskcomplete_async_task -
Risposta immediata all'utente durante il proseguimento dell'elaborazione
-
Gestione automatica dello stato di salute dell'agente
Problemi e soluzioni comuni
Long-running l'agente viene licenziato dopo 15 minuti
Ciò può accadere quando l'applicazione è a thread singolo e il thread di ping è bloccato.
-
Verifica che le chiamate di blocco nel percorso di invocazione si trovino in un thread separato o in un thread asincrono non bloccante
-
Esegui il server agente asincrono localmente e simula scenari controllando lo stato del ping.