View a markdown version of this page

Gestione agentes asíncronos y de larga ejecución con Amazon Bedrock Runtime AgentCore - Amazon Bedrock AgentCore

Gestione agentes asíncronos y de larga ejecución con Amazon Bedrock Runtime AgentCore

Amazon Bedrock AgentCore Runtime puede gestionar el procesamiento asíncrono y los agentes de larga ejecución. Las tareas asincrónicas permiten a su agente continuar procesando después de responder al cliente y gestionar las operaciones de larga duración sin bloquear las respuestas. Con el procesamiento asíncrono, su agente puede:

  • Iniciar una tarea que puede tardar minutos u horas

  • Responda inmediatamente al usuario diciendo: «He empezado a trabajar en esto»

  • Continúe procesando en segundo plano

  • Permita que el usuario consulte los resultados más tarde

Conceptos clave

Modelo de procesamiento asíncrono

El AgentCore SDK de Amazon Bedrock admite el procesamiento sincrónico y asíncrono a través de una API unificada. Esto crea un patrón de implementación flexible tanto para los clientes como para los agentes desarrolladores. Los clientes agentes pueden trabajar con la misma API sin diferenciar entre síncronos y asíncronos en el lado del cliente. Gracias a la posibilidad de invocar la misma sesión en todas las invocaciones, los desarrolladores de agentes pueden reutilizar el contexto y aprovechar este contexto de forma incremental sin necesidad de 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 del punto final «/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 utiliza este campo para determinar si la sesión sigue activa.

  • time_of_last_update(opcional): marca de tiempo de Unix en segundos de la última modificación. status Configúrala solo en caso de cambio de estado real, no en todos los ping.

Una sesión en estado inactivo ("Healthy") durante 15 minutos finaliza automáticamente. Una sesión que regresa "HealthyBusy" permanece activa después del tiempo de espera de inactividad.

aviso

Si lo incluyestime_of_last_update, no lo pongas en 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 agote 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í misma) o actualízalo solo cuando el estado realmente cambie. Si utilizas el AgentCore SDK de Bedrock, esto se gestiona por ti.

Implementación de tareas asíncronas

Para empezar, instale el paquete: bedrock-agentcore

pip install bedrock-agentcore

AgentCore El SDK proporciona las siguientes opciones para el procesamiento asíncrono de integración.

ejemplo
API based task management
  1. Para crear agentes interactivos que realicen tareas asincrónicas, es necesario llamar al iniciar una tarea y add_async_task al completarla. complete_async_task El SDK gestiona el seguimiento de las tareas y administra el estado del ping automáticamente.

    # 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. Puede implementar su propio controlador de ping personalizado para administrar el estado de la sesión en tiempo de ejecución. El estado de su agente se informa a través del punto final /ping:

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

    Valores de estado:

    • «Saludable»: ¿Preparado para un nuevo trabajo

    • "HealthyBusy«: Se está procesando una tarea en segundo plano

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 de comprobación de estado /ping. Utilice subprocesos separados o métodos asíncronos para bloquear las operaciones.

Ejemplo completo

Primero, instale el paquete requerido:

pip install strands-agents

A continuación, cree un archivo 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 = 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 lo siguiente:

  • Crear una tarea en segundo plano que se ejecute de forma asíncrona

  • Realizar un seguimiento del estado de la tarea con y add_async_task complete_async_task

  • Responder inmediatamente al usuario mientras continúa el procesamiento

  • Gestionar automáticamente el estado de salud del agente

Problemas y soluciones comunes de

Long-running el agente es despedido después de 15 minutos

Esto puede ocurrir cuando la aplicación tiene un solo subproceso y el subproceso de ping está bloqueado.

  • Compruebe que las llamadas bloqueadas en la ruta de invocación estén en un hilo separado o que no bloqueen de forma asíncrona

  • Ejecute el servidor agente asíncrono localmente y simule los escenarios mientras comprueba el estado del ping.