O que é o padrão de laço externo (outer loop) em agentes de IA? Como fazer o agente continuar até terminar de verdade

Renê Fraga
18 min de leitura

Principais destaques

  • 🛑 Agentes de IA têm um problema estrutural de confiabilidade que pouca gente discute: eles param antes da tarefa estar realmente concluída, declaram sucesso com confiança e entregam um resultado incompleto.
  • 🔁 O padrão de laço externo resolve isso envolvendo o agente em um mecanismo de controle que verifica o progresso, compara contra um objetivo definido, e reinicia o agente se o trabalho não estiver completo.
  • ⚙️ A implementação depende de quatro peças centrais: definição clara do objetivo, execução do agente (o laço interno), avaliação de progresso, e uma lógica de reinjeção ou encerramento, sempre com um limite máximo de tentativas.

Agentes de IA têm um problema de confiabilidade que não recebe atenção suficiente. Você delega uma tarefa complexa a um agente (pesquisar um tema, processar um lote de documentos, iterar em um código até funcionar) e ele para cedo demais. Declara sucesso. Reporta com confiança. E a tarefa não está de fato concluída.

Isso não é um bug no sentido tradicional. É uma questão estrutural de como a maioria dos agentes de IA é construída. O padrão de laço externo (outer loop) é uma das soluções mais práticas para esse problema: ele envolve o agente em um mecanismo de controle que verifica o progresso, compara contra um objetivo definido, e reinicia o agente se o trabalho ainda não estiver completo.

Entender esse padrão importa para quem constrói ou implanta agentes de IA para qualquer tarefa que não seja trivial. Este artigo explica o que é, como funciona, quando usar, e traz prompts prontos para cada peça do mecanismo.

🔄 O conceito central

No fundo, o padrão de laço externo é um invólucro em torno do ciclo normal de execução de um agente de IA. O agente roda, produz alguma saída ou realiza algumas ações, e então, em vez de simplesmente parar, um processo de controle avalia se o objetivo foi de fato cumprido. Se não foi, o laço externo realimenta o agente com outro ciclo de execução, carregando o contexto do que já foi feito. Isso continua até que os critérios de sucesso sejam satisfeitos, ou até que um limite de segurança (como um número máximo de iterações) entre em ação.

O nome vem de como laços funcionam em software. O “laço interno” é o próprio ciclo de raciocínio e ação do agente, o vaivém entre pensar, usar ferramentas e gerar resposta. O “laço externo” fica um nível acima disso, governando quando o laço interno roda de novo. Pense nele como uma etapa de controle de qualidade que roda depois de cada tentativa e decide se aprova o resultado ou o devolve para revisão.

🤷 Por que agentes têm desempenho ruim sem esse mecanismo

A maioria dos agentes de IA é treinada para produzir respostas coerentes e que soam completas. Isso é uma força em muitos contextos, mas para tarefas longas e em várias etapas, cria um modo de falha específico: o agente diz que terminou quando não terminou. Isso acontece por alguns motivos:

  • 📏 Limitações de janela de contexto: quando uma tarefa se espalha por muitas etapas ou documentos grandes, agentes podem perder de vista requisitos anteriores conforme se aproximam do fim do contexto
  • Viés de conclusão: modelos de linguagem são otimizados para produzir finais limpos, e um agente frequentemente encerra com um resumo confiante mesmo quando ainda falta trabalho significativo
  • 🎯 Critérios de sucesso ambíguos: se o agente não tem uma definição clara do que significa “concluído”, ele recorre a qualquer ponto de parada que pareça razoável

O laço externo endereça os três problemas externalizando a checagem de conclusão. Em vez de confiar que o agente sabe quando terminou, você define o que “concluído” significa e testa contra essa definição depois de cada execução.

⚙️ A mecânica: como um laço externo funciona

Uma implementação bem feita tem quatro componentes principais.

1️⃣ Definição do objetivo. Antes do agente rodar, você define como é um resultado bem-sucedido. Isso pode ser explícito (uma lista de verificação de saídas obrigatórias, um estado específico de arquivo, uma confirmação de um sistema externo) ou avaliado (outra chamada de modelo que julga se a saída atinge um padrão de qualidade). Objetivos vagos produzem laços pouco confiáveis: quanto mais concretos forem os critérios de sucesso, mais confiável fica a avaliação do laço externo.

Prompt para transformar um objetivo vago em critérios verificáveis:

Transforme o objetivo abaixo em uma lista de critérios de sucesso
concretos e verificáveis, que possam ser checados de forma objetiva
(sim/não) ao final de cada tentativa. Evite critérios subjetivos sempre
que possível; quando um critério exigir julgamento de qualidade, defina
uma régua clara para essa avaliação.

Objetivo original:
[DESCREVA O OBJETIVO DA TAREFA]

2️⃣ Execução do agente (o laço interno). O agente roda seu ciclo normal: raciocinar, chamar ferramentas, gerar saída, executar ações. Isso pode envolver várias etapas, várias chamadas de ferramenta e subtarefas. O laço interno roda até o agente achar que terminou, ou até atingir seu próprio ponto de parada interno.

3️⃣ Avaliação de progresso. Depois de cada execução do laço interno, o laço externo avalia a saída. Essa é a peça central do padrão: comparar a saída do agente contra a definição do objetivo e devolver um de dois resultados: completo ou incompleto. Essa avaliação pode acontecer de algumas formas: checagens baseadas em regra (o agente produziu a saída X? Atualizou o arquivo Y? Fez todas as chamadas de API necessárias?), checagens baseadas em modelo (uma chamada separada de IA, às vezes chamada de agente “juiz” ou “crítico”, lê a saída e determina se ela satisfaz o objetivo), ou uma combinação das duas, com regras para critérios objetivos e avaliação por modelo para qualidade subjetiva.

Prompt para o agente avaliador (juiz):

Você é um avaliador de progresso. Compare a saída abaixo com os critérios
de sucesso definidos para esta tarefa e determine se ela está completa.

Critérios de sucesso:
[COLE A LISTA DE CRITÉRIOS DA ETAPA 1]

Saída produzida até agora:
[COLE A SAÍDA DO AGENTE]

Retorne no seguinte formato JSON:
{"status": "completo" | "incompleto", "faltando": [lista do que ainda
precisa ser feito, se incompleto], "concluido": [lista do que já foi
feito com sucesso]}

4️⃣ Reinjeção ou encerramento. Se a avaliação retornar “incompleto”, o laço externo realimenta o agente com um resumo do que já foi realizado, uma descrição clara do que ainda está faltando, e o contexto atualizado, para que o agente não repita trabalho já concluído. Se a avaliação retornar “completo”, ou se um número máximo de iterações for atingido, o laço externo encerra e devolve a saída final.

Prompt de reinjeção para a próxima tentativa:

Sua tentativa anterior foi avaliada como incompleta.

Já foi concluído com sucesso:
[COLE A LISTA "concluido" RETORNADA PELO AVALIADOR]

Ainda está faltando:
[COLE A LISTA "faltando" RETORNADA PELO AVALIADOR]

Continue o trabalho a partir daqui, resolvendo especificamente os itens
que faltam. Não repita o que já foi concluído.

Saída da tentativa anterior:
[COLE A SAÍDA ANTERIOR]

🆚 Laço interno vs. laço externo: desfazendo a confusão

A distinção entre interno e externo confunde bastante gente. Aqui vai uma forma simples de pensar sobre isso:

🔄 Laço interno🔁 Laço externo
Onde rodaDentro do agenteFora do agente
O que controlaOs passos de raciocínio do agenteSe o agente roda de novo
Gerenciado porO próprio modelo/agenteA camada de orquestração
Para quandoO agente acha que terminouO objetivo é verificado como completo
ConsciênciaO próprio agente sabe que está rodandoSistema externo, o agente não sabe que existe

O agente não tem consciência do laço externo. Ele só faz seu trabalho e produz uma saída. É o laço externo quem decide se essa saída é boa o suficiente ou se o agente precisa de mais uma passada. Essa separação importa porque significa que dá para aplicar o padrão de laço externo a praticamente qualquer agente sem modificar o agente em si: você está adicionando uma camada de controle ao redor dele, não reconstruindo do zero.

🎯 Quando vale a pena usar o padrão de laço externo

Nem toda tarefa de agente precisa de um laço externo. Para tarefas simples e de uma única etapa (resumir um documento, responder uma pergunta, gerar uma imagem), a complexidade adicional não se justifica. O padrão compensa quando:

  • 📚 A tarefa é longa e em várias etapas: pesquisas, pipelines de geração de código, fluxos de redação de documentos, qualquer coisa em que o agente precise fazer muitas coisas em sequência e possa perder de vista o escopo completo
  • ⚠️ A conclusão parcial é um risco real: se entregar um resultado incompleto é tão ruim quanto não entregar nada, você precisa de um mecanismo de verificação
  • 🔍 A saída pode ser avaliada de forma objetiva ou confiável: o laço externo só funciona se você conseguir checar se o objetivo foi atingido; tarefas com critérios de sucesso claros são candidatas muito melhores do que tarefas que exigem julgamento humano subjetivo
  • 📏 Você trabalha com agentes que esbarram em limites de contexto: se sua tarefa costuma ultrapassar uma única janela de contexto, o laço externo permite dividir o trabalho em iterações e manter um estado contínuo entre elas
  • 🎯 Confiabilidade importa mais do que velocidade: o laço externo adiciona latência, às vezes significativa, porque pode rodar o agente várias vezes; essa é uma troca que vale a pena quando precisão é a prioridade

🛠️ Casos de uso comuns na prática

🔬 Pesquisa e coleta de informação. Um agente encarregado de pesquisar um tema em várias fontes costuma parar quando julga ter reunido informação “suficiente”, por sua própria estimativa. Um laço externo consegue verificar se todas as fontes exigidas foram checadas, se todos os subtópicos especificados foram cobertos, e se a saída atinge uma profundidade mínima antes de parar.

💻 Geração e teste de código. Agentes de código são um encaixe natural para esse padrão: o agente escreve código, o laço externo roda os testes, e se os testes falham, o agente tenta de novo usando a saída do erro como contexto. Isso continua até os testes passarem ou o limite de iterações ser atingido.

📄 Processamento de documentos em escala. Processar grandes lotes de documentos (contratos, relatórios, e-mails) pode ser dividido em iterações do laço externo: o agente processa um lote, o laço externo rastreia quais documentos já foram processados, e as iterações seguintes cuidam do restante.

✍️ Refinamento iterativo. Algumas tarefas exigem várias rodadas de rascunho e crítica antes de atingir uma qualidade aceitável. Um agente de redação rascunha uma seção, um avaliador critica contra um roteiro, e o laço externo devolve o rascunho para revisão se a nota da crítica não atingir o limiar definido.

🔧 Considerações de implementação

Definindo limites de iteração. Todo laço externo precisa de um número máximo rígido de iterações. Sem isso, um laço que nunca satisfaz seus critérios de conclusão roda indefinidamente, consumindo processamento e custo de API sem produzir resultado. Um padrão razoável é de 3 a 5 iterações para a maioria das tarefas. Para pipelines complexos de pesquisa ou processamento, dá para permitir até 10. Além disso, é mais provável que o problema seja um objetivo mal definido do que uma tarefa que genuinamente precisa de mais tentativas.

Evitando trabalho redundante. Um dos maiores modos de falha em laços externos é o agente repetir trabalho que já concluiu. Bons prompts de reinjeção listam explicitamente o que já foi feito e instruem o agente a pular essas etapas. Também vale manter um objeto estruturado de “estado de progresso”, referenciado tanto pela etapa de avaliação quanto pela etapa de reinjeção.

Gerenciando contexto entre iterações. Conforme as iterações se acumulam, o contexto passado a cada nova execução pode crescer bastante. Uma abordagem comum é manter uma “memória de trabalho” comprimida, que rastreia objetivos, etapas concluídas e tarefas pendentes, passando isso em vez do histórico bruto de saídas.

Prompt para comprimir o estado de progresso entre iterações:

Resuma o progresso desta tarefa em um objeto de estado compacto, com os
campos: objetivo_original, etapas_concluidas (lista curta), pendencias
(lista curta), e observacoes_importantes (qualquer contexto crítico que
não pode ser perdido). Máximo de 150 palavras no total.

Histórico completo até agora:
[COLE O HISTÓRICO ACUMULADO DAS ITERAÇÕES]

Qualidade da avaliação. O elo mais fraco na maioria das implementações de laço externo é a etapa de avaliação. Se o avaliador é permissivo demais, saídas incompletas são aprovadas. Se é rígido demais, o agente entra em um laço infinito. Avaliadores baseados em modelo funcionam melhor com roteiros estruturados, critérios específicos que a saída precisa atender, não um prompt vago do tipo “isso está bom?”. Para critérios objetivos (o agente chamou essa API? Esse arquivo existe?), checagens baseadas em regra são mais confiáveis do que avaliação por modelo.

Custo e latência. Várias execuções do agente significam várias chamadas de modelo, o que significa mais custo e mais tempo. Antes de implementar um laço externo, estime o número esperado de iterações e o custo em tokens de cada execução. Para implantações sensíveis a custo, vale usar um modelo menor para a etapa de avaliação, reservando um modelo mais capaz para o agente em si.


O padrão de laço externo resolve um problema estrutural real: agentes de IA que param antes da tarefa estar de fato concluída, confiantes de que terminaram quando ainda falta trabalho.

A solução envolve o agente em um ciclo de controle que avalia a saída contra objetivos bem definidos e o executa novamente quando esses objetivos não são atingidos, com o laço interno gerenciado pelo próprio agente e o laço externo gerenciado pela camada de orquestração.

Os detalhes que mais importam na implementação são critérios de sucesso claros, um número máximo de iterações, bons prompts de reinjeção que evitam trabalho redundante, e um gerenciamento eficiente de contexto entre as tentativas.

Para quem constrói agentes que precisam rodar até estarem genuinamente prontos, não apenas até o agente achar que está, vale começar com uma versão simples: uma única etapa de avaliação e um limite de três iterações, refinando a partir do que for observado na prática.

Apoie o Eurisko
Este conteúdo é independente, sem anúncios e feito por pessoas.
A inteligência artificial e as mudanças recentes do Google reduziram significativamente o alcance dos sites independentes. Se este conteúdo foi útil para você, considere apoiar o Eurisko e todo o ecossistema de projetos com qualquer valor.
Quero apoiar
Seguir:
Renê Fraga é fundador e editor-chefe do Eurisko, ecossistema editorial independente dedicado à inteligência artificial, código aberto, tecnologia e cultura digital. Atuando com projetos online desde 1996, escreve há mais de 20 anos sobre tecnologia e inovação, acompanhando a evolução da internet e o impacto das novas tecnologias na forma como vivemos, trabalhamos e pensamos.
Nenhum comentário