O que são Agentes de IA: Guia Completo 2025-2026

Agentes de IA já deixaram de ser curiosidade de laboratório. Em 2025, empresas de todos os tamanhos usam sistemas autônomos para processar documentos, responder tickets, gerar relatórios e até negociar compras. Mas ainda existe uma barreira enorme: a maioria do conteúdo disponível está em inglês, é superficial ou tem viés comercial.

Este guia é a referência que eu gostaria de ter encontrado quando comecei. Vamos cobrir:

  • O que são agentes de IA (de verdade, sem hype)
  • Como funcionam por dentro (arquiteturas, MCP, frameworks)
  • Código Python real e funcional
  • Quando NÃO usar agentes (e o que usar no lugar)
  • Custos reais, segurança e debugging
  • Tendências para 2025-2026

Se você busca "o que são agentes de ia", "como funcionam agentes de ia" ou "tutorial agente de ia", este post cobre tudo.


O que são Agentes de IA

Um agente de IA é um sistema que usa um modelo de linguagem (LLM) para perceber um ambiente, tomar decisões e executar ações de forma autônoma para atingir um objetivo.

A definição é simples, mas a confusão começa porque o mercado usa "agente" para tudo. Vamos clarificar.

Percepção Input do usuário Dados do ambiente Sensores / APIs processa Raciocínio LLM / Modelo de lang. Planejamento Tomada de decisão Chain-of-Thought decide Ação Executar ferramentas Chamar APIs Gerar resposta Memória Contexto · Semântica Loop de feedback — observar resultado

O Espectro: Workflow → Agente Autônomo

Nem todo sistema com LLM é um agente. Existe um espectro:

Tipo Característica Exemplo
Workflow Passos fixos, sem decisão do LLM Pipeline de ETL que resume PDFs
Copilot Assistência humana, ação sob demanda GitHub Copilot, assistente de email
Agente Simples LLM escolhe ferramentas, mas segue roteiro Chatbot que consulta API de clima
Agente Autônomo Define próprios passos, itera até objetivo Sistema que pesquisa, escreve e publica post

A diferença crucial está na autonomia de decisão. Um workflow executa A → B → C sempre. Um agente autônomo pode decidir fazer A, verificar o resultado, pular para D se necessário, e repetir até resolver.

Workflow Passos fixos Sem decisão Assistente Responde perguntas 1 turno Copiloto Sugere ações Humano aprova Agente Autônomo Planeja e executa Loop contínuo Autonomia crescente →

Agente vs Chatbot vs RAG

  • Chatbot: Responde perguntas. Não executa ações no mundo. Estado = conversa.
  • RAG (Retrieval-Augmented Generation): Busca documentos para responder melhor. Ainda reativo.
  • Agente: Tem objetivo, ferramentas e loop de execução. Pode agendar reuniões, enviar emails, comprar passagens.

Regra prática: se o sistema precisa de um humano para cada passo, não é um agente. É um copilot.


Breve Histórico: De AutoGPT ao MCP

Entender a evolução ajuda a separar hype de valor real.

AutoGPT 2023 Agente autônomo genérico LangChain 2022→ Framework para chains e tools CrewAI 2023→ Multi-agente colaborativo MCP 2024 Protocolo universal de contexto futuro EXPERIMENTAÇÃO FRAMEWORKS PADRONIZAÇÃO

2023: A Explosão (AutoGPT, BabyAGI)

Em março de 2023, o AutoGPT viralizou. A promessa: dê um objetivo ao GPT-4 e ele resolve sozinho. A realidade: loops infinitos, custos astronômicos, resultados ruins. AutoGPT provou que autonomia pura sem arquitetura robusta é receita para desastre.

BabyAGI, lançado pouco depois, introduziu o conceito de task queue (fila de tarefas), uma ideia que persiste até hoje.

2023-2024: A Era dos Frameworks (LangChain, CrewAI)

A comunidade percebeu que precisava de estrutura. Surgiram:

  • LangChain (2022, hype em 2023): Primeiro framework sério. Abstrações para chains, tools, memory. Crítica: complexo demais, "framework para tudo e nada".
  • CrewAI (2024): Multi-agentes com papéis definidos. Popular por ser mais simples que LangChain para equipes de agentes.
  • AutoGen (Microsoft, 2023): Agentes conversando entre si. Poderoso, mas curva de aprendizado íngreme.

2025: MCP e a Padronização

O grande avanço de 2025 foi o MCP (Model Context Protocol), lançado pela Anthropic. É um protocolo aberto para conectar LLMs a ferramentas, bancos de dados e APIs.

Antes do MCP, cada framework tinha sua forma de definir tools. Agora, um servidor MCP funciona com qualquer cliente compatível. É o USB-C para integração de agentes.

2025-2026: Agentic AI como Padrão

O termo "Agentic AI" (IA Agêntica) migrou de buzzword para arquitetura real. Empresas como OpenAI (Operator), Anthropic (Claude com computer use) e Google (Project Astra) competem no mesmo espaço: agentes que operam interfaces e sistemas reais.


Como Funcionam: Arquiteturas por Dentro

Um agente de IA, em sua forma mais comum, é um loop:

1. Recebe objetivo + contexto
2. Pensa (LLM gera raciocínio)
3. Escolhe ação/ferramenta
4. Executa ação
5. Observa resultado
6. Repete até objetivo atingido ou limite de iterações

Vamos ver as três arquiteturas mais importantes.

ReAct (Reasoning + Acting)

Proposta por Yao et al. (2022), ReAct é a base da maioria dos agentes hoje. O LLM alterna entre pensar (reasoning) e agir (acting), usando o resultado da ação como contexto para o próximo passo.

Pensamento: Preciso saber o clima em São Paulo para sugerir atividades.
Ação: weather_api(cidade="São Paulo")
Observação: 28°C, ensolarado.
Pensamento: Com sol e 28°C, parques e áreas abertas são ideais...

Vantagem: Interpretabilidade. Cada passo é visível.
Desvantagem: Pode ficar preso em loops se a ferramenta falhar.

Thought Raciocinar sobre o problema e planejar decide Action Executar ferramenta ou chamar API ou gerar texto resultado Observation Observar o resultado e incorporar ao contexto atualiza contexto loop iterativo 1 2 3

Plan-and-Execute

Em vez de decidir passo a passo, o agente primeiro plana todas as etapas, depois executa. Se algo falhar, replaneja.

Plano:
1. Buscar dados de vendas Q3
2. Calcular crescimento YoY
3. Gerar gráfico
4. Escrever resumo executivo

Executando passo 1...

Vantagem: Melhor para tarefas complexas e longas.
Desvantagem: Plano inicial pode ser ruim; replanejamento custa tokens.

Reflexion

Agente com memória de crítica. Após executar, avalia seu próprio desempenho e armazena lições aprendidas para futuras tarefas similares.

Tarefa: Resumir relatório de 50 páginas.
Execução: Feito.
Reflexão: O resumo ficou muito genérico. Próxima vez, focar em números e conclusões.

Vantagem: Melhora com o tempo.
Desvantagem: Complexidade de implementação; memória pode crescer indefinidamente.

O Papel do MCP (Model Context Protocol)

MCP resolve um problema chato: como conectar seu agente a ferramentas.

Antes, se você queria que seu agente usasse Slack, Postgres e Google Calendar, escrevia três integrações diferentes. Com MCP, você escreve (ou usa) um servidor MCP para cada serviço. O agente, como cliente MCP, descobre automaticamente as ferramentas disponíveis.

Arquitetura MCP:

┌─────────────┐     MCP Protocol      ┌─────────────┐
│   Cliente   │ ◄──────────────────►  │   Servidor  │
│  (Agente)   │   (stdio / SSE)       │  (Slack API)│
└─────────────┘                       └─────────────┘
        │
        └──► Outro Servidor (Postgres)
        └──► Outro Servidor (GitHub)

Em 2025, a adoção de MCP cresceu exponencialmente. A maioria dos novos projetos usa MCP ou planeja migrar.

Agente de IA LLM + Raciocínio + Memória Model Context Protocol (MCP) Camada de integração universal Ferramentas calculadora, browser editor de código usa APIs Externas Slack, Notion, GitHub banco de dados chama Fontes de Dados arquivos locais, docs bases vetoriais Sistemas CRM, ERP, cloud serviços internos padroniza a comunicação entre agente e ferramentas

Frameworks em 2025: Qual Usar?

A escolha do framework depende do seu caso. Aqui está o estado real em 2025.

LangChain / LangGraph

  • O que é: Ecossistema maduro. LangChain para chains simples, LangGraph para agentes com estados complexos.
  • Quando usar: Projetos enterprise, fluxos complexos, necessidade de controle fino.
  • Cuidado: Curva de aprendizado íngreme. Muitas abstrações que mudam entre versões.

CrewAI

  • O que é: Framework de multi-agentes baseado em papéis (roles).
  • Quando usar: Equipes de agentes com responsabilidades claras (pesquisador → escritor → revisor).
  • Cuidado: Menos flexível para fluxos não-lineares.

AutoGen

  • O que é: Agentes conversando entre si, com suporte a code execution.
  • Quando usar: Tarefas de coding, debugging, onde múltiplos agentes precisam colaborar.
  • Cuidado: Documentação densa, mais adequado para equipes técnicas experientes.

Vanilla (Sem Framework)

  • O que é: Implementar o loop do agente com requests diretos à API do LLM.
  • Quando usar: Protótipos, sistemas simples, quando você quer entender e controlar cada byte.
  • Cuidado: Reinventa a roda para casos complexos.

Recomendação Prática

Cenário Framework
Primeiro agente, aprendendo Vanilla ou CrewAI
Multi-agentes com papéis CrewAI
Fluxo complexo, estado finito LangGraph
Coding, colaboração agente-agente AutoGen
Produção, escala, manutenção LangGraph ou Vanilla customizado

Exemplos Práticos: Código Python Real

Vamos a código. Dois exemplos: um agente simples com ferramentas, e uma crew multi-agent.

Exemplo 1: Agente Simples com Ferramentas (Vanilla)

Este agente recebe uma pergunta, decide se precisa de uma ferramenta, e responde.

import json
import os
from openai import OpenAI

client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))


def buscar_clima(cidade: str) -> str:
    """Simula uma API de clima."""
    climas = {
        "são paulo": "28°C, ensolarado",
        "rio de janeiro": "32°C, parcialmente nublado",
    }
    return climas.get(cidade.lower(), "Dados indisponíveis")


# Definição das ferramentas disponíveis
TOOLS = [
    {
        "type": "function",
        "function": {
            "name": "buscar_clima",
            "description": "Obtém a previsão do tempo para uma cidade",
            "parameters": {
                "type": "object",
                "properties": {
                    "cidade": {
                        "type": "string",
                        "description": "Nome da cidade",
                    }
                },
                "required": ["cidade"],
            },
        },
    }
]


def agente_simples(pergunta: str, max_iteracoes: int = 5) -> str:
    """Agente ReAct simplificado."""
    messages = [
        {
            "role": "system",
            "content": (
                "Você é um assistente útil. Use ferramentas quando necessário. "
                "Pense passo a passo. Responda em português."
            ),
        },
        {"role": "user", "content": pergunta},
    ]

    for _ in range(max_iteracoes):
        response = client.chat.completions.create(
            model="gpt-4o-mini",
            messages=messages,
            tools=TOOLS,
            tool_choice="auto",
        )

        message = response.choices[0].message

        # Se não há tool calls, o agente terminou
        if not message.tool_calls:
            return message.content

        # Adiciona a resposta do modelo ao histórico
        messages.append({
            "role": "assistant",
            "content": message.content or "",
            "tool_calls": [
                {
                    "id": tc.id,
                    "type": "function",
                    "function": {
                        "name": tc.function.name,
                        "arguments": tc.function.arguments,
                    },
                }
                for tc in message.tool_calls
            ],
        })

        # Executa cada tool call
        for tool_call in message.tool_calls:
            func_name = tool_call.function.name
            func_args = json.loads(tool_call.function.arguments)

            if func_name == "buscar_clima":
                result = buscar_clima(**func_args)
            else:
                result = f"Erro: ferramenta '{func_name}' desconhecida"

            messages.append({
                "role": "tool",
                "tool_call_id": tool_call.id,
                "content": str(result),
            })

    return "Limite de iterações atingido."


# Execução
if __name__ == "__main__":
    pergunta = "Qual o clima em São Paulo e o que fazer lá hoje?"
    resposta = agente_simples(pergunta)
    print(resposta)

O que este código faz:

  1. Define uma ferramenta (buscar_clima)
  2. Envia a pergunta ao LLM com a descrição da ferramenta
  3. O LLM decide se chama a ferramenta
  4. Se chamar, executamos e devolvemos o resultado
  5. O LLM gera a resposta final com os dados reais

Exemplo 2: Crew Multi-Agent (CrewAI)

Este exemplo usa CrewAI para criar uma equipe de agentes que pesquisa e escreve um resumo.

from crewai import Agent, Task, Crew, Process
from crewai.tools import tool
import os


@tool
def pesquisar_web(query: str) -> str:
    """Simula pesquisa na web. Em produção, use Serper, Tavily ou similar."""
    return f"Resultados para '{query}': Agentes de IA são sistemas autônomos..."


# Definição dos agentes
pesquisador = Agent(
    role="Pesquisador de IA",
    goal="Encontrar informações atualizadas sobre agentes de IA",
    backstory="Você é um pesquisador técnico especializado em IA aplicada.",
    verbose=True,
    allow_delegation=False,
    tools=[pesquisar_web],
)

redator = Agent(
    role="Redator Técnico",
    goal="Escrever conteúdo claro e preciso em português",
    backstory="Você traduz conceitos técnicos para linguagem acessível.",
    verbose=True,
    allow_delegation=False,
)

# Definição das tarefas
tarefa_pesquisa = Task(
    description="Pesquise 'agentes de IA 2025' e resuma os principais avanços.",
    expected_output="Um resumo estruturado com 3-4 avanços principais.",
    agent=pesquisador,
)

tarefa_redacao = Task(
    description=(
        "Escreva um parágrafo introdutório sobre agentes de IA "
        "baseado na pesquisa fornecida."
    ),
    expected_output="Um parágrafo de 100-150 palavras em português.",
    agent=redator,
    context=[tarefa_pesquisa],
)

# Criação da crew
crew = Crew(
    agents=[pesquisador, redator],
    tasks=[tarefa_pesquisa, tarefa_redacao],
    process=Process.sequential,
    verbose=True,
)

# Execução
if __name__ == "__main__":
    resultado = crew.kickoff()
    print("\n=== RESULTADO FINAL ===")
    print(resultado)

O que este código faz:

  1. Define dois agentes com papéis distintos
  2. O pesquisador busca informações usando uma tool
  3. O redator recebe o resultado e escreve o conteúdo
  4. A Crew orquestra a execução sequencial

Nota sobre custos: Cada iteração de agente consome tokens. O exemplo acima, com GPT-4o-mini, custa centavos. Com GPT-4o, pode custar alguns dólares dependendo da complexidade. Sempre use gpt-4o-mini para prototipagem.


Quando NÃO usar Agents

Esta é a seção mais importante deste guia. A maioria dos problemas não precisa de agentes.

Anti-Patterns Comuns

  1. Workflow determinístico como agente

    • Se os passos são sempre os mesmos, use um workflow (Airflow, Prefect, script Python).
    • Agentes adicionam latência, custo e imprevisibilidade sem benefício.
  2. Tarefa de uma única chamada LLM

    • "Resuma este texto" não precisa de agente. É uma chamada de API.
    • Adicionar um loop de "pensar → agir" para isso é overengineering.
  3. Sistemas de alta latência crítica

    • Agentes iteram múltiplas vezes. Se você precisa de resposta em < 1s, não use agente.
  4. Decisões de alto risco sem supervisão

    • Nunca deixe um agente autônomo transferir dinheiro, aprovar contratos ou deletar dados sem checkpoint humano.

O que Usar no Lugar

Problema Solução Correta
Pipeline fixo de processamento Workflow (Airflow, Prefect, scripts)
Resposta rápida a pergunta simples LLM direto (zero ou few-shot)
Busca em documentos RAG (sem loop de agente)
Classificação ou extração Fine-tuned model ou LLM com output estruturado
Orquestração de múltiplos serviços API gateway ou workflow, não agente

Regra de ouro: Comece sem agente. Adicione autonomia apenas quando a lógica de decisão for complexa demais para codificar.


Segurança e Limitações

Agentes autônomos são poderosos e perigosos. Aqui estão os riscos reais.

Riscos Principais

  1. Loops infinitos

    • Agente fica preso repetindo a mesma ação. Mitigação: limite de iterações, timeout, detecção de repetição.
  2. Execução de ações indesejadas

    • LLM interpreta errado e chama uma ferramenta com parâmetros perigosos. Mitigação: validação de inputs, permissões granulares, sandbox.
  3. Vazamento de dados

    • Agente envia dados sensíveis para APIs externas. Mitigação: nunca envie PII para tools não auditadas; use dados anonimizados.
  4. Custo incontrolável

    • Loop infinito + GPT-4o = conta surpresa. Mitigação: budgets, alertas, uso de modelos baratos em dev.

Prevenção de Loops

# Técnica simples: detecção de repetição
from collections import deque

class LoopDetector:
    def __init__(self, max_history=5):
        self.history = deque(maxlen=max_history)

    def is_repeating(self, action: str) -> bool:
        self.history.append(action)
        return len(set(self.history)) == 1 and len(self.history) == self.history.maxlen

# Uso no agente
detector = LoopDetector()
if detector.is_repeating(acao_atual):
    raise RuntimeError("Loop detectado. Interrompendo execução.")

Custos Reais (Estimativa 2025)

Usando GPT-4o-mini como baseline:

Cenário Tokens/iteração Iterações Custo aproximado
Agente simples (1 tool) 2K 2-3 $0.001 - $0.003
Crew multi-agent (2 agents) 5K 4-6 $0.01 - $0.03
Agente complexo (múltiplas tools) 10K 5-10 $0.05 - $0.20
Com GPT-4o (não mini) mesmos tokens mesmas 15-20x mais caro

Em escala (milhares de execuções/dia), esses centavos viram milhares de dólares/mês. Monitore sempre.


Debugging de Agentes

Debugar agentes é difícil porque o comportamento é não-determinístico. Algumas técnicas:

1. Logging Estruturado

Registre cada passo do loop: pensamento, ação escolhida, resultado, tokens usados.

import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("agent")

# No loop do agente
logger.info(f"Iteração {i}: pensamento={pensamento}, ação={acao}, tokens={tokens}")

2. Observabilidade com LangSmith / Langfuse

  • LangSmith (LangChain): Tracing visual de cada passo.
  • Langfuse: Open-source, funciona com qualquer framework.

Ambos mostram exatamente o que o LLM "pensou" e por que escolheu cada ação.

3. Testes com Casos Fixos

Crie um conjunto de testes com entradas conhecidas e verifique se o agente escolhe as ferramentas corretas.

def test_agente_clima():
    resultado = agente_simples("Qual o clima em São Paulo?")
    assert "28°C" in resultado or "ensolarado" in resultado

4. Reprodução com Seed

Quando possível, fixe a seed da API para tornar o comportamento reproduzível durante debug.


O Futuro: Tendências 2025-2026

1. Agent Swarms (Enxames de Agentes)

Em vez de 2-3 agentes, sistemas com dezenas ou centenas de agentes especializados. Desafio: orquestração e comunicação eficiente.

2. MCP como Padrão Universal

MCP deve se tornar o protocolo padrão para integração. Esperamos centenas de servidores MCP oficiais até o fim de 2025.

3. Observabilidade Nativa

Frameworks começarão a incluir tracing e métricas por padrão, não como plugin.

4. Agentes em Edge/On-Device

Modelos menores (Phi-4, Llama 3.2) permitindo agentes locais em celulares e IoT, sem dependência de nuvem.

5. Regulamentação

Com agentes tomando decisões reais, regulamentações de transparência e accountability estão em discussão na UE e EUA. Prepare-se para requisitos de logging e auditoria.


Agentes para Análise de Dados

A análise de dados é um dos casos de uso mais promissores para agentes de IA. Em vez de escrever SQL manualmente ou criar dashboards complexos, você pode descrever o que quer saber em linguagem natural e deixar o agente gerar a análise completa.

Frameworks Populares

Framework Descrição Link
PandasAI Converse com DataFrames em linguagem natural GitHub
LangChain + Pandas Agent Agente ReAct para análise com pandas Docs
OpenAI Code Interpreter Sandbox Python integrado ao ChatGPT Docs
Microsoft Fabric Copilot Assistente de IA para BI e engenharia de dados Docs
GitHub Copilot Chat Geração de código de análise em Jupyter notebooks Docs

Pesquisa Acadêmica

O campo evolui rapidamente. Papers recentes demonstram tanto o potencial quanto as limitações:

  • Data Interpreter (Hong et al., 2024) — Agente de LLM especializado em ciência de dados, com planejamento automático e execução iterativa de código.
  • InsightBench (Zhang et al., 2024) — Benchmark que mostra: agentes autônomos ainda geram insights mais superficiais que analistas humanos.
  • BIRD Benchmark (Guo et al., 2023) — Em text-to-SQL com dados reais e sujos, GPT-4 atinge ~55-60% de accuracy. Modelos especializados chegam a 65%.
  • BI-Seek (Ye et al., 2024) — Benchmark para agentes de business intelligence end-to-end.

Exemplo Prático: Agente de EDA Automatizada

O código abaixo implementa um agente que carrega um dataset e executa análise exploratória completa — estatísticas, detecção de outliers, correlações e visualizações:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from pathlib import Path

class AgenteEDA:
    """Agente autônomo para Análise Exploratória de Dados."""

    def __init__(self, df: pd.DataFrame):
        self.df = df
        self.relatorio = []

    def executar_analise_completa(self):
        """Pipeline completo de EDA."""
        self._resumo_geral()
        self._detectar_problemas()
        self._estatisticas_descritivas()
        self._correlacoes()
        self._gerar_visualizacoes()
        return self._compilar_relatorio()

    def _resumo_geral(self):
        self.relatorio.append(f"## 📊 Resumo do Dataset\n\n")
        self.relatorio.append(f"- **Linhas:** {len(self.df):,}\n")
        self.relatorio.append(f"- **Colunas:** {len(self.df.columns)}\n")
        self.relatorio.append(f"- **Tipos:** {dict(self.df.dtypes.value_counts())}\n\n")

    def _detectar_problemas(self):
        """Detecta valores ausentes, duplicatas e outliers."""
        self.relatorio.append(f"## ⚠️ Problemas Detectados\n\n")

        # Valores ausentes
        missing = self.df.isnull().sum()
        missing_pct = (missing / len(self.df) * 100).round(2)
        if missing.any():
            self.relatorio.append("**Valores ausentes:**\n")
            for col in missing[missing > 0].index:
                self.relatorio.append(f"- `{col}`: {missing[col]} ({missing_pct[col]}%)\n")
            self.relatorio.append("\n")

        # Duplicatas
        dupes = self.df.duplicated().sum()
        if dupes > 0:
            self.relatorio.append(f"**Duplicatas:** {dupes} linhas\n\n")

        # Outliers (método IQR)
        numeric_cols = self.df.select_dtypes(include=[np.number]).columns
        outliers = {}
        for col in numeric_cols:
            Q1, Q3 = self.df[col].quantile([0.25, 0.75])
            IQR = Q3 - Q1
            mask = (self.df[col] < (Q1 - 1.5 * IQR)) | (self.df[col] > (Q3 + 1.5 * IQR))
            if mask.sum() > 0:
                outliers[col] = mask.sum()
        if outliers:
            self.relatorio.append("**Outliers (método IQR):**\n")
            for col, count in outliers.items():
                self.relatorio.append(f"- `{col}`: {count} valores\n")
            self.relatorio.append("\n")

    def _estatisticas_descritivas(self):
        """Gera estatísticas descritivas das colunas numéricas."""
        self.relatorio.append(f"## 📈 Estatísticas Descritivas\n\n")
        desc = self.df.describe().round(2)
        self.relatorio.append(desc.to_markdown())
        self.relatorio.append("\n\n")

    def _correlacoes(self):
        """Analisa correlações entre variáveis numéricas."""
        numeric = self.df.select_dtypes(include=[np.number])
        if len(numeric.columns) >= 2:
            corr = numeric.corr()
            # Encontra pares com correlação forte
            strong = []
            for i in range(len(corr.columns)):
                for j in range(i+1, len(corr.columns)):
                    val = corr.iloc[i, j]
                    if abs(val) > 0.7:
                        strong.append((corr.columns[i], corr.columns[j], val))
            if strong:
                self.relatorio.append(f"## 🔗 Correlações Fortes (|r| > 0.7)\n\n")
                for a, b, val in strong:
                    self.relatorio.append(f"- `{a}` ↔ `{b}`: **{val:.3f}**\n")
                self.relatorio.append("\n")

    def _gerar_visualizacoes(self):
        """Gera histogramas, boxplots e heatmap de correlação."""
        numeric = self.df.select_dtypes(include=[np.number])
        if numeric.empty:
            return

        n_cols = min(4, len(numeric.columns))
        fig, axes = plt.subplots(2, n_cols, figsize=(4*n_cols, 8))
        fig.suptitle("Análise Exploratória Automatizada", fontsize=14, fontweight='bold')

        for idx, col in enumerate(numeric.columns[:n_cols]):
            # Histograma
            axes[0, idx].hist(self.df[col].dropna(), bins=30, color='#D97757', alpha=0.7, edgecolor='white')
            axes[0, idx].set_title(f"{col}", fontsize=10)
            axes[0, idx].set_xlabel("")

            # Boxplot
            axes[1, idx].boxplot(self.df[col].dropna(), vert=True)
            axes[1, idx].set_title(f"{col}", fontsize=10)
            axes[1, idx].set_xticklabels([''])

        plt.tight_layout()
        plt.savefig("eda_visualizacoes.png", dpi=150, bbox_inches="tight")
        plt.close()

        # Heatmap de correlação
        if len(numeric.columns) >= 2:
            plt.figure(figsize=(8, 6))
            sns.heatmap(numeric.corr(), annot=True, cmap='RdBu_r', center=0,
                       fmt='.2f', linewidths=0.5)
            plt.title("Matriz de Correlação", fontsize=12, fontweight='bold')
            plt.tight_layout()
            plt.savefig("eda_correlacao.png", dpi=150, bbox_inches="tight")
            plt.close()

        self.relatorio.append(f"## 📁 Arquivos Gerados\n\n")
        self.relatorio.append("- `eda_visualizacoes.png` — Histogramas e boxplots\n")
        self.relatorio.append("- `eda_correlacao.png` — Heatmap de correlação\n\n")

    def _compilar_relatorio(self):
        """Compila o relatório em HTML."""
        html = """<!DOCTYPE html>
<html lang="pt-BR">
<head><meta charset="UTF-8"><title>Relatório EDA</title>
<style>
body{font-family:system-ui,sans-serif;max-width:800px;margin:40px auto;padding:20px;line-height:1.6;color:#141413;background:#FAF9F5}
h2{color:#D97757;border-bottom:2px solid #E3DACC;padding-bottom:8px}code{background:#E3DACC;padding:2px 6px;border-radius:4px;font-size:0.9em}
table{border-collapse:collapse;width:100%;margin:16px 0}th,td{border:1px solid #E3DACC;padding:8px;text-align:left}th{background:#141413;color:#FAF9F5}
</style></head><body>"""
        html += "\n".join(self.relatorio)
        html += "</body></html>"
        Path("relatorio_eda.html").write_text(html, encoding="utf-8")
        return html


# ========== USO ==========
if __name__ == "__main__":
    # Dataset de exemplo: vendas fictícias
    np.random.seed(42)
    df = pd.DataFrame({
        "produto": np.random.choice(["A", "B", "C"], 1000),
        "preco": np.random.normal(100, 25, 1000).round(2),
        "quantidade": np.random.poisson(5, 1000),
        "regiao": np.random.choice(["Norte", "Sul", "Leste", "Oeste"], 1000),
    })
    df["receita"] = (df["preco"] * df["quantidade"]).round(2)

    # Executa o agente
    agente = AgenteEDA(df)
    agente.executar_analise_completa()
    print("✅ Análise completa! Arquivos gerados: eda_visualizacoes.png, eda_correlacao.png, relatorio_eda.html")

Quando Usar (e Quando Não)

Use agentes de análise de dados quando:

  • Precisa de insights rápidos em datasets exploratórios
  • Quer democratizar acesso a dados para times não-técnicos
  • Precisa gerar relatórios repetitivos automaticamente

Não use quando:

  • Os dados são altamente sensíveis e não podem sair do ambiente local (NIST AI Risk Framework)
  • A decisão envolve risco regulatório ou de segurança sem validação humana
  • O dataset é muito pequeno — análise manual é mais eficiente
  • A explicabilidade é mandatória e o processo do agente é uma "caixa preta"

Benchmarks: Expectativa vs. Realidade

Benchmarks recentes mostram que agentes de análise de dados ainda têm limitações significativas:

Benchmark Métrica Melhor Resultado Fonte
BIRD (text-to-SQL) Execution Accuracy ~65% arXiv:2305.03111
InsightBench Qualidade de Insights Inferior a humanos arXiv:2403.07176
BI-Seek Precisão BI End-to-End Em evolução arXiv:2408.17188

A lição prática: agentes são excelentes assistentes, mas ainda não substituem analistas humanos em análises críticas.


Para Continuar Aprendendo

Próximos Passos Práticos

  1. Reproduza o Exemplo 1 deste post com sua própria ferramenta.
  2. Adicione uma segunda tool (ex: busca em banco de dados).
  3. Implemente um LoopDetector para evitar loops infinitos.
  4. Experimente CrewAI para tarefas multi-agente.
  5. Leia sobre MCP e experimente um servidor MCP local.

Conclusão

Agentes de IA são uma ferramenta poderosa quando usada no problema certo. Eles não substituem workflows determinísticos, não são mágica, e exigem cuidado com custos e segurança.

O que mudou em 2025 foi a maturação: temos protocolos (MCP), frameworks estáveis, e uma comunidade que já passou pela fase do hype e sabe onde os agentes realmente entregam valor.

Se você chegou até aqui, tem base suficiente para construir seu primeiro agente de forma consciente. Boa sorte.


Publicado em andrecosta.dev. Última atualização: 2025.