9.8 KiB
9.8 KiB
MAIA — Meeting AI Assistant
Grave, transcreva e analise suas reuniões com Inteligência Artificial
Instalação • Arquitetura • Configuração • Deploy • API
📖 Sobre o Projeto
O MAIA (Meeting AI Assistant) é uma plataforma desenvolvida pela ASAP Telecom para gravar, transcrever e analisar reuniões automaticamente usando Inteligência Artificial.
✨ Funcionalidades Principais
- 🎙️ Gravação contínua de reuniões via navegador (sem gaps, usando MediaRecorder API com timeslice)
- 📝 Transcrição automática com Whisper.cpp na GPU (modelo large-v3, alta precisão)
- 👥 Diarização de speakers — identifica quem falou o quê (SpeechBrain ECAPA-TDNN, ~85% precisão)
- 🤖 Análise com IA — resumo, pontos de ação e insights com LLM (deepseek-v3.1)
- 🔐 Autenticação SSO via Keycloak
- 📱 PWA instalável em Android e iOS
- 🔎 Histórico com busca de reuniões passadas
- 👤 Identificação de speakers por enrollment de voz
🏗️ Arquitetura
┌─────────────────────────────────────────────────────────────────┐
│ CLIENTE │
│ Browser / PWA (React 18 + Vite + TypeScript) │
│ MediaRecorder API → chunks de áudio → upload automático │
└────────────────────────┬────────────────────────────────────────┘
│ HTTPS
▼
┌─────────────────────────────────────────────────────────────────┐
│ APP SERVER (5.0.0.181) │
│ ┌─────────────┐ ┌──────────────────┐ ┌──────────────────┐ │
│ │ Nginx :80 │ │ Backend API :8090 │ │ Diarization :5060│ │
│ │ (Frontend) │ │ FastAPI + Celery │ │ FastAPI+SpeechBr.│ │
│ └─────────────┘ └────────┬─────────┘ └────────┬─────────┘ │
│ │ │ │
│ ┌─────────────┐ ┌────────▼─────────┐ │ │
│ │ PostgreSQL │ │ Redis (Celery) │ │ │
│ └─────────────┘ └──────────────────┘ │ │
└────────────────────────────┬──────────────────────┼────────────┘
│ │
┌──────────────▼──────┐ ┌──────────▼───────────┐
│ GPU SERVER │ │ LLM Server │
│ 10.100.16.13 :5003 │ │ asapai.asaptelecom. │
│ Whisper.cpp GPU │ │ com.br/ollama │
│ AMD GPU, large-v3 │ │ deepseek-v3.1:671b │
└─────────────────────┘ └──────────────────────┘
┌─────────────────────┐
│ Keycloak SSO │
│ Autenticação/Authz │
└─────────────────────┘
📁 Estrutura do Monorepo
Maia/
├── frontend/ # PWA React 18 + Vite + TypeScript
├── backend/ # API FastAPI + Celery + PostgreSQL
├── diarization/ # API de Diarização com SpeechBrain
├── README.md
└── CHANGELOG.md
⚙️ Requisitos
| Componente | Requisito |
|---|---|
| Node.js | 18+ |
| Python | 3.11+ |
| PostgreSQL | 14+ |
| Redis | 7+ |
| GPU | AMD/NVIDIA (para Whisper GPU) |
| RAM | 16 GB mínimo (32 GB recomendado) |
| VRAM | 8 GB mínimo para Whisper large-v3 |
🚀 Instalação
Frontend
cd frontend
npm install
cp .env.example .env
# Edite o .env com as variáveis necessárias
npm run dev # desenvolvimento
npm run build # produção
Backend
cd backend
python -m venv venv
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows
pip install -r requirements.txt
cp .env.example .env
# Edite o .env com as variáveis necessárias
alembic upgrade head # aplicar migrações
uvicorn app.main:app --host 0.0.0.0 --port 8090
Diarization API
cd diarization
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
uvicorn main:app --host 0.0.0.0 --port 5060
🔧 Configuração
Variáveis de Ambiente — Backend (backend/.env)
DATABASE_URL=postgresql://user:password@localhost:5432/maia
REDIS_URL=redis://localhost:6379/0
KEYCLOAK_URL=https://seu-keycloak.exemplo.com
KEYCLOAK_REALM=seu-realm
KEYCLOAK_CLIENT_ID=maia-backend
OLLAMA_URL=https://llm.exemplo.com/ollama
OLLAMA_MODEL=deepseek-v3.1:671b-cloud
WHISPER_URL=http://gpu-server:5003
Variáveis de Ambiente — Diarization API (diarization/.env)
WHISPER_ORIGIN=http://gpu-server:5003
VOICE_DB_PATH=/data/voice_db
SPEAKER_CONFIDENCE_THRESHOLD=0.75
HF_TOKEN=seu_token_huggingface
SPEECHBRAIN_CACHE=/data/speechbrain_cache
Variáveis de Ambiente — Frontend (frontend/.env)
VITE_API_URL=http://seu-backend:8090
VITE_KEYCLOAK_URL=https://seu-keycloak.exemplo.com
VITE_KEYCLOAK_REALM=seu-realm
VITE_KEYCLOAK_CLIENT_ID=maia-frontend
🐳 Deploy
Com Podman/Docker Compose
# Na raiz do projeto
podman-compose up -d
Deploy Manual
Backend (systemd)
# /etc/systemd/system/maia-backend.service
[Unit]
Description=MAIA Backend API
After=network.target postgresql.service redis.service
[Service]
User=maia
WorkingDirectory=/opt/Backend/meeting-assistant-api
ExecStart=/opt/Backend/venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8090
Restart=always
[Install]
WantedBy=multi-user.target
Celery Worker
celery -A app.celery_app worker --loglevel=info -Q transcription,analysis
Frontend (Nginx)
server {
listen 80;
root /var/www/maia;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://localhost:8090/;
}
}
🔌 Endpoints Principais da API
Backend API (http://server:8090)
| Método | Endpoint | Descrição |
|---|---|---|
POST |
/meetings/ |
Criar nova reunião |
GET |
/meetings/ |
Listar reuniões |
GET |
/meetings/{id} |
Detalhes da reunião |
DELETE |
/meetings/{id} |
Deletar reunião |
POST |
/meetings/{id}/upload-chunk |
Upload de chunk de áudio |
POST |
/meetings/{id}/finalize |
Finalizar e processar reunião |
GET |
/meetings/{id}/transcript |
Transcrição completa |
GET |
/meetings/{id}/analysis |
Análise da IA |
POST |
/speakers/enroll |
Enrollar speaker com voz |
GET |
/speakers/ |
Listar speakers |
GET |
/admin/users |
(Admin) Listar usuários |
Diarization API (http://server:5060)
| Método | Endpoint | Descrição |
|---|---|---|
POST |
/transcribe |
Transcrever + diarizar áudio |
POST |
/enroll |
Enrollar voz de speaker |
GET |
/speakers |
Listar speakers cadastrados |
DELETE |
/speakers/{name} |
Remover speaker |
GET |
/health |
Health check |
🛠️ Tecnologias
Frontend
| Tecnologia | Versão | Uso |
|---|---|---|
| React | 18 | Framework UI |
| Vite | 5 | Build tool |
| TypeScript | 5 | Tipagem estática |
| Zustand | 4 | Gerenciamento de estado |
| Axios | 1.x | Cliente HTTP |
| Workbox | 7 | PWA / Service Worker |
| MediaRecorder API | — | Gravação de áudio |
Backend
| Tecnologia | Versão | Uso |
|---|---|---|
| FastAPI | 0.110+ | Framework API |
| SQLAlchemy | 2.x | ORM |
| Alembic | 1.x | Migrações de banco |
| PostgreSQL | 14+ | Banco de dados |
| Celery | 5.x | Processamento assíncrono |
| Redis | 7+ | Broker/Cache |
| httpx | 0.27+ | Cliente HTTP assíncrono |
Diarização & IA
| Tecnologia | Uso |
|---|---|
| Whisper.cpp | Transcrição de áudio (GPU) |
| SpeechBrain ECAPA-TDNN | Diarização de speakers |
| pyannote.audio | Diarização (fallback) |
| librosa | Processamento de áudio |
| deepseek-v3.1 | Análise e resumo de reuniões |
Infraestrutura
| Tecnologia | Uso |
|---|---|
| Podman | Containerização |
| Nginx | Reverse proxy / Servir frontend |
| systemd | Gerenciamento de serviços |
| Keycloak | SSO / Autenticação |
📄 Licença
Proprietário — ASAP Telecom. Todos os direitos reservados.
Desenvolvido com ❤️ pela equipe ASAP Telecom