Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Gestione agentes asincrónicos y de larga ejecución con Amazon Bedrock Runtime AgentCore
Amazon Bedrock AgentCore Runtime puede gestionar el procesamiento asincrónico y los agentes de larga duración. Las tareas asincrónicas permiten al agente continuar con el procesamiento después de responder al cliente y gestionar las operaciones de larga duración sin bloquear las respuestas. Con el procesamiento asincrónico, su agente puede:
-
Iniciar una tarea que puede tardar minutos u horas
-
Responda inmediatamente al usuario diciéndole: «He empezado a trabajar en esto»
-
Continúe procesando en segundo plano
-
Permita que el usuario vuelva a consultar los resultados más tarde
Conceptos clave
Modelo de procesamiento asincrónico
El AgentCore SDK de Amazon Bedrock admite el procesamiento sincrónico y asincrónico a través de una API unificada. Esto crea un patrón de implementación flexible tanto para los clientes como para los desarrolladores de agentes. Los clientes de los agentes pueden trabajar con la misma API sin diferenciar entre sincrónica y asincrónica en el lado del cliente. Al poder invocar la misma sesión en todas las invocaciones, los desarrolladores de agentes pueden reutilizar el contexto y aprovechar este contexto de forma gradual sin implementar una lógica compleja de administración de tareas.
Administración del ciclo de vida de las sesiones en
El código del agente comunica su estado de procesamiento mediante el estado de estado del terminal «/ping». El /ping punto final debe devolver una respuesta HTTP 200 con la siguiente carga útil JSON:
{"status": "HealthyBusy"}
La respuesta contiene un campo obligatorio y un campo opcional:
-
status(obligatorio): ya sea"Healthy"(inactivo, esperando solicitudes) o"HealthyBusy"(procesando tareas en segundo plano). La plataforma usa este campo para determinar si la sesión sigue activa. -
time_of_last_update(opcional): marca de tiempo de Unix en segundos la fecha de lastatusúltima modificación. Configúrala solo en un cambio de estado real, no en cada ping.
Una sesión en estado inactivo ("Healthy") durante 15 minutos finaliza automáticamente. Una sesión que vuelve "HealthyBusy" permanece activa más allá del tiempo de espera de inactividad.
aviso
Si lo incluyestime_of_last_update, no lo pongas a la hora actual en cada ping. Una marca de tiempo que avanza en cada ping indica un cambio de estado continuo, lo que evita que se active el tiempo de espera de la sesión inactiva. De este modo, las sesiones persisten hasta MaxLifetime agotar la cuota de sesión. Omite el campo (la plataforma registra los cambios de estado por sí sola) o actualízalo solo cuando el estado cambie realmente. Si utilizas el AgentCore SDK de Bedrock, esto se hace por ti.
Implementación de tareas asincrónicas
Para empezar, instala el paquete: bedrock-agentcore
pip install bedrock-agentcore
AgentCore El SDK ofrece las siguientes opciones para el procesamiento asincrónico de la integración.
ejemplo
importante
Asegúrese de que el @app.entrypoint controlador no realice operaciones de bloqueo, ya que esto también podría bloquear el punto final del control de estado de /ping. Utilice subprocesos independientes o métodos asíncronos para bloquear las operaciones.
Ejemplo completo
En primer lugar, instale el paquete necesario:
pip install strands-agents
A continuación, cree un archivo de Python con el siguiente código:
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 = str(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()
Este ejemplo demuestra:
-
Crear una tarea en segundo plano que se ejecute de forma asincrónica
-
Realizar un seguimiento del estado de la tarea con y
add_async_taskcomplete_async_task -
Responder inmediatamente al usuario mientras continúa el procesamiento
-
Administrar automáticamente el estado de salud del agente
Problemas y soluciones comunes de
Long-running el agente se cancela después de 15 minutos
Esto puede ocurrir cuando la aplicación es de un solo subproceso y el subproceso de ping está bloqueado.
-
Comprueba que las llamadas bloqueadoras en la ruta de invocación estén en un subproceso independiente o que sean asincrónicas y no bloqueen
-
Ejecute el servidor de agentes asíncrono localmente y simule escenarios mientras comprueba el estado del ping.