Gerencie agentes assíncronos e de longa duração com o Amazon Bedrock Runtime AgentCore
O Amazon Bedrock AgentCore Runtime pode lidar com processamento assíncrono e agentes de longa execução. As tarefas assíncronas permitem que seu agente continue processando depois de responder ao cliente e realize operações de longa duração sem bloquear as respostas. Com o processamento assíncrono, seu agente pode:
-
Inicie uma tarefa que pode levar minutos ou horas
-
Responda imediatamente ao usuário dizendo “Comecei a trabalhar nisso”
-
Continue processando em segundo plano
-
Permitir que o usuário verifique os resultados mais tarde
Principais conceitos
Modelo de processamento assíncrono
O Amazon Bedrock AgentCore SDK suporta processamento síncrono e assíncrono por meio de uma API unificada. Isso cria um padrão de implementação flexível para clientes e desenvolvedores de agentes. Clientes agentes podem trabalhar com a mesma API sem diferenciar entre síncrono e assíncrono no lado do cliente. Com a capacidade de invocar a mesma sessão em todas as invocações, os desenvolvedores de agentes podem reutilizar o contexto e desenvolver esse contexto de forma incremental sem implementar uma lógica complexa de gerenciamento de tarefas.
Gerenciamento do ciclo de vida da sessão em tempo de execução
O código do agente comunica seu status de processamento usando o status de integridade do endpoint “/ping”. O /ping endpoint deve retornar uma resposta HTTP 200 com a seguinte carga JSON:
{"status": "HealthyBusy"}
A resposta contém um campo obrigatório e um campo opcional:
-
status(obrigatório) — seja"Healthy"(inativo, aguardando solicitações) ou"HealthyBusy"(processando tarefas em segundo plano). A plataforma usa esse campo para determinar se a sessão ainda está ativa. -
time_of_last_update(opcional) — Carimbo de data/hora do Unix em segundos a partir dastatusúltima alteração. Defina-o somente em uma mudança de status real, não em cada ping.
Uma sessão em estado ocioso ("Healthy") por 15 minutos é automaticamente encerrada. Uma sessão que retorna "HealthyBusy" permanece ativa além do tempo limite de inatividade.
Atenção
Se você incluirtime_of_last_update, não a defina para a hora atual em cada ping. Um registro de data e hora que avança a cada ping sinaliza uma mudança contínua de status, o que evita que o tempo limite da sessão ociosa seja acionado. As sessões então persistem até MaxLifetime esgotar sua cota de sessão. Omita o campo (a plataforma rastreia as mudanças de status sozinha) ou atualize-o somente quando o status realmente mudar. Se você usa o AgentCore SDK do Bedrock, isso é feito para você.
Implementação de tarefas assíncronas
Para começar, instale o bedrock-agentcore pacote:
pip install bedrock-agentcore
AgentCore O SDK fornece as seguintes opções para processamento assíncrono de integração.
exemplo
Importante
Certifique-se de que o @app.entrypoint manipulador não execute operações de bloqueio, pois isso também pode bloquear o endpoint de verificação de integridade /ping. Use threads separados ou métodos assíncronos para bloquear as operações.
Exemplo completo
Primeiro, instale o pacote necessário:
pip install strands-agents
Em seguida, crie um arquivo Python com o seguinte 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 exemplo demonstra:
-
Criação de uma tarefa em segundo plano que é executada de forma assíncrona
-
Rastreando o status da tarefa com
add_async_taskecomplete_async_task -
Responder imediatamente ao usuário enquanto o processamento continua
-
Gerenciando automaticamente o estado de saúde do agente
Problemas e soluções comuns de
Long-running o agente é encerrado após 15 minutos
Isso pode acontecer quando o aplicativo tem um único encadeamento e o encadeamento de ping está bloqueado.
-
Verifique se as chamadas de bloqueio no caminho de invocação estão em um encadeamento separado ou assíncrono sem bloqueio
-
Execute o servidor de agente assíncrono localmente e simule cenários enquanto verifica o status do ping.