📢 Carlos Drummond de Andrade - Agente Comunicador
Implementado em src/agents/drummond.py (39KB, ~24 métodos) com core features funcionais.
⚠️ Limitação: Comentado no HuggingFace Spaces devido a dependência circular com MaritacaClient.
Funciona perfeitamente em ambiente local/Docker. Produção-ready com ressalvas.
🎯 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. Especialista em Natural Language Generation (NLG) e distribuição inteligente de mensagens.
Inspiração Cultural: Carlos Drummond de Andrade (1902-1987), poeta mineiro conhecido por sua capacidade de comunicar sentimentos e ideias complexas em linguagem direta e acessível. Mestre em transformar o técnico em poético.
🧠 Algoritmos e Técnicas Implementadas
1. Geração de Linguagem Natural (NLG)
✅ Template-based Generation
Funcionalidade:
- Mensagens estruturadas com variáveis dinâmicas
- Templates específicos por tipo de comunicação
- Formatação automática por canal
Vantagem: Consistência e controle total sobre o output.
✅ Neural Language Models
Integração:
- Maritaca AI (sabia-4, sabiazinho-4) para português brasileiro
- GPT models como fallback
- Geração contextualizada e natural
Aplicação: Relatórios executivos, resumos personalizados.
✅ Adaptive Text Generation
Funcionalidade:
- Adaptação automática por perfil do usuário:
- Executivo: Linguagem formal, foco em impacto
- Técnico: Detalhes, estatísticas, jargão aceito
- Cidadão: Linguagem simples, analogias, explicações
Exemplo:
Executivo: "Identificadas 12 irregularidades, R$ 5M de impacto."
Técnico: "Anomalias detectadas: bid rigging (5), price fixing (7).
Correlação Pearson r=0.83, p<0.001."
Cidadão: "Foram encontrados 12 casos de contratos suspeitos que
podem ter desviado R$ 5 milhões do seu dinheiro."
✅ Simplificação Linguística
Técnicas:
- Substituição de jargão técnico
- Redução de comprimento de sentenças
- Analogias e exemplos concretos
Score de Legibilidade: Flesch Reading Ease adaptado para PT-BR.
✅ Style Transfer
Funcionalidade:
- Ajuste de tom (formal, informal, urgente)
- Ajuste de registro (institucional, coloquial)
- Preservação de significado
2. Sistema de Notificações Multi-Canal
✅ Priority Queue Algorithm
Funcionalidade:
- Ordenação de mensagens por prioridade:
- CRITICAL: Fraude em andamento, valores >R$ 10M
- HIGH: Anomalias graves, deadlines próximos
- MEDIUM: Alertas importantes
- LOW: Notificações informativas
Implementação:
priority_queue = heapq.heappush(
queue,
(-priority_score, timestamp, message)
)
✅ Circuit Breaker Pattern
Funcionalidade:
- Protege contra falhas em cascata
- Estados: CLOSED → OPEN → HALF_OPEN
- Timeout configurável por canal
Vantagem: Sistema resiliente a falhas de canais externos.
✅ Exponential Backoff
Funcionalidade:
- Retry automático com delay crescente
- Backoff: 1s → 2s → 4s → 8s → 16s (máx)
- Máximo de tentativas: 5
Aplicação: SMS, WhatsApp, webhooks.
✅ Rate Limiting
Funcionalidade:
- Limite por canal:
- Email: 1000/hora
- SMS: 100/hora
- WhatsApp: 50/hora (API restrictions)
- Limite por destinatário: 10 mensagens/dia
Vantagem: Evita spam e bloqueios.
✅ Deduplication Algorithm
Funcionalidade:
- Detecta mensagens duplicadas ou muito similares
- Similarity threshold: 0.9 (cosine similarity)
- Janela temporal: 24 horas
Aplicação: Evita enviar 10x a mesma anomalia.
3. Personalização e Segmentação
✅ Collaborative Filtering
Funcionalidade:
- Aprende preferências de usuário
- Recomenda melhor canal/horário/tom
Técnica: Matrix factorization (user-item).
✅ Clustering de Audiências
Funcionalidade:
- K-means clustering por perfil comportamental
- Segmentos: Executivos, Técnicos, Jornalistas, Cidadãos
Features: Engajamento histórico, canais preferidos, horários.
✅ A/B Testing
Funcionalidade:
- Teste automático de variações
- Métricas: CTR, conversão, engajamento
- Winner selection estatística (p<0.05)
Exemplo: Subject line variations para email.
✅ Sentiment Analysis
Funcionalidade:
- Analisa sentimento do contexto
- Ajusta tom da mensagem (neutro, empático, urgente)
Modelo: BERT fine-tuned para PT-BR.
✅ Demographic Segmentation
Funcionalidade:
- Segmentação por demografia (idade, região, cargo)
- ML para prever melhor abordagem
4. Análise de Engajamento
✅ Click-through Rate (CTR) Tracking
Fórmula:
CTR = (cliques / mensagens enviadas) * 100
Benchmark:
- Email: 2-5% (bom)
- SMS: 10-15% (bom)
- Push: 5-10% (bom)
✅ Message Effectiveness Scoring
Componentes:
effectiveness_score = (
0.3 * delivery_rate +
0.3 * open_rate +
0.2 * ctr +
0.2 * conversion_rate
)
Range: 0.0-1.0 (1.0 = mensagem perfeita).
✅ Response Time Analysis
Métricas:
- Tempo médio até leitura
- Tempo médio até ação
- Horários de maior engajamento
Aplicação: Otimizar timing de envio.
✅ Channel Performance Optimization
Funcionalidade:
- Compara efetividade entre canais
- Sugere melhor canal por tipo de mensagem
- Realoca budget de comunicação
✅ Conversion Funnel Analysis
Funil:
Sent → Delivered → Opened → Clicked → Converted
Métricas:
- Drop-off rate em cada etapa
- Conversion rate final
5. Processamento de Linguagem Natural
✅ Named Entity Recognition (NER)
Entidades Reconhecidas:
- Organizações (Ministério da Saúde)
- Pessoas (fornecedores, servidores)
- Valores monetários (R$ 1.5M)
- Datas (01/01/2025)
- Localizações (Brasília, DF)
Modelo: spaCy pt_core_news_lg.
✅ Text Summarization
Técnicas:
- Extractive: Extrai sentenças-chave
- Abstractive: Gera resumo parafraseado (via Maritaca)
Compression ratio: Configurável (10%, 25%, 50%).
✅ Keyword Extraction
Algoritmos:
- TF-IDF: Term frequency-inverse document frequency
- RAKE: Rapid Automatic Keyword Extraction
- TextRank: Graph-based ranking
Aplicação: Tags automáticas para categorização.
✅ Language Detection
Funcionalidade:
- Detecta idioma automaticamente (PT, EN, ES)
- Fallback para português se incerto
Modelo: fastText language identification.
✅ Translation API Integration
Suporte:
- PT-BR ↔ EN (Google Translate API)
- Tradução automática de notificações
Status: Funcional mas requer API key externa.
📡 Canais de Comunicação Suportados
Enum CommunicationChannel (10 canais)
class CommunicationChannel(Enum):
EMAIL = "email" # SMTP padrão
SMS = "sms" # Twilio/Vonage
WHATSAPP = "whatsapp" # WhatsApp Business API
TELEGRAM = "telegram" # Telegram Bot API
WEBHOOK = "webhook" # HTTP POST callbacks
PUSH_NOTIFICATION = "push_notification" # Mobile push
SLACK = "slack" # Slack webhooks
DISCORD = "discord" # Discord webhooks
PORTAL_WEB = "portal_web" # Web dashboard
API_CALLBACK = "api_callback" # Custom API integration
Cobertura: Email e Portal Web implementados 100%. Demais canais requerem configuração de API keys.
📋 Estruturas de Dados
MessageTemplate
@dataclass
class MessageTemplate:
template_id: str # UUID do template
message_type: MessageType # ALERT, REPORT, NOTIFICATION, etc
language: str # "pt-br", "en", "es"
subject_template: str # Template do assunto
body_template: str # Template do corpo
variables: List[str] # Variáveis dinâmicas
formatting_rules: Dict[str, Any] # Regras de formatação
channel_adaptations: Dict[CommunicationChannel, Dict[str, str]] # Por canal
Exemplo:
MessageTemplate(
template_id="anomaly_alert_001",
message_type=MessageType.ALERT,
language="pt-br",
subject_template="🚨 Anomalia detectada: {anomaly_type}",
body_template="Detectada {anomaly_type} em {organization}...",
variables=["anomaly_type", "organization", "value", "severity"],
formatting_rules={"currency": "BRL", "date_format": "%d/%m/%Y"},
channel_adaptations={
CommunicationChannel.SMS: {"body_template": "Versão curta SMS..."},
CommunicationChannel.EMAIL: {"body_template": "Versão detalhada email..."}
}
)
CommunicationResult
@dataclass
class CommunicationResult:
message_id: str # UUID da mensagem
target_id: str # ID do destinatário
channel: CommunicationChannel # Canal usado
status: str # "sent", "failed", "pending", "delivered", "read"
sent_at: datetime # Timestamp de envio
delivered_at: Optional[datetime] # Timestamp de entrega
read_at: Optional[datetime] # Timestamp de leitura
error_message: Optional[str] # Mensagem de erro se falhou
retry_count: int # Número de tentativas
metadata: Dict[str, Any] # Metadados adicionais
💻 Exemplos de Uso
Enviar Alerta de Anomalia
from src.agents.drummond import CommunicationAgent, CommunicationChannel, MessageType
# Inicializar agente
drummond = CommunicationAgent()
await drummond.initialize()
# Criar mensagem de anomalia
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,
"deviation": 200.0 # 200% acima do esperado
},
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 no Ministério da Saúde.
# Valor contratado: R$ 1,5 milhão (200% acima do esperado: R$ 500 mil).
# Recomenda-se investigação imediata."
# }
Gerar Relatório em Linguagem Natural
# Gerar relatório executivo personalizado
message = AgentMessage(
content={
"type": "generate_summary",
"investigation_results": {
"anomalies_found": 12,
"fraud_cases": 5,
"total_value": 5_000_000.00,
"risk_level": "high",
"organizations_affected": ["Ministério da Saúde", "Ministério da Educação"]
},
"audience": "executive", # executivo, técnico, cidadão
"language": "pt-br",
"tone": "formal"
}
)
response = await drummond.process(message)
print(response.data["summary"])
# "Foram identificadas 12 irregularidades em contratos governamentais,
# totalizando R$ 5 milhões em gastos suspeitos. Cinco casos apresentam
# indícios claros de fraude. Os Ministérios da Saúde e Educação foram
# afetados. Recomenda-se investigação aprofundada e suspensão temporária
# dos contratos envolvidos."