Loop Engineering: projetando os loops que guiam agentes de IA
Ouvir estudo
gerado ao ouvirGerado apenas no primeiro play
Com tecnologia Amazon Polly + OmniVoice
O gargalo dos agentes de IA deixou de ser a frase do prompt e passou a ser o desenho do loop: trigger, topologia, verifier e stop rules. Este guia ensina os fundamentos do loop engineering — do ReAct base ao catálogo de padrões — com exemplos reais do meu próprio sistema e um passo a passo para engenheirar qualquer loop com segurança.
Em junho de 2026, Addy Osmani publicou um ensaio que nomeou algo que muitos engenheiros já sentiam mas não conseguiam articular: o trabalho de construir agentes de IA não é mais escrever prompts melhores — é projetar os loops que fazem o prompt trabalhar. Boris Cherny, criador do Claude Code, disse literalmente que seu trabalho agora é 'escrever os loops que dirigem o Claude'. Peter Steinberger resumiu: 'pare de fazer prompt nos seus agentes e comece a projetar os loops que fazem prompt neles'. Se você vem do mundo de software e nunca construiu um agente de IA, este guia começa do zero: o que é um loop agêntico, por que ele quebra, e como engenheirá-lo com a mesma disciplina que você aplica a qualquer sistema distribuído.
O que você vai aprender
Glossário rápido — termos do loop engineering
- Loop Engineering
- Disciplina de projetar o ciclo de controle que governa um agente de IA: o que dispara, como itera, quando para e quem verifica o resultado.
- Trigger
- O evento que inicia o loop: pode ser uma mensagem de usuário, um cron job (agendamento), um evento de fila ou outro agente.
- Topologia
- A forma do loop: single-agent (um agente itera sozinho), sub-loops (agentes filhos paralelos ou sequenciais), ou grafo de agentes.
- Verifier
- O componente que decide se o resultado presta. DEVE ser um check automático e verificável — não a auto-avaliação do próprio agente (que é tendenciosa).
- Stop Rule
- Critério verificável que encerra o loop: meta atingida, teto de iterações, budget de tokens/custo esgotado, ou detecção de no-progress.
- Budget
- Limite explícito de recurso (tokens, custo em USD, tempo em segundos) alocado ao loop. Quando esgotado, o loop para — independente do resultado.
- No-Progress
- Estado em que o agente itera mas o output não muda (estado externo estável). Detectado por hash ou diff entre iterações consecutivas.
- Circuit Breaker
- Padrão de resiliência (igual ao de microserviços): após N falhas consecutivas, o loop abre o circuito e para de tentar, evitando desperdício de budget.
- ReAct
- Padrão de loop base (Yao et al., 2022): Reason + Act. O agente raciocina sobre o estado, age (chama ferramenta), observa o resultado e repete.
- Reflection / Reflexion
- Padrão (Shinn et al., 2023) em que o agente gera uma crítica do próprio erro, armazena na memória e injeta na próxima tentativa. Cada ciclo ~dobra o custo em tokens (estimativa).
A virada: de prompt engineering para loop engineering
Durante anos, a sabedoria convencional era: se o modelo errar, melhore o prompt. Isso funcionava quando um agente era essencialmente um call único — você envia uma pergunta, recebe uma resposta, fim. Pense nisso como uma função pura: f(prompt) → resposta. O problema é que tarefas reais raramente cabem em um call. Escrever código, pesquisar um tema, gerar um relatório longo — todas essas tarefas exigem múltiplos passos, uso de ferramentas externas e correção de erros intermediários.
Quando você encadeia esses passos em um loop — o agente age, observa o resultado, raciocina sobre o que fazer a seguir e age de novo — o prompt individual deixa de ser o gargalo. O gargalo passa a ser o design do loop: o que dispara o ciclo, como o agente decide o próximo passo, quem verifica se o resultado presta, e — criticamente — quando o loop para. Um loop sem stop rule clara é um while(true) com cartão de crédito: ele itera até o budget acabar ou você matar o processo. Loop engineering é a disciplina de projetar esse ciclo de controle com a mesma seriedade que você projeta um pipeline de dados ou um sistema de mensageria.
O loop base: ReAct passo a passo
ReAct (Yao et al., 2022) é o alfabeto do loop engineering. O nome vem de Reasoning + Acting. A sequência é:
- Perceber (Observe): o agente recebe o estado atual — a tarefa original, o histórico de iterações anteriores e o resultado da última ação.
- Raciocinar (Reason): o agente produz um 'pensamento' — uma cadeia de raciocínio interna que decide o próximo passo. Isso é o que o modelo escreve antes de chamar uma ferramenta.
- Agir (Act): o agente executa uma ação — chamar uma API, buscar na web, escrever em um arquivo, invocar um sub-agente.
- Observar (Observe): o resultado da ação é capturado e adicionado ao contexto. Esse resultado alimenta o próximo ciclo de raciocínio.
A analogia de engenharia é um control loop de sistemas de controle: sensor → controlador → atuador → sensor. Cada observação é o feedback que fecha o loop. O que torna o ReAct poderoso não é nenhuma das etapas individualmente — é o fato de que cada observação muda o contexto do próximo raciocínio. O agente aprende com o que acabou de fazer, dentro da mesma sessão, sem retreinamento.
Anatomia de um loop engenheirado
Diagrama didático: trigger → loop do agente (ReAct: raciocinar → agir → observar, com ferramentas e memória) → verifier → checagem de stop rule → done ou iterar. Budget e observabilidade envolvem tudo. Gate human-in-the-loop opcional antes do verifier.
- User · message
- Cron / Event · EventBridge
- Queue · SQS / SNS
- Reason · chain-of-thought
- Act · call tool / sub-agent
- Observe · capture result
- Memory · context / history
- Tools · APIs / search / code
- Human-in-the-Loop · approval gate
- Verifier · auto check (not self-eval)
- Stop Rule · goal | iter | budget | no-progress
- DONE · result emitted
- ITERATE · back to reason
- Budget · tokens / cost / time
- Observability · trace per iteration
- Checkpoint · idempotent state (S3/DB)
Os 4 componentes de todo loop — e por que cada um importa
Todo loop agêntico, independente do padrão, tem exatamente quatro componentes que você precisa projetar explicitamente:
1. Trigger: O que inicia o ciclo. Pode ser síncrone (mensagem de usuário, chamada HTTP) ou assíncrono (cron job via EventBridge, evento em fila SQS, outro agente). A escolha do trigger determina a cadência e o contrato de latência do loop.
2. Topologia: A forma do loop. Single-agent itera sozinho — simples, fácil de rastrear, mas limitado em paralelismo. Sub-loops com sub-agentes permitem dividir tarefas complexas (ex: cada capítulo de um e-book processado por um sub-agente independente), mas adicionam complexidade de orquestração e custo de coordenação.
3. Verifier: Quem decide se o resultado presta. Este é o componente mais subestimado. A armadilha clássica é usar o próprio agente para se auto-avaliar — o modelo é tendencioso em favor do próprio output. Um verifier real é externo: um teste automatizado, uma consulta a banco de dados, uma validação de schema, uma chamada a outro modelo especializado em crítica.
4. Stop Rules: O critério de parada. Sem stop rule verificável, você tem um loop infinito. As quatro stop rules fundamentais são: (a) meta atingida por check automático, (b) teto de iterações, (c) budget de tokens ou custo esgotado, (d) detecção de no-progress. Critério vago — 'quando estiver bom' — é a causa número um de loop infinito em produção.
Catálogo de padrões de loop — trade-offs lado a lado
| Padrão | Melhor para | Custo por iteração | Risco de não-terminar | Como termina | |
|---|---|---|---|---|---|
| Retry / Circuit-Breaker | Falhas transitórias de ferramenta ou API | Baixo (repete o mesmo call) | Baixo se N fixo | Após N tentativas ou timeout | Geradores com 2 tentativas + abort por timeout |
| Plan-Execute-Verify | Tarefas estruturadas com critério de sucesso claro | Médio (3 fases por ciclo) | Baixo-médio | Verifier passa ou budget esgota | Geração de artigo: planeja seções → escreve → valida schema |
| Reflection / Auto-crítica | Qualidade alta necessária; erros sutis de raciocínio | Alto (~dobra a cada ciclo — estimativa) | Médio (pode ciclar em críticas sem convergir) | Crítica vazia ou budget de iterações | Revisão de capítulo de e-book com crítica armazenada em memória |
| While-Not-Done + Sub-agentes | Tarefas longas paralelizáveis (coding agents, e-books) | Alto (N sub-agentes × custo por capítulo) | Alto se orquestrador não tiver stop rule forte | Todos os sub-loops concluem ou orquestrador aborta | E-book capítulo-a-capítulo com cache por capítulo |
| Human-in-the-Loop | Ações irreversíveis ou de alto risco (publicar, pagar, deletar) | Variável (depende da latência humana) | Muito baixo (humano é o verifier) | Aprovação humana ou timeout de checkpoint | Gate de aprovação antes de publicar artigo gerado |
Exemplos reais do meu sistema — o que aprendi na prática
Construí e opero vários loops agênticos neste site. Aqui estão os que ensinaram mais:
Geração diária de artigos (EventBridge → Lambda → Bedrock): O trigger é um cron job às 06:00. O loop usa Bedrock AgentCore Web Search para fundamentar o conteúdo. O verifier checa se o artigo tem as seções obrigatórias via schema. O fail-safe é crítico: se a busca falha, o loop não aborta — cai para grounding apenas do texto-fonte. Isso é um circuit breaker de ferramenta, não do loop inteiro.
E-book capítulo-a-capítulo: Em vez de passar o livro inteiro no contexto (o que estouraria a janela e o custo), o loop itera capítulo a capítulo. Cada capítulo é um sub-loop independente com cache próprio. Se um capítulo falha, o sub-loop reprocessa apenas aquele capítulo — o estado do livro (quais capítulos estão prontos) vive em S3, não na memória do agente.
Cron de áudio às 02:00 (idempotente): O ponteiro no S3 ('qual arquivo de áudio já foi gerado') é o estado da verdade. Se o Lambda re-executa por qualquer motivo, ele lê o ponteiro, detecta que o arquivo já existe e pula. Isso é idempotência por design — o estado externo governa, não o estado em memória.
Loop de keepalive (projetado ao vivo): Para manter um render longo vivo dentro de uma janela curta, projetei um heartbeat que envia um sinal a cada N segundos. A stop rule é simples: se o render terminou (check no S3), o heartbeat para. Meta-exemplo de como uma stop rule verificável elimina o problema de não-terminar.
Quando usar cada abordagem: one-shot × workflow × loop
One-Shot (call único)
- Latência mínima, custo previsível, sem risco de não-terminar
- Fácil de testar e depurar
- Não corrige erros intermediários, sem uso de ferramentas dinâmicas
- Limitado pela janela de contexto
Use para tarefas simples, bem definidas, com output de tamanho previsível.
Workflow / DAG fixo
- Determinístico, auditável, fácil de monitorar
- Custo por execução previsível
- Não adapta a erros inesperados, requer redesenho para novos fluxos
A maioria dos casos reais em produção. Use quando o fluxo é conhecido e estável. Workflow + RAG resolve 80% dos casos (estimativa).
Loop Single-Agent
- Adapta a erros, usa ferramentas dinamicamente, corrige rota
- Topologia simples de rastrear
- Custo cresce com iterações, risco de loop infinito sem stop rule forte
- Latência alta para tarefas longas
Use para tarefas abertas, verificáveis, com custo de iteração aceitável e stop rules explícitas.
Loop Multi-Agente / Sub-loops
- Paralelismo real, divide tarefas muito longas, cache por sub-tarefa
- Falha isolada por sub-loop
- Alta complexidade de orquestração, custo de coordenação, difícil de depurar
- Risco de não-terminar se orquestrador não tiver stop rule forte
Tendência de 2026 em coding agents. Use apenas quando a tarefa é paralelizável e o custo de coordenação é justificado.
O plano de controle: onde os loops quebram de verdade
A parte mais difícil do loop engineering não é o loop em si — é o plano de controle: o conjunto de mecanismos que garante que o loop termina, é observável e pode ser retomado após falha.
Stop rules verificáveis: A regra de ouro é que toda stop rule deve ser verificável por um check automático, não por julgamento do agente. 'Quando o artigo estiver bom' é vago. 'Quando o schema de validação passar E o artigo tiver mais de 800 palavras' é verificável. Critério vago é a causa número um de loop infinito.
Budgets explícitos: Cada loop deve ter um teto de tokens, custo em USD e/ou tempo em segundos. Quando o budget esgota, o loop para — independente do resultado. Isso é análogo ao timeout que você já usa em qualquer chamada de rede. O custo cresce a cada iteração (especialmente em reflection, onde ~dobra — estimativa), então o budget é a última linha de defesa.
Observabilidade por iteração: Cada iteração deve emitir um traço: o que o agente pensou, qual ação executou, qual foi o resultado, qual é o estado do budget. Sem isso, depurar um loop em produção é como depurar um sistema distribuído sem logs.
Idempotência e resumibilidade: O estado do loop deve viver em armazenamento externo (S3, banco de dados), não na memória do processo. Se o processo morre e re-executa, ele lê o estado externo e continua de onde parou — exatamente como um job de processamento em batch bem projetado.
Guia passo a passo: como engenheirar um loop
O que me chama atenção no loop engineering não é a novidade do conceito — control loops existem desde os anos 50 em engenharia de controle. O que é novo é que agora o 'controlador' é um LLM com raciocínio emergente e custo por token. Isso muda o trade-off fundamentalmente: cada iteração custa dinheiro real e pode produzir output não-determinístico. A consequência prática é que stop rules e budgets deixam de ser 'boas práticas' e viram requisitos de negócio. Na minha experiência operando esses sistemas: (1) o erro mais comum é não ter verifier externo — o agente se auto-avalia e sempre acha que está bom; (2) o segundo erro mais comum é stop rule vaga — 'quando a tarefa estiver completa' sem definir o que 'completa' significa em termos verificáveis; (3) a maioria dos casos reais não precisa de loop autônomo — workflow + RAG resolve com muito menos risco. Loop agêntico é para tarefas genuinamente abertas onde o caminho não é conhecido de antemão. Se você sabe o caminho, use um DAG. Reserve o loop para quando você não sabe.
No próximo: orquestração multi-agente
Quando um loop vira muitos: orquestração multi-agente, padrões de comunicação entre agentes, e como projetar o plano de controle de um sistema onde vários loops rodam em paralelo — incluindo como lidar com falhas parciais sem abortar o trabalho todo.
Veredicto
Loop engineering é a resposta correta para a pergunta errada que a indústria fez por anos: 'como faço o modelo acertar com um prompt melhor?'. A pergunta certa é: 'como projeto o ciclo de controle que guia o modelo até o resultado correto, de forma verificável, dentro de um budget, e que para quando deve parar?'. Os quatro componentes — trigger, topologia, verifier, stop rules — são o mínimo não-negociável. O plano de controle (budgets, observabilidade, idempotência) é o que separa um loop que funciona em demo de um que funciona em produção. A maioria dos sistemas reais não precisa de loop autônomo — workflow + RAG resolve com menos risco, menor custo e maior previsibilidade. Use o loop agêntico quando a tarefa é genuinamente aberta, verificável e o custo de iteração é aceitável. Quando usar, engenheirar o loop com a mesma disciplina que você aplicaria a qualquer sistema distribuído crítico.
Referências
Post-mortems, ADRs e deep dives de arquitetura no seu email — do jeito que um arquiteto lê.
Sem spam · cancele quando quiser
Pergunte ao Fernando sobre isto
Receba uma resposta focada sobre este estudo do meu assistente de IA, baseada no meu trabalho.
Participe da conversa
Entre para comentar
Confirme seu e-mail para participar — você também recebe a newsletter. Sem senha.