Pular para conteúdo

🎯 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_processor com 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:

master.register_agent("Zumbi", zumbi_instance)
master.register_agent("Anita", anita_instance)


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):

{
    "accuracy": 0.9,
    "completeness": 0.85,
    "timeliness": 0.8,
    "explainability": 0.9
}


🔧 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)

  1. test_initialization - Verifica inicialização do agent
  2. test_plan_creation - Testa criação de InvestigationPlan
  3. test_result_creation - Testa criação de InvestigationResult

🔄 Tests Needing Update (13/16) - SKIP reason: "Method refactored"

  1. test_create_investigation_plan - Update para novo LLM planning
  2. test_execute_investigation_step - Update para novo execute() method
  3. test_self_reflection - Update para novo reflect() signature
  4. test_process_investigation_success - Full integration test
  5. test_process_investigation_with_error - Error handling
  6. test_adaptive_strategy_selection - Strategy selection logic
  7. test_agent_coordination - Multi-agent coordination
  8. test_quality_assessment - Quality scoring
  9. test_fallback_strategies - Fallback execution
  10. test_investigation_caching - Cache behavior
  11. test_concurrent_investigations - Parallel investigations
  12. test_message_formatting - AgentMessage creation
  13. test_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 class
  • src/agents/parallel_processor.py - Parallel execution strategies
  • src/services/agent_pool.py - Agent management
  • src/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."