Sistema robusto de classificação de texto multi-agente baseado em LangChain e LangGraph. O projeto utiliza Redis para gerenciamento eficiente de cache e filas de mensagens, garantindo alta performance. O armazenamento vetorial e a recuperação de informações (RAG) são realizados através do Qdrant, integrando OpenAI Embeddings para análise semântica profunda e memória de longo prazo. O sistema evolui de uma classificação simples para Aspect-Based Sentiment Analysis (ABSA), permitindo uma compreensão granular de sentimentos e intenções.
O sistema utiliza uma arquitetura assíncrona para garantir que a API nunca trave. O fluxo segue o padrão Producer-Consumer:
[ Usuário ]
|
| 1. (POST /classify)
v
[ FastAPI ] ------2. (Retorna Task ID)------> [ Usuário ]
|
| 3. (LPUSH Task)
v
[ Redis Queue ]
|
| 4. (BRPOP Worker)
v
[ Worker.py ]
|
| 5. (Inicia Grafo)
v
+-------------------------------------------------------------+
| ORQUESTRAÇÃO (LangGraph) |
| |
| 6. [ Ingestor ] |
| | |
| v |
| 7./------------ Texto repetido? -----------\ |
| | | |
| [ SIM ] [ NÃO ] |
| | | |
| | v |
| | 8. [ Embeddings ] |
| | | |
| | v |
| | 9. [ Qdrant RAG ] |
| | | |
| | v |
| | 10. [ Análise ] |
| | | |
| | v |
| | 11. [ Classificação ] |
| | | |
| v v |
| [ FIM ] <------- (Resultado) ------- 12. [ Explicação ] |
| |
+-------------------------------------------------------------+
|
v
[ 13. Worker Finaliza ]
|
|-- 14. (Salva Cache) ----> [ Redis ]
|-- 15. (Salva Vetor) ----> [ Qdrant ]
\-- 16. (Salva Task) ----> [ Redis ]
[ Polling: User -> API (GET /status) -> Redis ]
- Ingestor: Responsável pela limpeza, padronização e normalização do texto bruto, além de extrair metadados técnicos.
- Analisador (ABSA): Realiza a análise de sentimento baseada em aspectos. Identifica o tom de voz (ex: sarcasmo), a intenção real e o nível de urgência.
- Classificador (Multi-Label): Atribui múltiplas categorias (Elogio, Reclamação, Suporte, Vendas) de forma inteligente, garantindo que não existam duplicatas.
- Explicador: Gera uma narrativa humana e coesa, criando um Resumo Executivo que justifica as decisões tomadas pelos agentes anteriores.
- Memória de Curto Prazo (Cache com Redis)
- Utiliza hash SHA256 do texto padronizado. Consultas repetidas são retornadas instantaneamente, economizando tokens e tempo.
- Memória de Longo Prazo (Vector Store com Qdrant)
- Armazenamento vetorial para busca semântica. Utiliza
text-embedding-3-smallda OpenAI para permitir que o sistema "lembre" de contextos similares.
- Armazenamento vetorial para busca semântica. Utiliza
- Fila de Processamento (Redis Queue)
- Desacoplamento total via
LPUSH/BRPOP, possibilitando escala horizontal (múltiplos workers).
- Desacoplamento total via
- API FastAPI
- Camada de serviço moderna, assíncrona, com documentação automática via Swagger/OpenAPI.
- Containerização (Docker)
- Orquestração completa de serviços (App, Redis, Qdrant) garantindo que o ambiente seja idêntico em qualquer máquina.
- Python 3.10+
- LangChain / LangGraph (Orquestração agêntica)
- OpenAI (GPT-4o-mini) (Inteligência Central)
- Redis 8.6+ (Cache e Mensageria)
- Qdrant (Banco Vetorial)
- FastAPI (Interface Web)
- Docker & Docker Compose (Infraestrutura)
A forma mais simples de subir o projeto completo:
# Clone o projeto e configure o .env com sua OPENAI_API_KEY
docker compose up --buildAcesse http://localhost:8000/docs para testar.
- Instale as dependências:
pip install -r requirements.txt - Configure o
.env. - Certifique-se de que o Redis e Qdrant estão rodando.
- Inicie o Worker:
python worker.py - Inicie a API:
uvicorn api:app --reload
multiagent/
├── agents/ # Especialistas (Ingest, Analysis, Classification, Explanation)
├── memory/ # Drivers de persistência (Redis, Qdrant)
├── models/ # Configuração de IA (OpenAI)
├── orchestrator/ # Grafo orquestrador (LangGraph)
├── api.py # Entradas e saídas (FastAPI)
├── worker.py # Consumer
└── docker-compose.yml