Phase 14 - Lesson 29
Runtimes de Produção: Fila, Evento, Cron
Agentes em produção rodam em seis formatos de runtime: requisição-resposta, streaming, execução durável, fila em segundo plano, orientado a eventos e agendado. Escolha o formato antes de escolher o framework. A observabilidade é crucial (load-bearing) em todos os formatos.
Tipo: Aprender Idiomas: Python (stdlib) Pré-requisitos: Fase 14 · 13 (LangGraph), Fase 14 · 22 (Voz) Tempo: ~60 minutos
Objetivos de Aprendizado
- Nomear os seis formatos de runtime de produção e associar cada um a um padrão de framework / produto.
- Explicar por que a execução durável (LangGraph) é importante para tarefas de longo horizonte (long-horizon).
- Descrever o runtime orientado a eventos e quando o Claude Managed Agents se encaixa.
- Explicar a afirmação de que a observabilidade é crucial (load-bearing) para agentes de múltiplas etapas.
O Problema
Agentes em produção falham de maneiras que um notebook Jupyter não revela: tempos limite de rede na etapa 37, o usuário desliga no meio de uma chamada de voz, o job do cron morre na reinicialização da máquina, o worker de segundo plano fica sem memória. O formato do runtime determina quais falhas são sobreviventes.
O Conceito
Requisição-resposta
- HTTP síncrono. O usuário aguarda a conclusão.
- Viável apenas para tarefas curtas (<30s).
- Stacks: Agno (Python + FastAPI), Mastra (TypeScript + Express/Hono/Fastify/Koa).
- Observabilidade: logs de acesso HTTP padrão + spans do OTel.
Streaming
- SSE ou WebSocket para saída progressiva.
- O LiveKit estende isso para WebRTC para voz/vídeo (Lição 22).
- Stacks: qualquer framework com suporte a streaming + um frontend que lida com SSE/WS.
- Observabilidade: tempo por bloco (chunk), latência do primeiro token, latência de cauda (tail latency).
Execução durável
- Estado persistido (checkpointed) após cada etapa; retoma automaticamente em caso de falha.
- O modelo de ator do AutoGen v0.4 isola falhas a um único agente (Lição 14).
- O principal diferencial do LangGraph (Lição 13).
- Essencial quando o número de etapas é desconhecido e o custo de recuperação é alto.
Baseado em fila / segundo plano
- O job entra em uma fila, os workers o processam, e os resultados retornam via webhooks ou pub/sub.
- Essencial para agentes de longo horizonte (dezenas a centenas de etapas por tarefa, conforme o anúncio de computer use da Anthropic).
- Stacks: Celery (Python), BullMQ (Node), SQS + Lambda (AWS), customizado.
- Observabilidade: profundidade da fila, distribuição de latência por job, tamanho da DLQ.
Orientado a eventos
- Agentes se inscrevem em gatilhos: novo e-mail, PR aberto, disparo do cron.
- O Claude Managed Agents cobre isso nativamente (Lição 17).
- O CrewAI Flows (Lição 15) estrutura fluxos de trabalho determinísticos orientados a eventos.
- Observabilidade: origem do gatilho, latência do evento ao início, latência do agente.
Agendado
- Agentes no formato cron que rodam periodicamente.
- Combine com execução durável para que uma execução noturna com falha retome na próxima oportunidade.
- Stacks: Kubernetes CronJob + um framework durável; hospedado (Render cron, Vercel cron).
Padrões de implantação de 2026
- CrewAI Flows para produção orientada a eventos.
- Agno FastAPI sem estado (stateless) para microsserviços em Python.
- Mastra adaptadores de servidor (Express, Hono, Fastify, Koa) para incorporação.
- Pipecat Cloud / LiveKit Cloud para voz gerenciada (Lição 22).
- Claude Managed Agents para assíncrono hospedado de longa duração.
A observabilidade é crucial (load-bearing)
Sem os spans de GenAI do OpenTelemetry (Lição 23) somados a um backend do Langfuse/Phoenix/Opik (Lição 24), você não conseguirá depurar um agente de múltiplas etapas que falhou na etapa 40. Isso não é opcional em produção. É a diferença entre "depuramos rápido" e "reproduzimos tudo do zero com mais logs".
Onde os runtimes de produção falham
- Escolha incorreta do formato. Escolher requisição-resposta para uma tarefa de 5 minutos. Os usuários desligam; os workers acumulam; as tentativas de reexecução se acumulam.
- Sem DLQ. Workers de fila sem fila de mensagens mortas (dead-letter queue). Os jobs que falham desaparecem.
- Trabalho opaco em segundo plano. O agente em segundo plano roda sem exportação de rastreamento (trace). As falhas são invisíveis até que o usuário as relate.
- Pular o estado durável. Qualquer execução que dure mais de 30 segundos, onde você não possa se dar ao luxo de recomeçar, precisa de execução durável.
Construa
O arquivo code/main.py é uma demonstração de múltiplos formatos da biblioteca padrão (stdlib):
- Endpoint de requisição-resposta (função simples).
- Manipulador de streaming (gerador).
- Worker baseado em fila com DLQ.
- Registro de gatilhos de eventos.
- Agendador no formato cron.
Execute-o:
python3 code/main.py
Saída: cinco traces mostrando o comportamento de cada formato na mesma tarefa. Mesma lógica de agente, diferentes invólucros externos. A execução durável (o sexto formato) é intencionalmente abordada na Lição 13 com o checkpointing do LangGraph.
Use
- Requisição-resposta para UX estilo chat.
- Streaming para respostas progressivas.
- Durável para tarefas de longo horizonte.
- Fila para lotes / assíncrono / longa duração.
- Evento para reatividade do agente.
- Cron para manutenção interna (consolidação de memória, avaliações, relatórios de custos).
Envie
O arquivo outputs/skill-runtime-shape.md escolhe um formato de runtime para uma tarefa e conecta os requisitos de observabilidade.
Exercícios
- Adapte seu loop ReAct da Lição 01 para os seis formatos em sua stack. Qual formato se adapta a qual interface de produto?
- Adicione uma DLQ à demonstração baseada em fila. Simule uma taxa de falha de 10% nos jobs; exiba o tamanho da DLQ.
- Escreva um agente de avaliação acionado por cron que rode todas as noites sobre as suas 20 principais traces do dia.
- Implemente streaming com controle de fluxo (backpressure): se o cliente estiver lento, pause o agente. Como isso interage com um orçamento de turnos (turn budget)?
- Leia os documentos do Claude Managed Agents. Quando você moveria um agente de longo horizonte auto-hospedado para a versão gerenciada?
Termos-Chave
| Termo | O que as pessoas dizem | O que realmente significa |
|---|---|---|
| Requisição-resposta | "Síncrono" | O usuário aguarda; apenas para tarefas curtas |
| Streaming | "SSE / WS" | Saída progressiva; melhor UX; latência observável por bloco |
| Execução durável | "Retomar a partir da falha" | Estado persistido por checkpoint; reinicia na última etapa |
| Baseado em fila | "Jobs em segundo plano" | Pool de produtores / workers / DLQ |
| Orientado a eventos | "Baseado em gatilhos" | O agente reage a eventos externos |
| DLQ | "Fila de mensagens mortas" | Área de descarte para jobs que falharam |
| Claude Managed Agents | "Harness hospedado" | Assíncrono de longa duração hospedado pela Anthropic com cache + compactação |
Leitura Adicional
- LangGraph overview — detalhes sobre execução durável
- Claude Managed Agents overview — assíncrono hospedado de longa duração
- Anthropic, Introducing computer use — "dezenas a centenas de etapas por tarefa"
- AutoGen v0.4 (Microsoft Research) — isolamento de falhas do modelo de actor