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.
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.
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.
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.
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.
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:
- Define uma ferramenta (
buscar_clima) - Envia a pergunta ao LLM com a descrição da ferramenta
- O LLM decide se chama a ferramenta
- Se chamar, executamos e devolvemos o resultado
- 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:
- Define dois agentes com papéis distintos
- O pesquisador busca informações usando uma tool
- O redator recebe o resultado e escreve o conteúdo
- 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-minipara 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
-
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.
-
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.
-
Sistemas de alta latência crítica
- Agentes iteram múltiplas vezes. Se você precisa de resposta em < 1s, não use agente.
-
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
-
Loops infinitos
- Agente fica preso repetindo a mesma ação. Mitigação: limite de iterações, timeout, detecção de repetição.
-
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.
-
Vazamento de dados
- Agente envia dados sensíveis para APIs externas. Mitigação: nunca envie PII para tools não auditadas; use dados anonimizados.
-
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
- Documentação MCP
- LangGraph Docs
- CrewAI Docs
- ReAct Paper Original
- Langfuse (Open Source Observability)
Próximos Passos Práticos
- Reproduza o Exemplo 1 deste post com sua própria ferramenta.
- Adicione uma segunda tool (ex: busca em banco de dados).
- Implemente um LoopDetector para evitar loops infinitos.
- Experimente CrewAI para tarefas multi-agente.
- 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.