π§ Desenhe o ciclo de cinco passos
Todo loop de agente decente segue o mesmo esqueleto de cinco passos: descobrir (juntar o contexto que falta), planejar (decidir o proximo movimento), agir (executar β rodar codigo, chamar uma ferramenta, escrever), verificar (checar se o resultado presta) e parar (sair do loop, com sucesso ou desistencia). Cada um desses cinco e um no. O loop inteiro e um grafo.
π Novo aqui? Duas palavras antes de seguir
- Loop: um trecho de processo que se repete ate uma condicao mudar. Aqui, o grafo cujo caminho volta a um no anterior β a Trilha 1 ja te mostrou isso.
- Verificar (verify): o passo que decide se o trabalho feito presta ou nao. Vira o assunto inteiro do Modulo 2.2.
O que olhar: siga a seta de "verificar" que volta pra "descobrir" β essa e a aresta que fecha o ciclo e transforma a fila de passos num loop de verdade. A outra saida, pra "parar", e o que impede o grafo de rodar pra sempre. Sem as duas setas saindo de "verificar", voce nao tem um loop, tem um DAG disfarcado.
Descobrir + planejar sao baratos, agir e verificar sao caros
Juntar contexto e decidir custam tokens. Agir (rodar codigo, editar arquivo) e verificar (rodar teste, chamar outro modelo) custam tempo e dinheiro de verdade. Otimize o loop reduzindo voltas, nao os dois passos baratos.
Nem todo loop precisa dos cinco passos escritos por extenso
Um loop simples de "tentar de novo" pode fundir descobrir+planejar num so prompt. Mas os cinco existem por baixo mesmo assim β nomea-los ajuda a debugar quando o loop trava.
Conceitos-chave
Descobrir, planejar, agir, verificar, parar
O loop e o grafo desses cinco nos
Volta (ciclo) ou parar (sai)
Otimize reduzindo voltas
π Escreva a condicao de parada
Existem dois jeitos de um loop parar: por sucesso (o verificador aprovou) ou por desistencia (bateu um teto e o loop nao vai passar mesmo insistindo). Um loop que so sabe parar por sucesso e um loop que pode rodar pra sempre β voce precisa das duas saidas, nao so de uma.
π‘ Parada em camadas
Uma condicao de parada boa nunca e uma linha so. E uma pilha de tres:
- β’Criterio normal β "os testes passaram", "o revisor aprovou". A saida feliz.
- β’Teto β um numero duro: max 10 voltas, ou max $2 de tokens. Independente do criterio, isso corta o loop.
- β’Humano β se bateu o teto sem sucesso, alguem precisa ser avisado. Desistencia silenciosa e o pior desfecho possivel.
β Condicao de parada boa
- βCriterio verificavel por codigo, nao "parece bom"
- βTeto de voltas explicito no codigo do loop
- βDesistencia dispara um alerta pra um humano
β Condicao de parada ruim
- β"O modelo decide quando parar" sem teto nenhum por baixo
- βTeto existe, mas ao bater ele so encerra sem avisar ninguem
- βCriterio de sucesso e "o LLM disse que ficou bom" β sem referencia externa
β οΈ Atencao: desistencia muda e cara de sucesso
Um loop que bate o teto e simplesmente para, sem logar nada e sem avisar ninguem, e o pior tipo de bug: parece que funcionou porque nao deu erro visivel. Trate a desistencia como um evento de primeira classe β ela precisa aparecer em algum lugar que um humano olha.
Conceitos-chave
Verificador aprovou
Bateu o teto sem passar
Criterio + teto + humano
Desistencia precisa avisar
π Decida o que atravessa as voltas
Cada volta do loop tem acesso a uma janela de contexto β a quantidade de texto que o modelo consegue "ver" de uma vez, contando prompt, historico e resultado das ferramentas. A pergunta que voce precisa responder antes de escrever o loop e: o que atravessa de uma volta pra outra, e o que fica pra tras?
π Novo aqui? Janela de contexto
Pense nela como uma mesa de trabalho de tamanho fixo. Tudo que o modelo precisa enxergar naquela volta β instrucoes, arquivos, erro anterior β tem que caber em cima dela. Passar demais nao cabe; passar de menos deixa faltando algo essencial.
β Carregar contexto demais
- βA janela entope: o modelo ignora ou esquece partes relevantes
- βCada volta fica mais lenta e mais cara
- βRuido antigo (tentativas ja descartadas) confunde a decisao atual
β Carregar contexto de menos
- βO loop repete o mesmo erro porque esqueceu que ja tentou aquilo
- βPerde uma decisao tomada duas voltas atras e contradiz a si mesmo
- βReconstroi do zero informacao que ja tinha sido descoberta
π O que normalmente atravessa
- Objetivo original β sempre. Sem ele o loop deriva.
- Ultimo erro/resultado β o que precisa ser corrigido agora.
- Decisoes ja tomadas β resumidas, nao o historico bruto inteiro.
- Contador de voltas β pra saber a distancia do teto de desistencia.
Essa decisao β o que fica, o que sai, como resumir o que sai β e o embriΓ£o do que a Trilha 4 vai chamar de state schema: uma definicao explicita e nomeada do que viaja entre nos. Num loop simples voce pode ate decidir isso informalmente. Num grafo com varios nos, informal nao aguenta.
Conceitos-chave
Mesa de tamanho fixo
Ignora ou esquece o relevante
Perde o que ja foi tentado
Formaliza na Trilha 4
π Reconheca o Ralph loop
Existe uma versao radicalmente simples de loop que ficou popular: rodar o mesmo prompt repetidas vezes ate o objetivo ser alcancado, sem mudar nada entre as voltas alem do que o proprio agente escreveu em arquivos. Essa tecnica foi popularizada a partir do metodo Ralph, de Geoffrey Huntley β daΓ o apelido "Ralph loop" que voce vai ouvir por ai.
O prompt fica fixo, o mundo muda
Voce nao reescreve o prompt a cada volta.
O agente le o estado atual do repositorio (arquivos, testes, TODOs) e o prompt generico basta pra decidir o proximo passo β porque o proprio ambiente virou a memoria.
Funciona bem pra tarefas grandes e bem delimitadas
"Deixa rodando a noite inteira migrando esse codebase."
Cada volta avanca um pedaco, marca o que ja fez (num arquivo de progresso, por exemplo) e a volta seguinte le esse marcador. O teto de voltas e o teto de custo continuam obrigatorios.
π‘ Simples nao e errado, e incompleto
O Ralph loop nao e uma tecnica "menor" ou ingenua β e o loop na sua forma mais crua, e crua funciona pra muita coisa. O que ele nao resolve sozinho e exatamente o que os proximos dois topicos (aberto x fechado, aninhamento) e o Modulo 2.2 (o verificador) vao cobrir: sem um verificador de verdade e sem saber quando parar, "rodar o mesmo prompt" vira "rodar o mesmo prompt pra sempre".
Conceitos-chave
Mesmo prompt toda volta
Geoffrey Huntley
Arquivos carregam o progresso
Ainda precisa de verificador e teto
π Feche o loop (aberto x fechado)
Um loop fechado mede o efeito do que acabou de fazer e usa essa medida pra decidir a proxima volta β isso se chama realimentaΓ§Γ£o (em ingles, feedback): o resultado de uma acao volta como entrada da proxima. Um loop aberto so executa, sem olhar pra tras.
β οΈ Sem medir o efeito, e cron job caro
Um script que roda a cada hora e nunca olha se o que fez deu certo nao e um loop de agente β e um agendador. A diferenca entre um loop de verdade e um cron job disfarcado de IA e exatamente essa: o loop reage ao proprio resultado. Se voce tira a realimentaΓ§Γ£o, sobra so a repeticao β e repeticao sem reacao e cara e nao aprende nada.
β Loop fechado
- β"Rodei o teste, falhou nessa linha, corrijo essa linha"
- βO verificador do topico 1 alimenta o proximo "planejar"
- βA qualidade melhora (ou pelo menos muda) a cada volta
β Loop aberto
- β"Manda o email todo dia as 9h", sem checar se alguem le
- βRepete a mesma acao mesmo que ela esteja falhando sempre
- βNao ha "planejar" de verdade β so "agir" de novo
E aqui mora um limite que vale gravar: a qualidade da medida e o teto de qualidade do loop inteiro. Se o seu verificador so checa "o codigo rodou sem erro" mas nao "o codigo faz o que devia", seu loop fechado converge (chega numa resposta estavel) β so que converge pra a coisa errada. Fechar o loop nao basta; fechar bem e o trabalho.
Conceitos-chave
Resultado vira entrada
Reage x so executa
Repeticao cara e cega
Loop nao passa da qualidade da medida
πͺ Aninhe loops (e escreva o primeiro)
Nada impede um loop de conter outro loop dentro de si. O loop externo decide o que fazer (qual tarefa pegar a seguir), o loop interno executa como fazer aquela tarefa especifica ate o proprio verificador dela passar. Cada volta do loop externo vira, ela mesma, um no no grafo maior.
O que olhar: a caixa grande tem sua propria seta de volta β e um loop. Cada caixa pequena dentro dela tambem tem uma seta de volta β outro loop, escondido dentro do primeiro no. Isso e aninhamento: um loop cujos nos, quando voce abre, sao eles mesmos loops inteiros.
Aninhar funciona bem enquanto os loops nao conversam
Cada loop interno resolve sua tarefa isolado, sem precisar saber o que o loop da tarefa vizinha esta fazendo. E um padrao legitimo e barato de escalar.
Quando os internos precisam se falar, o externo nao da conta sozinho
Se a tarefa 2 depende de algo que a tarefa 1 descobriu, "escolher a proxima tarefa" deixa de ser suficiente β voce precisa de arestas explicitas entre os loops internos. Essa e a ponte pro grafo, e e a Trilha 3 que vai destrinchar quando isso compensa.
π§ͺ Exemplo pratico: um loop minimo com parada em camadas
Objetivo: ver os cinco passos e a condicao de parada em camadas rodando de verdade, num pseudocodigo curto que voce roda no console do navegador (F12) ou no Node.
// condicao de parada em camadas: criterio + teto
function loop(tarefa, verificar, agir, MAX_VOLTAS = 5) {
let contexto = { tarefa, tentativas: [] };
for (let volta = 1; volta <= MAX_VOLTAS; volta++) {
// descobrir + planejar (aqui simplificados: so olham o contexto)
const plano = "tentativa " + volta + " para: " + contexto.tarefa;
// agir
const resultado = agir(plano, contexto);
contexto.tentativas.push(resultado);
// verificar
if (verificar(resultado)) {
return { status: "sucesso", volta, resultado }; // parar por sucesso
}
}
return { status: "desistencia", volta: MAX_VOLTAS }; // parar por teto
}
// exemplo concreto: "adivinhar" um numero
const alvo = 7;
const r = loop(
"achar o numero " + alvo,
(res) => res === alvo,
(plano, ctx) => ctx.tentativas.length + 3 // tenta 3, 4, 5, 6, 7...
);
console.log(r);
Como verificar: voce deve ver
{ status: "sucesso", volta: 5, resultado: 7 } no console β o loop achou o alvo na 5a volta e parou.
Troque MAX_VOLTAS para 3 e rode de novo: agora deve aparecer
{ status: "desistencia", volta: 3 } β o teto cortou antes do sucesso.
Agora troque pelo seu: substitua
<agir> pela sua acao real (chamar um modelo, rodar um comando) e
<verificar> por um teste de verdade. Se a "desistencia" nunca aparecer no seu log real, seu teto provavelmente esta alto demais pra voce perceber.
Checagem rapida (nao bloqueia nada): um loop roda 40 voltas sem nunca medir se o resultado melhorou, so repetindo a mesma acao. Isso e:
Conceitos-chave
Qual tarefa pegar
Como fazer aquela tarefa
Cada volta externa e um no maior
Quando internos precisam conversar
π Resumo do Modulo
Proximo Modulo:
2.2 β O verificador e o gargalo: por que a qualidade do seu loop nunca passa da qualidade de quem checa o resultado.