Colocamos agentes de IA em produção por 6 meses: Custos ocultos, falhas e lições práticas
A internet está inundada de tutoriais de LangChain mostrando como criar um agente autônomo com 15 linhas de código num Jupyter Notebook. Funciona perfeitamente nos vídeos do YouTube, mas o que acontece quando você pluga isso num banco de dados real e abre para os usuários da sua empresa?
Nós operamos agentes de IA em produção nos últimos 6 meses e a fatura de infraestrutura (e de paciência) chegou. Quero compartilhar um post-mortem honesto sobre o que deu errado e como tivemos que aplicar engenharia de software defensiva ao redor das LLMs.
O Incidente do Loop Infinito (A Fatura de US$ 800)
Modelos agênticos operam em ciclos ReAct (Reasoning + Acting). O agente recebe o prompt, escolhe uma ferramenta, avalia o resultado e tenta novamente se falhar.
Nosso erro: confiar no bom senso matemático da IA.
Tivemos um caso onde uma API externa retornou um formato sujo. O agente entrou num loop: ele chamava a API, dava erro de parsing, ele decidia tentar de novo, dava erro, e assim por diante.
A pegadinha? O contexto cresce a cada iteração. A 1ª chamada gastou 1.000 tokens. A 15ª chamada gastou 20.000 tokens. Em duas horas, queimamos centenas de dólares num único usuário preso em loop.
A correção: Hard limit. Nunca suba um agente sem um max_iterations=5. Bateu o limite? Estoure uma exceção e aborte a thread.
Alucinações de Tool Calling
LLMs atuais sabem qual ferramenta chamar, mas são péssimas em gerar o JSON com os parâmetros corretos. Vimos o agente tentar passar strings como "ontem" para campos DATE de banco de dados, crashando a aplicação.
A correção: O agente apenas sugere a ação. Quem bate no banco de dados é código Python estrito. Usamos Pydantic para validar o JSON da LLM. Se falhar, não damos erro 500 para o usuário: nós capturamos o ValidationError e devolvemos para o agente ("Erro X, refaça o JSON corrigindo o tipo Y"). A IA geralmente conserta na segunda tentativa.
O Circuit Breaker da IA
Deixamos de tratar a LLM como um oráculo e passamos a tratá-la como um microsserviço altamente instável. Implementamos gatilhos de segurança onde o tráfego é retirado da IA e mandado para um fluxo burro caso:
Latência (TTFT - Time to First Token): Se demorar mais de 15 segundos para decidir uma ação, aplicamos timeout forçado.
Gasto de Sessão: Se uma thread única bater 30k tokens, a sessão é encerrada (mitiga ataques de exaustão de carteira).
Confiança do RAG: Se a similaridade do vetor de busca for muito baixa, forçamos o modelo a responder "Não sei" via System Prompt, impedindo a alucinação de preenchimento.
Agentes autônomos exigem muito menos de "Prompt Engineering" e muito mais de arquitetura de software tradicional e guardrails.
Relato extraído das experiências do nosso time de dados. A versão completa das nossas lições está neste artigo no blog da BIX.