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

  1. Adapte seu loop ReAct da Lição 01 para os seis formatos em sua stack. Qual formato se adapta a qual interface de produto?
  2. Adicione uma DLQ à demonstração baseada em fila. Simule uma taxa de falha de 10% nos jobs; exiba o tamanho da DLQ.
  3. Escreva um agente de avaliação acionado por cron que rode todas as noites sobre as suas 20 principais traces do dia.
  4. 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)?
  5. 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

0 lifetime access. Curriculum based on AI Engineering from Scratch by Rohit Ghumare (MIT, used under attribution).