Agent loop
Neste laboratório você vai construir e inspecionar um agente de suporte com quatro ferramentas locais. O objetivo é compreender o controle de execução antes de colocar um modelo no circuito. Você precisará somente de Node.js para rodar o exemplo em um arquivo .cjs. Não há chave de API, acesso à internet ou alteração de pedido real. A saída apresenta eventos, observações e uma recomendação simulada, suficientes para investigar o caminho seguido.
Sua entrega será um pequeno runtime acompanhado de três evidências: uma execução concluída, uma execução interrompida por dado inválido e uma execução que atinge o orçamento. Essas evidências devem mostrar por que o agente terminou. Não basta apresentar a frase final. A mesma frase pode esconder chamadas repetidas, dados inventados ou uma falha silenciosa. O laboratório usa uma política determinística como substituta de decisão, e não afirma ter validado um provedor de modelos.
AgentesAo terminar esta aula
- O histórico revela como a resposta foi obtida e por que a execução terminou.
- Uma política repetitiva deve ser interrompida pelo runtime.
- A validação das ferramentas continua necessária ao substituir a política por um modelo.
Antes de continuar: Leitura: Agent loop
Prepare o objetivo e os contratos
FundamentosCrie uma pasta local e salve o código da resolução como agente.cjs. Antes de executar, escreva o contrato das ferramentas: lerPedido recebe um identificador e retorna item e destino; lerEstoque recebe o item e retorna quantidade; lerPrazo retorna uma estimativa; redigir recebe as observações necessárias. No código, os argumentos são simplificados pela captura do pedido e do estado. Ao transformá-los em chamadas de modelo, torne esses argumentos explícitos e valide tipos, tamanho e identificadores. O fato de o modelo produzir JSON não garante que o pedido exista ou pertença ao usuário.
Defina a recomendação como saída informativa. Ela não confirma compra, despacho ou reserva. Essa distinção muda o limite de autorização: consultar dados de um pedido autorizado é uma operação diferente de alterar seu estado. Uma ferramenta futura de reserva exigiria validação própria, chave de idempotência e a política de aprovação da aplicação. Manter quatro ferramentas pequenas ajuda a enxergar essa fronteira. Não reúna consulta e alteração em uma função que pareça apenas leitura; o runtime precisa saber quando um efeito externo está sendo proposto.
Percorra os eventos, não apenas a resposta
FundamentosRode o caso P7 e leia a ordem dos eventos. A primeira decisão escolhe lerPedido porque ainda falta identificar o item. A segunda usa a informação observada para obter estoque. Em seguida aparece prazo, e só depois redigir. Marque no papel qual campo do estado foi acrescentado a cada passo. Se você trocar a ordem para redigir primeiro, a recomendação deixa de possuir as premissas necessárias. O erro seria arquitetural, mesmo que uma saída padrão ainda parecesse plausível.
Altere o estoque para zero e observe se a recomendação continua dizendo disponível. No exemplo, ela usa a quantidade observada; uma versão com modelo precisa de casos de avaliação que detectem promessas incompatíveis com o estoque. Acrescente ao registro o argumento recebido por cada ferramenta quando expandir o código. Evite registrar dados pessoais completos. Para investigar uma consulta incorreta, normalmente bastam identificador interno, nome da ferramenta, duração e status, com os detalhes sensíveis guardados em armazenamento apropriado.
Provoque uma falha controlada
FundamentosExecute com P404. A ferramenta lança um erro conhecido, e o runtime devolve status de falha. Confirme que redigir não foi chamada depois disso. Agora injete uma política que sempre escolhe lerPedido: sem a condição de observação ausente, ela consome o limite e termina por orçamento. Os dois casos precisam de rótulos diferentes porque pedem correções diferentes. O identificador inválido exige entrada válida; a repetição exige corrigir a política. Aumentar o teto resolveria nenhum dos dois problemas de maneira confiável.
Para praticar reflexão limitada, escreva uma nota sobre a repetição: a decisão ignorou observações anteriores. Corrija apenas essa regra e rode de novo o mesmo caso, depois um pedido diferente. Não altere objetivo, ferramentas e dados simultaneamente, pois perderia a capacidade de atribuir a melhora à mudança. Registre a contagem de passos antes e depois. Esse procedimento não prova que um modelo real se comportará igual; demonstra que o mecanismo de execução possui uma defesa mensurável contra decisões repetitivas.
↗ Reflexion: Language Agents with Verbal Reinforcement Learning
Converta a evidência em uma decisão de projeto
FundamentosSeu README deve incluir o objetivo, a fronteira informativa, os contratos e os estados finais possíveis. Anexe o histórico nominal e os históricos de falha. Explique por que a execução é um único loop, mesmo usando várias ferramentas: existe um controlador que observa o resultado e decide a próxima transição. Compare com um workflow fixo que chama as quatro funções sempre na mesma ordem. A diferença relevante é a possibilidade de alterar o caminho conforme observações e de encerrar cedo quando não há dados válidos.
Exercício aplicado
Uma equipe de suporte precisa recomendar o próximo passo para P7 consultando pedido, estoque e prazo antes de redigir a resposta. Demonstre também o comportamento para P404 e para uma política que repete a mesma consulta.
- Salve o exemplo, execute P7 e associe cada evento a uma mudança do estado.
- Execute P404 e confirme que nenhuma recomendação logística foi fabricada.
- Injete uma política repetitiva, capture o encerramento por orçamento e restaure a seleção correta.
- Descreva uma decomposição alternativa e justifique se ela reduz dependências ou apenas acrescenta coordenação.
Abrir resolução comentada
No caso nominal, as quatro ferramentas produzem observações sucessivas e redigir gera a saída. Para demonstrar orçamento, substitua temporariamente a seleção da próxima lacuna por uma escolha fixa de lerPedido. O runtime deve chegar ao retorno orçamento após oito iterações, sem passar pela condição de sucesso. Restaure a política original após guardar a evidência.
A resolução do erro de pedido desconhecido preserva o histórico anterior e devolve um status explícito. Essa escolha permite apresentar ao usuário uma mensagem útil sem fingir que a análise logística foi concluída. Na integração real, mantenha o controle de parada fora do prompt e registre decisões públicas suficientemente curtas para auditoria.
function executar(id) {
const estado = {}, eventos = [];
const tools = {
lerPedido: () => { if (id !== 'P7') throw new Error('pedido desconhecido'); return {item:'I2', destino:'Cuiaba'}; },
lerEstoque: () => ({item:estado.lerPedido.item, quantidade:3}),
lerPrazo: () => ({dias:2, fonte:'tabela local'}),
redigir: () => ({disponivel:estado.lerEstoque.quantidade > 0, prazoDias:estado.lerPrazo.dias})
};
for (let passo=0; passo<8; passo++) {
const nome = Object.keys(tools).find(k => !(k in estado));
if (!nome) return {status:'sucesso', resultado:estado.redigir, eventos};
try { estado[nome]=tools[nome](); eventos.push({passo,nome,observacao:estado[nome]}); }
catch (erro) { return {status:'falha',erro:erro.message,eventos}; }
}
return {status:'orcamento',eventos};
}
console.log(JSON.stringify([executar('P7'),executar('P404')],null,2));Como conferir seu resultado
- A execução nominal utiliza quatro ferramentas e termina com sucesso.
- O pedido desconhecido termina com falha e histórico consultável.
- A política repetitiva termina pelo limite de passos.
Aplique em um problema novo
Primeiro resolva sem consultar a resposta. Explique suas decisões e guarde a evidência. A conclusão de leitura é independente desta autoavaliação.
Confira seus pré-requisitos
- Relacionar observações e próxima ação.
- Definir orçamento de passos.
Fixture: serial S8 possui garantia válida; S404 não existe. A política nominal consulta serial/garantia/redige; a perturbada consulta serial repetidamente. Há seis passos máximos. Resolva estados finais.
Conferir raciocínio e critérios de domínio
S8 nominal chega a sucesso somente após observar garantia válida; a recomendação cita essa consulta.
A política perturbada termina por orçamento após seis consultas, sem sucesso. Repetir observação não satisfaz a condição de garantia consultada.
S404 encerra com erro de serial ausente e sem garantia fabricada; o histórico permite distinguir falha de parada por orçamento.
Evidências para autoavaliação ou revisão por pares
- Sucesso sustentado: S8 nominal chega a sucesso somente após observar garantia válida; a recomendação cita essa consulta.
- Parada por orçamento: A política perturbada termina por orçamento após seis consultas, sem sucesso. Repetir observação não satisfaz a condição de garantia consultada.
- Identificador ausente: S404 encerra com erro de serial ausente e sem garantia fabricada; o histórico permite distinguir falha de parada por orçamento.
Um erro frequente
Chegar ao limite é completar a tarefa.
Esgotar orçamento é parada controlada, não sucesso.
Teste sua compreensão
Responda com suas palavras antes de abrir o comentário. Saber explicar uma decisão é parte do domínio.
1. O que muda o plano durante a execução?
Uma observação que altera as premissas ou revela uma lacuna.
O plano é uma hipótese; dados novos podem invalidar uma etapa prevista.
↗ ReAct: Synergizing Reasoning and Acting in Language Models
2. Reflexão garante uma resposta correta?
Não. É uma estratégia de revisão que exige orçamento e avaliação.
Uma nova tentativa precisa mostrar melhora em casos observáveis.
↗ Reflexion: Language Agents with Verbal Reinforcement Learning
3. Por que limitar passos fora do prompt?
Porque a aplicação deve interromper mesmo uma política que não obedece às instruções.
A parada é uma propriedade do runtime, não uma promessa textual.
Seu progresso fica salvo neste navegador. Concluir a leitura não substitui demonstrar o domínio nos exercícios.
Referências e aprofundamento
Documentação oficial e trabalhos originais. As referências registram o escopo e as limitações para você conferir o que sustentam.
- Running agents
OpenAI • consulta: 2026-10-06
OpenAIAgentesLoop do SDK, tool calls, critérios de término, streaming e continuação.
Limites: Controle de duração e ferramentas exige configuração; SDK não fornece automaticamente infraestrutura durável.
- ReAct: Synergizing Reasoning and Acting in Language Models
Yao et al. / arXiv • consulta: 2026-10-06
FundamentosIntercala raciocínio, ações e observações; decomposição, planejamento e ajuste de planos.
Limites: Paper histórico; resultados dependem de tarefas e modelos. Traços de raciocínio do paper não equivalem a acesso ao raciocínio privado de modelos atuais.
- Thinking in LangGraph
LangChain • consulta: 2026-10-06
LangGraphAgentesDecompor passos, representar estado, roteamento, recuperação e escolhas entre loops e grafos.
Limites: Tutorial de desenho; ajustar o exemplo ao caso de uso e à versão instalada.
- Reflexion: Language Agents with Verbal Reinforcement Learning
Shinn et al. / arXiv • consulta: 2026-10-06
AgentesFeedback verbal e memória episódica para melhorar tentativas posteriores.
Limites: Reflexão não garante acerto; limitar tentativas e medir benefício e custo.