🌊 Real-Time Streaming
📋 Visão Geral
O Cidadão.AI implementa streaming em tempo real para comunicação com agentes usando Server-Sent Events (SSE) como tecnologia principal e WebSocket como alternativa experimental.
Por Que Streaming?
- ⚡ Feedback imediato: Usuário vê o progresso da investigação
- 🧠 Transparência: Acompanha o "pensamento" do agente em tempo real
- 📊 Resultados parciais: Não precisa esperar investigação completa
- 🎯 Melhor UX: Interface responsiva e interativa
🚀 Server-Sent Events (SSE)
Arquitetura
SSE é a tecnologia principal para streaming por ser:
- ✅ Mais simples que WebSocket (HTTP-based)
- ✅ Auto-reconnect automático
- ✅ Compatível com HTTP/2 multiplexing
- ✅ Ideal para comunicação unidirecional (servidor → cliente)
Fluxo de Comunicação
📡 Endpoints SSE
POST /api/v1/chat/stream
Chat com streaming em tempo real
Request:
{
"message": "Analise contratos do Ministério da Saúde em 2024",
"agent_name": "abaporu", // ou "auto" para roteamento automático
"stream": true,
"filters": {
"year": 2024,
"min_value": 100000
}
}
Response (SSE Stream):
HTTP/1.1 200 OK
Content-Type: text/event-stream
Cache-Control: no-cache
Connection: keep-alive
event: thinking
data: {"status": "processing", "agent": "abaporu", "timestamp": "2025-01-22T10:00:00Z"}
event: agent_selected
data: {"agent": "zumbi", "reason": "anomaly_detection_specialist"}
event: chunk
data: {"content": "Iniciando análise de contratos...", "progress": 10}
event: chunk
data: {"content": "Analisando 1.234 contratos...", "progress": 30}
event: chunk
data: {"content": "15 anomalias detectadas via FFT analysis...", "progress": 60}
event: chunk
data: {"content": "Confiança: 89%...", "progress": 90}
event: complete
data: {"status": "completed", "anomalies": 15, "confidence": 0.89, "investigation_id": "INV-123"}
Tipos de Eventos
| Evento | Descrição | Payload |
|---|---|---|
thinking | Agente iniciando processamento | {status, agent, timestamp} |
agent_selected | Agente selecionado pelo router | {agent, reason} |
chunk | Resultado parcial | {content, progress} |
error | Erro durante processamento | {error, message, code} |
complete | Investigação concluída | {status, anomalies, confidence, id} |