- A maioria das equipes que cria sistemas baseados em LLM tenta começar por agentes (Agents), mas quase sempre esbarra em complexidade, falta de controle e dificuldade de depuração, e tudo desmorona com facilidade
- Padrões de agente de verdade, que exigem memória, RAG, uso de ferramentas e controle de workflow ao mesmo tempo, são raros na prática; a maior parte dos problemas pode ser resolvida de forma mais eficaz com workflows simples (chaining, paralelização, roteamento etc.)
- A recomendação é aplicar primeiro 5 padrões de workflow com LLM úteis no mundo real e usar agentes com cautela apenas quando forem realmente necessários
- Prompt chaining, paralelização, roteamento, orchestrator-worker, evaluator-optimizer
- Mesmo quando agentes são necessários, o essencial continua sendo participação humana, controle claro e observabilidade (Observability)
Agentes de IA: eles são mesmo necessários?
- Insights de Hugo Bowne-Anderson, que oferece consultoria e treinamento relacionados à construção de sistemas com LLM para diversos engenheiros e equipes, incluindo Netflix, Meta e a Força Aérea dos EUA
Um começo errado: por que todo mundo está obcecado por agentes
- Muitas equipes, ao iniciar projetos com LLM, priorizam a adoção de estruturas complexas como agentes, memória, roteamento, uso de ferramentas e personalidade
- Quando se tenta montar isso na prática, surgem falhas e comportamentos anômalos com frequência em vários pontos, como colaboração entre agentes, escolha de ferramentas e memória de longo prazo
- Como exemplo, em um projeto de agente de pesquisa baseado em CrewAI, houve a experiência de ver cada papel (pesquisador, resumidor, coordenador) falhar em cooperar como o esperado e o sistema ruir sem reação
O que é um agente?
- Quatro características de sistemas com LLM: memória, recuperação de informação (RAG), uso de ferramentas e controle de workflow
- A última delas, controle de workflow (quando o LLM decide diretamente a próxima etapa ou se deve usar uma ferramenta), é chamada de característica agêntica
- Na maior parte do trabalho real, workflows simples (chaining, roteamento etc.) mostram maior estabilidade
Padrões de workflow com LLM para usar no lugar de agentes e que são úteis na prática
1. Prompt Chaining
- Descrição: divide várias tarefas em uma sequência de etapas (chain), fazendo com que o LLM processe cada uma delas em ordem
- Exemplo: extrair nome, cargo e empresa de um perfil no LinkedIn → adicionar informações extras sobre a empresa (missão, vagas etc.) → redigir um e-mail personalizado com base no perfil + informações da empresa
- Vantagens: como cada etapa fica claramente separada, é fácil rastrear e corrigir a causa de bugs; isso ajuda na depuração e na manutenção
- Diretrizes:
- Indicado para tarefas conectadas de forma sequencial
- Se uma única etapa falhar, toda a cadeia pode quebrar
- Ao dividir em unidades menores de trabalho, é possível obter resultados mais previsíveis e depuração mais simples
2. Paralelização (Parallelization)
- Descrição: executa várias tarefas independentes ao mesmo tempo para acelerar o processo como um todo
- Exemplo: extrair em paralelo vários campos, como formação, experiência e habilidades, de perfis de várias pessoas para reduzir o tempo total de processamento
- Vantagens: é eficiente para extração/processamento de dados independentes mesmo em grande escala, e combina bem com ambientes distribuídos
- Diretrizes:
- Cada tarefa deve ser independente, e a execução simultânea deve melhorar significativamente a velocidade total
- É preciso ter cuidado com exceções como race condition, timeout e situações semelhantes durante a execução paralela
- Adequado para processamento de grandes volumes de dados e análise simultânea de várias fontes
3. Roteamento (Routing)
- Descrição: o LLM classifica os dados de entrada e os direciona automaticamente para o workflow apropriado em cada caso
- Exemplo: em uma ferramenta de suporte ao cliente, classificar se a entrada é uma dúvida sobre produto, problema de pagamento ou solicitação de reembolso e então encaminhar automaticamente para o workflow correspondente; se o tipo for ambíguo, enviar ao handler padrão
- Vantagens: permite aplicar lógica de processamento especializada para cada tipo de entrada, separando casos diferentes de forma limpa
- Diretrizes:
- Use quando tipos de entrada ou situações diferentes exigirem tratamento separado
- Em casos limítrofes ou situações excepcionais, o roteamento pode falhar ou deixar passar casos
- É essencial projetar um handler catch-all para situações não classificadas ou excepcionais
4. Orchestrator-Worker
- Descrição: um LLM no papel de orchestrator decompõe a tarefa e toma decisões, delegando subtarefas a workers (LLMs de execução) e controlando diretamente o fluxo e a ordem geral
- Exemplo: classificar um perfil-alvo como tech/non-tech → se for tech, delegar a geração do e-mail a um worker especializado; se for non-tech, delegar a outro worker
- Vantagens: separa tomada de decisão (classificação/julgamento) da execução (processamento individual), o que favorece controle dinâmico do fluxo e expansão
- Diretrizes:
- Adequado quando cada tarefa exige tratamento especializado, além de ramificações complexas e coordenação por etapas
- Se o orchestrator decompor ou delegar tarefas incorretamente, podem surgir erros em todo o fluxo
- Mantenha a lógica explicitamente simples e projete com clareza as condições de delegação, ordem e encerramento
5. Evaluator-Optimizer
- Descrição: o LLM avalia o resultado (pontuação/feedback) e, se ele não atingir o critério exigido, revisa e melhora repetidamente
- Exemplo: gerar um rascunho de e-mail → o avaliador atribui uma nota de qualidade/feedback → encerrar ao atingir um nível mínimo ou ao ultrapassar o número máximo de iterações; caso contrário, revisar novamente
- Vantagens: permite melhorar iterativamente a qualidade do resultado final até um nível desejado, sendo útil quando há critérios quantitativos
- Diretrizes:
- Indicado para workflows em que a qualidade é mais importante que a velocidade e em que a otimização iterativa é necessária
- Sem condição de parada, o processo pode cair em loop infinito
- É indispensável definir critérios claros de qualidade e limites de iteração
Quando um agente realmente é necessário
- Agentes mostram seu valor em ambientes onde há intervenção humana em tempo real (Human-in-the-loop) garantida
- Exemplo 1: apoio em ciência de dados — o LLM tenta de forma criativa consultas SQL, visualizações e recomendações de análise de dados, e a pessoa avalia/corrige o resultado
- Exemplo 2: parceiro criativo — ideias de copy, sugestões de headline e recomendações de estrutura de texto, em que a correção de direção e a avaliação de qualidade por humanos são centrais
- Exemplo 3: assistente de refatoração de código — sugestões de design patterns, detecção de edge cases e otimização de código, com aprovação/complementação do desenvolvedor
- Característica: o agente não faz “tudo sozinho”; ele é mais eficaz em um ambiente em que uma pessoa corrige erros e ajusta a direção em tempo real
Quando agentes não são adequados
- Sistemas enterprise e mission-critical (finanças, saúde, jurídico etc.):
- Como confiabilidade da automação e comportamento determinístico são importantes, uma estrutura em que um agente LLM toma decisões é arriscada
- Devem ser usados padrões de controle claros, como orchestrator e roteamento
- Qualquer situação em que estabilidade e previsibilidade sejam importantes
- Casos anormais: problemas em que o agente escolhe ferramentas erradas repetidamente sem contexto/memória, ou em que a divisão de trabalho/coordenação falha e todo o fluxo quebra
- Fatores de falha de sistemas de agentes que aparecem com frequência no mundo real
- Falta de um sistema de memória explícito, causando perda de contexto
- Poucas restrições na escolha de ferramentas (uso desnecessário/incorreto de tools)
- Dependência excessiva de uma estrutura de delegação livre, levando ao fracasso na coordenação colaborativa
Lições para o design em produção
- Mesmo ao adotar agentes, é indispensável um nível de design, observabilidade e mecanismos de controle equivalente ao de um sistema de software maduro
- Em vez de frameworks complexos de agentes, é mais rápido e seguro projetar com observabilidade (Observability), loops de avaliação claros e uma estrutura controlável diretamente
Conclusão (TL;DR)
- Agentes muitas vezes são superestimados e usados em excesso
- Na maioria dos desafios reais, padrões simples de workflow são mais adequados
- Agentes mostram seu verdadeiro valor em ambientes com participação humana direta
- Em sistemas estáveis, podem ser um fator de risco
- Projete com observabilidade, controle explícito e uma estrutura de avaliação iterativa
- Em vez de frameworks complexos de agentes, projetar com observabilidade, loops de avaliação claros e uma estrutura controlável diretamente é, na prática, o segredo para desenvolver serviços baseados em LLM de forma mais rápida e segura
6 comentários
Há um mês, usando o CURSOR para aprender o que era programação com IA, comecei a desenvolver um framework de desenvolvimento.
Por cerca de 3 semanas, repeti o ciclo de sucesso seguido pela quebra do código-fonte que havia sido validado por um AI Agent, e tentei de todas as formas controlar o AI Agent, mas falhei.
Então percebi que, antes de desenvolver o framework, a prioridade era desenvolver o código-fonte para controlar o AI Agent.
No fim, exatamente 1 mês depois de começar tentando entender o que era a IA, alcancei o resultado de concluir o desenvolvimento de um software 100% implementável e 100% operável por IA, com controle completo sobre o AI Agent (mais precisamente, sem necessidade de LLM externo nem de AI Agent).
Agora, há 14 dias, estou conduzindo o processo de criar e fazer cumprir regras operacionais enquanto dou treinamento adicional a essa META AI para um refinamento extra, e ao mesmo tempo estou migrando, melhorando e padronizando três sistemas MES que antes haviam sido feitos de forma incompleta por pessoas, já entrando na fase final.
E agora estou me preparando para mais uma evolução.
Mas, no prompt chaining, não seria igualmente válido chamar de agentes cada um dos componentes, como o LLM que executa prompts individuais, o worker de execução, o worker orquestrador e o LLM avaliador?
Ah, então existe isso de "controle final do fluxo de trabalho (quando o LLM decide diretamente a próxima etapa ou se deve usar uma ferramenta) ser chamado de característica agêntica". Entendi. Era um texto falando com foco em
autonomous agent. Ainda não entendo muito bem sobre agentes, então...Opiniões do Hacker News
https://github.com/astronomer/airflow-ai-sdk
Eu também estou atualmente criando um Computer-use Agent chamado UseDesktop.
https://youtu.be/aBkbsvMxP_A?si=uaugxKQEu4ZEz7jq
usedesktop.com
Concordo com a maior parte do que foi dito.
Neste texto, em vez de dicas realmente práticas, ele aborda mais só uma visão geral em alto nível, então se eu fosse acrescentar mais algumas dicas para desenvolver agents/fluxos agentic baseados em LLM, no fim das contas LLMs são baseados em transformers (isto é, inferência probabilística; com base no token/state atual, eles não “entendem” contextual ou semanticamente a próxima palavra para então produzi-la, mas geram o output de forma probabilística), então por melhor que seja o
sys prompt, com frequência eles não dão a resposta desejada (por exemplo, você pede uma resposta em formato JSON e às vezes ele esquece um}etc.). Por isso, é essencial sempre adicionar várias funções de fallback baseadas em regex.E quando você escreve um
sys promptpara obter structured output, normalmente usa um modelo non-reasoning, e quanto maior o contexto, mais frequentemente ocorrem alucinações, então muitas vezes é melhor criar váriossys promptse encadear eles.Ao desenvolver um serviço, vários erros podem acontecer, então o ponto-chave é projetar a arquitetura do serviço de forma modular e fault-tolerant (por exemplo, deixar o supervisor agent assíncrono e os demais agents síncronos), especialmente no caso de sistemas agentic e agents, onde outputs inesperados acontecem com frequência.
Por isso, desde o início, ao escrever o código, é bom seguir SRP e escrever de forma declarativa; quero dizer que vale a pena adotar uma abordagem funcional (= sem side effects e com fluxo intuitivo).
E isso pode variar dependendo de você usar LLM via API ou servir o modelo diretamente, mas se for servir um SLM ou LLM por conta própria, é melhor não fazer model serving no mesmo servidor que hospeda o backend; separar IO bound tasks e CPU bound tasks (isto é, tasks que exigem GPU, multiplicação de matrizes e coisas do tipo) em servidores diferentes é melhor para fault tolerance (por exemplo, hospedar CPU bound tasks no Runpod).
Além disso, há várias outras dicas de desenvolvimento, mas vou parar por aqui para não ficar longo demais.
Espero que isso ajude alguém.
Muito obrigado por compartilhar sua valiosa experiência e opinião. A opinião de alguém que está atuando diretamente na área ajuda muito.