🎯 Abaporu - O Mestre Orquestrador¶
Author: Anderson Henrique da Silva Location: Minas Gerais, Brazil Created: 2025-10-15 Last Updated: 2025-11-21
Codinome: Abaporu - Núcleo Central da IA
Arquivo: src/agents/abaporu.py
Status: ✅ Tier 2 - 82.48% Coverage - Production Ready
Linhas de Código: 1,253 LOC
Testes: ✅ 34 testes passando (tests/unit/agents/test_abaporu.py - 1,051 LOC)
Autor: Anderson Henrique da Silva
Última Atualização: 2025-11-21
🎯 Missão¶
Orquestração Inteligente Multi-Agente - Coordena investigações complexas através de múltiplos agentes especializados, com capacidades avançadas de auto-reflexão, planejamento dinâmico e execução paralela.
Inspiração Cultural: "Abaporu" (1928), obra-prima de Tarsila do Amaral, símbolo do Modernismo Brasileiro. Representa a síntese de elementos diversos em uma obra coesa e poderosa - assim como este agente sintetiza resultados de múltiplos agentes especializados.
🏗️ Arquitetura¶
Componentes Principais¶
┌──────────────────────────────────────────────────────┐
│ ABAPORU MASTER AGENT │
├──────────────────────────────────────────────────────┤
│ 1. Investigation Planning (LLM-powered) │
│ 2. Agent Selection (Keyword-based) │
│ 3. Parallel Execution (ParallelProcessor) │
│ 4. Self-Reflection (Quality Assessment) │
│ 5. Result Synthesis (Multi-agent Merging) │
└──────────────────────────────────────────────────────┘
│ │ │
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌──────────┐
│ Zumbi │ │ Anita │ │ Tiradentes│
│Anomalies│ │Patterns │ │ Reports │
└─────────┘ └─────────┘ └──────────┘
Fluxo de Investigação¶
User Query → LLM Planning → Agent Selection → Parallel Execution
↓
Result Collection
↓
Quality Assessment
↓
Reflection (if quality < 0.8)
↓
Explanation Generation
↓
Final InvestigationResult
🚀 Capacidades¶
1. Investigation Planning (LLM-powered)¶
- ✅ Prompt engineering para planejamento estruturado
- ✅ Análise de contexto via memory agent
- ✅ Geração de steps com dependências
- ✅ Estimativa de tempo e recursos
2. Intelligent Agent Selection¶
- ✅ Keyword-based routing com 8 categorias:
- Anomaly Detection: "suspeito", "anomalia", "fraud", "irregularidade" → Zumbi, Oxóssi
- Policy Analysis: "política", "efetividade", "impacto" → Bonifácio
- Regional Analysis: "município", "estado", "regional" → Lampião
- Fraud Detection: "fraude", "corrupção", "desvio" → Oxóssi, Obaluaiê
- Pattern Recognition: "padrão", "tendência", "correlação" → Anita
- Report Generation: "relatório", "apresentação", "resumo" → Tiradentes, Niemeyer
- Security Audit: "segurança", "vulnerabilidade", "risco" → Maria Quitéria
- Textual Analysis: "texto", "documento", "narrativa" → Machado
3. Parallel Execution¶
- ✅ Grouping de steps independentes
- ✅
parallel_processorcom 3 estratégias (fast, balanced, thorough) - ✅ Error handling e retries
- ✅ Progress tracking
4. Self-Reflection¶
- ✅ Quality assessment com múltiplas métricas:
- Confidence score (0-1)
- Completeness (findings count)
- Consistency (contradiction detection)
- Evidence strength
- ✅ Iterative improvement (max 3 loops)
- ✅ Strategy adaptation based on results
5. Result Synthesis¶
- ✅ Multi-agent result merging
- ✅ Conflict resolution
- ✅ Source attribution
- ✅ Explanation generation in Portuguese (citizen-friendly)
📋 Métodos Principais¶
Core API¶
async def process(message: AgentMessage, context: AgentContext) -> AgentResponse¶
Processa ações do master agent.
Ações suportadas:
- investigate: Conduz investigação completa
- plan_investigation: Cria plano de investigação
- monitor_progress: Monitora progresso de investigação ativa
- adapt_strategy: Adapta estratégia baseado em resultados intermediários
Exemplo:
message = AgentMessage(
sender="user",
recipient="Abaporu",
action="investigate",
payload={"query": "Detectar anomalias em contratos de saúde"}
)
result = await master_agent.process(message, context)
Investigation Lifecycle¶
async def _investigate(payload, context) -> InvestigationResult¶
Fluxo completo de investigação:
1. Cria plano via LLM
2. Agrupa steps paralelos
3. Executa cada grupo sequencialmente
4. Coleta findings e sources
5. Avalia qualidade (reflection se < 0.8)
6. Gera explicação em português
7. Retorna InvestigationResult
Complexity: O(n_steps × avg_agent_time) com paralelização
async def _plan_investigation(payload, context) -> InvestigationPlan¶
Cria plano de investigação:
- Consulta memory agent para contexto relevante
- Usa LLM para gerar plano estruturado
- Parse e validação via _parse_investigation_plan
- Retorna InvestigationPlan com steps e required_agents
LLM Prompt Structure:
CONTEXTO: {memory_context}
QUERY: {user_query}
TAREFA: Crie plano detalhado de investigação
FORMATO:
- Objetivo claro
- Steps sequenciais/paralelos
- Agentes necessários
- Critérios de qualidade
- Estratégias de fallback
async def _execute_step(step, context) -> AgentResponse¶
Executa step individual:
- Valida existência do agente no registry
- Cria AgentMessage formatada
- Chama agent.execute(action, parameters, context)
- Retorna AgentResponse
Error Handling: AgentExecutionError se agente não registrado
Quality Control¶
async def reflect(task, result, context) -> dict[str, Any]¶
Auto-reflexão e melhoria iterativa:
1. Extrai métricas de qualidade
2. Identifica quality issues:
- low_confidence: confidence < 0.65
- insufficient_findings: len(findings) < 3
- high_uncertainty: std(confidence) > 0.2
- contradictory_results: conflict detection
3. Gera enhancement suggestions
4. Retorna resultado melhorado ou original
Thresholds:
- reflection_threshold: 0.8 (padrão)
- max_reflection_loops: 3 (evita loops infinitos)
def _assess_quality(results) -> float¶
Calcula score de qualidade (0-1):
quality = (
confidence_weight * confidence_score +
completeness_weight * completeness_score +
consistency_weight * consistency_score
)
Weights: confidence=0.4, completeness=0.3, consistency=0.3
Explanation Generation¶
async def _generate_explanation(findings, confidence, query) -> str¶
Gera explicação em português acessível para cidadãos:
Estrutura do Prompt: 1. Resumo Executivo (2-3 frases) 2. Achados Principais (com valores e datas) 3. Contexto Comparativo (referências legais) 4. Análise de Impacto (valores, pessoas afetadas) 5. Próximos Passos (órgãos de controle, ações recomendadas) 6. Nível de Confiança (%, fontes, limitações)
Exemplo de Output:
**RESUMO EXECUTIVO**
Identificamos 12 contratos emergenciais suspeitos no Ministério
da Saúde, totalizando R$ 4.5 milhões. Gravidade: ALTA.
**ACHADOS PRINCIPAIS**
1. Dispensa de licitação irregular - Fornecedor XYZ recebeu...
2. Superfaturamento de 45% acima da média nacional...
[...continua com contexto, impacto, próximos passos...]
Agent Coordination¶
def register_agent(name: str, agent: BaseAgent) -> None¶
Registra agente especializado:
def _group_parallel_steps(steps) -> list[list[dict]]¶
Agrupa steps independentes para execução paralela: - Analisa dependências entre steps - Cria grupos de steps sem dependências mútuas - Preserva ordem dentro de grupos dependentes
Algorithm: Topological sort + grouping
def _parse_investigation_plan(plan_response, query) -> InvestigationPlan¶
Parse resposta do LLM e cria plano estruturado:
Keyword Categories (8 categorias):
anomaly_keywords = ["suspeito", "anomalia", "fraud", ...]
policy_keywords = ["política", "efetividade", "impacto", ...]
regional_keywords = ["município", "estado", "regional", ...]
fraud_keywords = ["fraude", "corrupção", "desvio", ...]
# ... 4 more categories
Step Generation Logic: - Detecção de anomalias → Zumbi com parâmetros específicos - Análise de padrões → Anita com algoritmos apropriados - Geração de relatório → Tiradentes + Niemeyer - Detecção de fraude → Oxóssi + Obaluaiê
Quality Criteria (sempre incluídos):
🔧 Modelos de Dados¶
InvestigationPlan¶
class InvestigationPlan(BaseModel):
objective: str # Objetivo da investigação
steps: list[dict[str, Any]] # Steps de investigação
required_agents: list[str] # Agentes necessários
estimated_time: int # Tempo estimado (segundos)
quality_criteria: dict[str, Any] # Critérios de qualidade
fallback_strategies: list[str] # Estratégias de fallback
InvestigationResult¶
class InvestigationResult(BaseModel):
investigation_id: str # UUID da investigação
query: str # Query original do usuário
findings: list[dict[str, Any]] # Achados da investigação
confidence_score: float # Confiança (0-1)
sources: list[str] # Fontes de dados usadas
explanation: Optional[str] # Explicação em português
metadata: dict[str, Any] # Metadados (agentes, strategies)
timestamp: datetime # Timestamp de conclusão
processing_time_ms: Optional[float] # Tempo de processamento
📊 Métricas de Performance¶
Benchmarks (Ambiente de Teste)¶
- Planning Time: ~2-3s (LLM generation)
- Execution Time: 5-15s (depende de steps paralelos)
- Total Investigation: 8-20s (típico)
- Memory Usage: ~50MB (sem LLM cache)
Quality Metrics¶
- Reflection Trigger Rate: ~15% (investigations with quality < 0.8)
- Improvement After Reflection: +0.12 avg confidence
- Agent Selection Accuracy: ~92% (correct agents for query)
🧪 Testes¶
Test Coverage¶
- Test File:
tests/unit/agents/test_abaporu.py(419 LOC) - Test Cases: 16 tests (13 skipped - needs refactoring after code changes)
- Coverage Target: 80%+ (pending update)
Test Categories¶
✅ Working Tests (3/16)¶
test_initialization- Verifica inicialização do agenttest_plan_creation- Testa criação deInvestigationPlantest_result_creation- Testa criação deInvestigationResult
🔄 Tests Needing Update (13/16) - SKIP reason: "Method refactored"¶
test_create_investigation_plan- Update para novo LLM planningtest_execute_investigation_step- Update para novo execute() methodtest_self_reflection- Update para novo reflect() signaturetest_process_investigation_success- Full integration testtest_process_investigation_with_error- Error handlingtest_adaptive_strategy_selection- Strategy selection logictest_agent_coordination- Multi-agent coordinationtest_quality_assessment- Quality scoringtest_fallback_strategies- Fallback executiontest_investigation_caching- Cache behaviortest_concurrent_investigations- Parallel investigationstest_message_formatting- AgentMessage creationtest_status_tracking- Agent status during execution
🎓 Exemplos de Uso¶
Exemplo 1: Investigação Simples¶
from src.agents.abaporu import MasterAgent
from src.agents.deodoro import AgentContext, AgentMessage
# Inicializar master agent
master = MasterAgent(
llm_service=llm_service,
memory_agent=memory_agent,
reflection_threshold=0.8,
max_reflection_loops=3
)
# Registrar agentes especializados
await master.initialize()
master.register_agent("Zumbi", zumbi_agent)
master.register_agent("Tiradentes", tiradentes_agent)
# Criar contexto
context = AgentContext(
investigation_id="inv-123",
user_id="user-456",
session_id="session-789"
)
# Criar mensagem
message = AgentMessage(
sender="user",
recipient="Abaporu",
action="investigate",
payload={
"query": "Analisar contratos emergenciais de 2024"
}
)
# Processar investigação
result = await master.process(message, context)
print(f"Investigation ID: {result.result.investigation_id}")
print(f"Findings: {len(result.result.findings)}")
print(f"Confidence: {result.result.confidence_score:.2%}")
print(f"Explanation:\n{result.result.explanation}")
Exemplo 2: Investigação Multi-Agente Complexa¶
# Query complexa que ativa múltiplos agentes
complex_query = """
Investigar possível esquema de superfaturamento em contratos de
merenda escolar nos municípios do interior de Minas Gerais.
Analisar padrões suspeitos, detectar fraudes, comparar com
outras regiões e gerar relatório completo com visualizações.
"""
message = AgentMessage(
sender="user",
recipient="Abaporu",
action="investigate",
payload={"query": complex_query}
)
result = await master.process(message, context)
# Agentes ativados automaticamente:
# - Zumbi (anomaly detection em contratos)
# - Oxóssi (fraud detection específico)
# - Lampião (análise regional MG vs outros estados)
# - Anita (padrões estatísticos)
# - Tiradentes (relatório estruturado)
# - Niemeyer (visualizações gráficas)
print(f"Agents Used: {result.result.metadata['agents_used']}")
# Output: ['Zumbi', 'Oxóssi', 'Lampião', 'Anita', 'Tiradentes', 'Niemeyer']
Exemplo 3: Monitoramento de Investigação¶
# Iniciar investigação longa
message = AgentMessage(
sender="user",
recipient="Abaporu",
action="investigate",
payload={"query": "Auditoria completa de contratos federais 2024"}
)
# Processar em background
investigation_task = asyncio.create_task(
master.process(message, context)
)
# Monitorar progresso
while not investigation_task.done():
progress_message = AgentMessage(
sender="user",
recipient="Abaporu",
action="monitor_progress",
payload={"investigation_id": context.investigation_id}
)
progress = await master.process(progress_message, context)
print(f"Progress: {progress.result['progress_pct']:.1%}")
print(f"Current Step: {progress.result['current_step']}")
await asyncio.sleep(5)
# Obter resultado final
final_result = await investigation_task
🔍 Dependências¶
Agentes Especializados (Agent Registry)¶
- Zumbi: Detecção de anomalias (FFT spectral analysis)
- Anita: Análise estatística de padrões
- Oxóssi: Detecção de fraudes (7+ patterns)
- Bonifácio: Avaliação de políticas e compliance
- Lampião: Análise regional e geográfica
- Tiradentes: Geração de relatórios estruturados
- Niemeyer: Visualização de dados (Plotly, NetworkX)
- Machado: Análise textual e NER
- Maria Quitéria: Security audit (MITRE ATT&CK)
- Senna: Roteamento inteligente (se necessário)
Serviços Externos¶
- LLM Service: Maritaca AI (Sabiazinho-3) para planning
- Memory Agent: Nanã (context retrieval)
- Parallel Processor:
src/agents/parallel_processor.py
🚦 Status de Produção¶
✅ Funcionalidades Operacionais¶
- Investigation planning via LLM
- Intelligent agent selection (keyword-based)
- Parallel execution of independent steps
- Self-reflection e quality assessment
- Result synthesis from multiple agents
- Citizen-friendly explanation generation
- Progress monitoring
- Strategy adaptation
- Error handling e fallbacks
- Agent registry management
🔄 Melhorias Implementadas (Tier 2 → Beta 1.0)¶
- Documentação completa de todos os métodos
- Type hints em 100% dos métodos
- Exemplos de uso práticos
- Atualização de testes (remover skips)
- Integração com AgentPool
- Performance benchmarks
🎯 Próximos Passos (Pós-Beta 1.0)¶
- Investigation caching (Redis)
- Real-time streaming de progress (SSE)
- Multi-language support (explicações em EN/ES)
- Advanced planning com chain-of-thought
- Investigation templates para casos comuns
- Dashboard de monitoramento (Grafana)
📚 Referências Técnicas¶
Papers & Concepts¶
- Multi-Agent Systems: Wooldridge (2009) - Agent coordination patterns
- Self-Reflection: Chain-of-Thought Prompting (Wei et al., 2022)
- Parallel Execution: Task parallelization in distributed systems
- Quality Assessment: Confidence calibration in ML systems
Código Relacionado¶
src/agents/deodoro.py- ReflectiveAgent base classsrc/agents/parallel_processor.py- Parallel execution strategiessrc/services/agent_pool.py- Agent managementsrc/core/llm_service.py- LLM integration (Maritaca/Claude)
📞 Suporte¶
Dúvidas ou Issues: anderson-henrique (GitHub)
Documentação Geral: docs/agents/README.md
Testes: Execute JWT_SECRET_KEY=test SECRET_KEY=test pytest tests/unit/agents/test_abaporu.py -v
🎨 "Como Abaporu sintetiza formas em uma obra-prima, este agente sintetiza insights de múltiplos especialistas em uma investigação coesa e poderosa."