Pular para conteúdo

📢 Carlos Drummond de Andrade - Comunicador do Povo

Author: Anderson Henrique da Silva Location: Minas Gerais, Brazil Created: 2025-10-30 Last Updated: 2025-11-21


Autor: Anderson Henrique da Silva Localização: Minas Gerais, Brasil Última Atualização: 2025-11-21

⚠️ Duas Versões Disponíveis: - Full (drummond.py): NLG completo, 10 canais, multi-canal orchestration - Simple (drummond_simple.py): Leve para HuggingFace Spaces, respostas pré-definidas


Status: ✅ Tier 2 - 79.32% Coverage - Production Ready Arquivo Principal: src/agents/drummond.py (full version) Arquivo Alternativo: src/agents/drummond_simple.py (lightweight version) Tamanho: 1,707 linhas Métodos Implementados: 32 Testes: ✅ 64 testes passando (tests/unit/agents/test_drummond.py) Cobertura: 79.32% (420 statements, 81 missing) Última Atualização: 2025-11-21


🎯 Missão

Geração automática de comunicações, alertas e notificações multi-canal, traduzindo insights técnicos complexos em linguagem acessível ao cidadão brasileiro.

Inspiração Cultural: Carlos Drummond de Andrade, poeta mineiro conhecido por sua capacidade de comunicar sentimentos e ideias complexas em linguagem direta e acessível.


🧠 Algoritmos e Técnicas Implementadas

1. Geração de Linguagem Natural (NLG)

  • Template-based Generation para mensagens estruturadas
  • Neural Language Models (integração com Maritaca Sabiazinho-3)
  • Adaptive Text Generation baseado no perfil do usuário
  • Conversational Memory com context persistence
  • Style Transfer para adequação de tom e registro
  • Personality Prompt com identidade cultural mineira

2. Sistema de Notificações Multi-Canal

  • Priority Queue Algorithm para ordenação de mensagens
  • Circuit Breaker Pattern para canais instáveis
  • Exponential Backoff para retry de falhas
  • Rate Limiting por canal e destinatário
  • Deduplication Algorithm para evitar spam

3. Personalização e Segmentação

  • Collaborative Filtering para preferências
  • Clustering de audiências por perfil comportamental
  • A/B Testing automático para otimização
  • Sentiment Analysis para ajuste de tom
  • Demographic Segmentation com ML

4. Análise de Engajamento

  • Click-through Rate (CTR) tracking
  • Message Effectiveness Scoring
  • Response Time Analysis
  • Channel Performance Optimization
  • Conversion Funnel Analysis

5. Processamento de Linguagem Natural

  • Named Entity Recognition (NER) para contextualização
  • Text Summarization para relatórios executivos
  • Keyword Extraction para tags automáticas
  • Language Detection automática
  • Translation API integration para multilíngue

📡 Canais de Comunicação Suportados

class CommunicationChannel(Enum):
    EMAIL = "email"
    SMS = "sms"
    WHATSAPP = "whatsapp"
    TELEGRAM = "telegram"
    WEBHOOK = "webhook"
    PUSH_NOTIFICATION = "push_notification"
    SLACK = "slack"
    DISCORD = "discord"
    PORTAL_WEB = "portal_web"
    API_CALLBACK = "api_callback"

Total: 10 canais suportados


🔧 Capacidades Principais

✅ Implementadas e Testadas

  1. Geração de Mensagens Personalizadas
  2. Adaptação automática de linguagem por perfil
  3. Templates dinâmicos com variáveis
  4. Formatação específica por canal

  5. Notificações Inteligentes

  6. Priorização automática (LOW → CRITICAL)
  7. Deduplicação de mensagens similares
  8. Retry automático com exponential backoff

  9. Análise de Engajamento

  10. Tracking de entrega, leitura, cliques
  11. Métricas de efetividade por canal
  12. Otimização contínua de mensagens

  13. Integração com Maritaca AI

  14. Geração de texto natural em português
  15. Suporte a múltiplos modelos (sabia-2, sabia-3)
  16. Conversação contextualizada

  17. Memória Conversacional

  18. Histórico de interações por usuário
  19. Contexto mantido entre sessões
  20. Personalização baseada em histórico

⚠️ Limitações Conhecidas

  1. HuggingFace Spaces Deploy
  2. Agente comentado no __init__.py por problemas de import
  3. Causa: Dependência circular com MaritacaClient
  4. Workaround: Usar via import direto from src.agents.drummond import CommunicationAgent

  5. Canais Externos

  6. WhatsApp, Telegram: Requerem configuração de API keys
  7. SMS: Requer integração com provedor (Twilio/Vonage)

  8. Translation API

  9. Multilíngue funcional mas requer API key externa
  10. Suporte nativo apenas para PT-BR

📋 Estrutura de Dados

MessageTemplate

@dataclass
class MessageTemplate:
    template_id: str
    message_type: MessageType  # ALERT, REPORT, NOTIFICATION, etc
    language: str
    subject_template: str
    body_template: str
    variables: List[str]
    formatting_rules: Dict[str, Any]
    channel_adaptations: Dict[CommunicationChannel, Dict[str, str]]

CommunicationResult

@dataclass
class CommunicationResult:
    message_id: str
    target_id: str
    channel: CommunicationChannel
    status: str  # "sent", "failed", "pending", "delivered", "read"
    sent_at: datetime
    delivered_at: Optional[datetime]
    read_at: Optional[datetime]
    error_message: Optional[str]
    retry_count: int
    metadata: Dict[str, Any]

💻 Exemplo de Uso

Enviar Alerta de Anomalia

from src.agents.drummond import CommunicationAgent, CommunicationChannel, MessageType

# Inicializar agente
drummond = CommunicationAgent()
await drummond.initialize()

# Criar mensagem
message = AgentMessage(
    content={
        "type": "anomaly_alert",
        "organization": "Ministério da Saúde",
        "anomaly_type": "price_spike",
        "severity": "high",
        "value": 1_500_000.00,
        "expected_value": 500_000.00
    },
    context=AgentContext(
        conversation_id="conv_123",
        user_id="user_456"
    )
)

# Processar e enviar
response = await drummond.process(message)

# Resultado
print(response.data["notification_sent"])
# {
#   "message_id": "msg_789",
#   "channels": ["email", "portal_web"],
#   "status": "sent",
#   "generated_text": "🚨 Alerta: Detectada anomalia de preço..."
# }

Gerar Relatório em Linguagem Natural

# Gerar relatório executivo
message = AgentMessage(
    content={
        "type": "generate_summary",
        "investigation_results": {
            "anomalies_found": 12,
            "total_value": 5_000_000.00,
            "risk_level": "high"
        },
        "audience": "executive",  # executivo, técnico, cidadão
        "language": "pt-br"
    }
)

response = await drummond.process(message)
print(response.data["summary"])
# "Foram identificadas 12 irregularidades em contratos
#  governamentais, totalizando R$ 5 milhões em gastos
#  suspeitos. Recomenda-se investigação aprofundada..."

🧪 Testes (Atualizado 2025-10-28)

Cobertura de Testes

Cobertura Global: 91.54% ⭐ (+3.76pp)

  • 117 testes passando (100% success rate)
  • 420 statements testados (389 covered, 31 missing)
  • 112 branches testadas (102 covered, 10 partial)

Arquivos de Teste

  1. tests/unit/agents/test_drummond.py - 76 testes (core functionality)
  2. tests/unit/agents/test_drummond_expanded.py - 33 testes (advanced features)
  3. tests/unit/agents/test_drummond_coverage.py - 8 testes (coverage boost)

Principais Cenários Testados

  1. Geração de mensagens
  2. Template rendering
  3. Personalização por perfil
  4. Formatação por canal

  5. Notificações multi-canal

  6. Envio paralelo
  7. Fallback automático
  8. Retry em falhas

  9. Análise de engajamento

  10. Tracking de métricas
  11. Cálculo de efetividade
  12. Otimização de conteúdo

🔄 Integração com Outros Agentes

Consumidores Principais

  1. Tiradentes (Reporter)
  2. Recebe relatórios técnicos
  3. Traduz para linguagem cidadã
  4. Distribui via canais apropriados

  5. Zumbi (Investigator)

  6. Envia alertas de anomalias detectadas
  7. Notifica stakeholders relevantes

  8. Abaporu (Master)

  9. Comunica status de investigações
  10. Envia relatórios consolidados

Dependências

  • MaritacaClient: Geração de texto via LLM
  • ConversationalMemory: Contexto de conversas
  • IntentDetection: Classificação de intenções
  • ⚠️ NotificationService: Envio real por canais externos (opcional)

📊 Métricas e Monitoramento

Métricas Prometheus Exportadas

# Mensagens enviadas
drummond_messages_sent_total{channel="email", status="success"}

# Taxa de entrega
drummond_delivery_rate{channel="whatsapp"}

# Tempo de processamento
drummond_processing_duration_seconds

# Taxa de engajamento
drummond_engagement_rate{channel="portal_web", metric="ctr"}

🚀 Roadmap

Próximas Melhorias (para 100%)

  1. Resolver Import no HuggingFace (prioridade alta)
  2. Refatorar dependência circular com MaritacaClient
  3. Descomentar no __init__.py

  4. Canais Adicionais

  5. Microsoft Teams
  6. Mattermost
  7. Matrix

  8. ML Avançado

  9. Fine-tuning de modelos para tom institucional brasileiro
  10. Personalização automática por análise de histórico

  11. Analytics

  12. Dashboard de efetividade de comunicações
  13. Predição de melhor horário/canal por usuário

⚠️ Notas de Deploy

HuggingFace Spaces

Status Atual: ❌ Não disponível (comentado no __init__.py)

Problema:

# src/agents/__init__.py (linha 46)
# from .drummond import CommunicationAgent  # Comentado

Causa: Import circular com MaritacaClient causa erro no deploy HF

Solução Temporária:

# Import direto quando necessário
from src.agents.drummond import CommunicationAgent
agent = CommunicationAgent()

Produção Local/Docker

Funciona perfeitamente em ambiente local e Docker

Requisitos:

# .env
MARITACA_API_KEY=your_key  # Para geração de texto
NOTIFICATION_CHANNELS=email,portal_web  # Canais habilitados


🔀 Drummond Simple - Versão Lightweight

Objetivo

drummond_simple.py foi criado para deploy em HuggingFace Spaces onde: - Imports complexos causam problemas - Memória limitada - Sem acesso a Maritaca API garantido - Necessidade de respostas rápidas

Diferenças vs. Versão Full

Feature drummond.py (Full) drummond_simple.py
NLG ✅ Template + Neural ❌ Pre-defined only
Canais ✅ 10 notification channels ❌ Chat only
Maritaca ✅ Required ⚠️ Optional
Personalização ✅ User segmentation ❌ Generic
A/B Testing ✅ Built-in ❌ None
Scheduling ✅ Full support ❌ None
Complexity 1,707 lines 149 lines
Dependencies Many Minimal
Memory ~200MB ~50MB

Implementação Simple

from src.agents.drummond_simple import SimpleDrummondAgent

# Inicializar
agent = SimpleDrummondAgent()

# Processar mensagem
message = AgentMessage(
    sender="user",
    recipient="drummond",
    action="chat",
    payload={
        "user_message": "Olá!",
        "intent": {"type": "greeting"}
    }
)

response = await agent.process(message, AgentContext())
print(response.result["message"])
# Output: "Olá! Sou o Cidadão.AI, inspirado no poeta..."

Intents Suportados (Simple)

  1. greeting - Saudações iniciais
  2. help - Pedidos de ajuda
  3. about_system - Informações sobre o sistema
  4. thanks - Agradecimentos
  5. goodbye - Despedidas
  6. default - Fallback genérico

Quando Usar Cada Versão

Use drummond.py (Full): - ✅ Produção local/Docker - ✅ Necessita multi-canal - ✅ Maritaca API disponível - ✅ Personalização por usuário - ✅ A/B testing ativo

Use drummond_simple.py: - ✅ HuggingFace Spaces - ✅ Ambientes com restrições - ✅ Prototipação rápida - ✅ Chat básico suficiente - ✅ Sem Maritaca API

Exemplo de Deploy (HF Spaces)

# app.py (HuggingFace Spaces)
from src.agents.drummond_simple import SimpleDrummondAgent

drummond = SimpleDrummondAgent()

@app.post("/chat")
async def chat(user_message: str):
    message = AgentMessage(
        sender="user",
        recipient="drummond",
        action="chat",
        payload={"user_message": user_message, "intent": {"type": "unknown"}}
    )
    response = await drummond.process(message, AgentContext())
    return {"message": response.result["message"]}

📚 Referências

  • Poeta inspirador: Carlos Drummond de Andrade (1902-1987)
  • NLG Research: Template-based vs Neural approaches
  • Notification Patterns: Circuit Breaker, Exponential Backoff
  • Engagement Analytics: CTR, Conversion funnel

🤝 Contribuindo

Para melhorar este agente:

  1. Resolver o import circular (alta prioridade - drummond.py)
  2. Adicionar templates para novos tipos de comunicação (both versions)
  3. Integrar novos canais (drummond.py only)
  4. Expandir testes para cobrir edge cases (both versions)
  5. Criar testes para drummond_simple.py (pendente)

Autor: Anderson Henrique da Silva Manutenção: Ativa Versão Full: 0.95 (Beta) Versão Simple: 1.0 (Stable)