O dia em que o n8n quase destruiu uma empresa: Os ‘Agentes Fantasmas’ em fluxos paralelos e como exorcizá-los

Você já olhou para um fluxo no n8n e sentiu um calafrio na espinha? Um desses silêncios no escritório que antecede um desastre. Pois bem. Eu estava na sala de monitoramento — café frio, olho roxo de insônia — quando vi o gráfico de requisições começar a subir. Não era um pico normal. Era uma escada. Exponencial. O tipo de coisa que faz engenheiros de plantão perderem a sanidade. Aquilo era um ataque? Não. Era o nosso próprio fluxo, nosso querido agente autônomo de suporte que havíamos construído no n8n. Ele havia se transformado em um “agente fantasma”.

O que é um Agente Fantasma?

Imagine uma caveira metalizada dentro do seu pipeline de automação. Um agente fantasma não é um erro de código — é um comportamento parasita que surge quando fluxos paralelos, mal projetados, começam a se retroalimentar. Ele não está nos logs de erro padrão, porque não falha. Ele simplesmente… age. E age sem controle. No nosso caso, o gatilho era um webhook que recebia tickets de suporte. A automação usava um LLM (GPT-4, na época) para classificar a urgência. Se o ticket era “urgente”, o agente disparava uma notificação no Slack. Até aí, normal. O problema estava embaixo do tapete: dois fluxos paralelos concorrentes que, ao receber a confirmação de leitura do Slack (outro webhook), reavaliam o ticket como “urgente revisitado”, gerando um novo evento. Um loop. Mas não um loop simples. Um loop que se multiplicava a cada iteração porque ambos os fluxos se reforçavam mutuamente. Em 45 minutos, tínhamos 14 mil notificações no Slack, a API do OpenAI estourou o rate limit, e o banco de dados do n8n travou com 2 GB de logs espúrios.

O stress teste que ninguém pediu

Detalhe: não houve erro de lógica booleana. O fluxo estava certo no papel. Cada nó individualmente funcionava. Mas a topologia paralela criou um ecossistema onde dois agentes (A e B) interpretavam o mesmo estímulo de formas complementares. Agente A marcava como “processado”, Agente B confirmava o processamento e gerava uma nova tarefa. O resultado não era um loop infinito clássico, mas um efeito dominó recursivo — cada ciclo gerava dois novos ciclos. Isso, meus amigos, é um agente fantasma. Não é um bug, é uma falha de emergência sistêmica.

Por que isso acontece em automações com LLMs?

Os grandes modelos de linguagem são péssimos gatekeepers de si mesmos. Eles não têm noção de estado global. No nosso caso, o prompt do agente dizia: “Se o ticket for urgente, notifique a equipe e aguarde confirmação de leitura.” Soa inocente. Mas cada confirmação de leitura gerava um novo ticket simulado (para rastrear SLA). E o LLM, ao ver um ticket simulado com 0 segundos de idade, o classificava como “extremamente urgente”. A saída? Engenharia de prompt crítica com restrição de contexto temporal. Inserimos uma regra rígida: “Ignore qualquer ticket com timestamp no futuro ou com metadados de ‘reprocessamento’.” Foi a salvação. Mas a cicatriz ficou.

Diagnóstico: como detectar agentes fantasmas

  • Proporção de requisições por usuário: Se um único webhook gerar eventos em cascata >10:1, suspeite.
  • Logs com timestamps idênticos: Dois fluxos processando o mesmo ID em paralelo é bandeira vermelha.
  • Variáveis de ambiente corrompidas: Se o n8n começar a reter estado entre execuções, algo se desconectou.

A arquitetura que exorciza fantasmas

Depois de três noites em claro, redesenhamos o fluxo com barreiras de contenção. A primeira: um nó de deduplicação em memória (Redis) antes de qualquer LLM. A segunda: timeouts progressivos em cada ramo paralelo — se um fluxo levar mais de 5 segundos, aborta. A terceira e mais importante: agente supervisor — um fluxo mestre que audita a cada 10 segundos se o número de execuções ativas excede um threshold. Parece óbvio? Pois é. O óbvio só aparece depois do desastre. Desde então, toda automação que toca LLMs tem um fusível de sanidade: uma condição hard-coded que para tudo se o custo da API ultrapassar $0,50 em 1 minuto.

Lição final: a automação não perdoa

Agentes autônomos são como crianças pequenas: se você não der limites claros e consistentes, eles inventam regras próprias. No n8n, no Make, em qualquer plataforma low-code, o estado implícito é o calcanhar de Aquiles. Cada vez que você puxa um dado de um webhook externo sem validar a origem, está abrindo a porta para um agente fantasma. Não confie na lógica do LLM para se autorregular. Construa camadas de realidade. E, por favor, nunca, jamais, crie dois fluxos que se escutam mutuamente. Acredite em mim: você não quer receber 14 mil notificações no Slack em uma terça-feira chuvosa.

Rolar para cima