Esta guía te llevará desde cero hasta tener Cortex funcionando en menos de 5 minutos.
| Requisito | Versión Mínima | Verificar |
|---|---|---|
| Docker | 24.0+ | docker --version |
| Docker Compose | 2.20+ | docker compose version |
| Git | 2.30+ | git --version |
Sin API Key: El sistema funciona con un LLM “Fake” que retorna respuestas de prueba.
git clone https://github.com/DeepRatAI/cortex-knowledge-assistant.git
cd cortex-knowledge-assistant
# Copiar plantilla de configuración
cp .env.example .env
Editar .env con los valores mínimos:
# === OBLIGATORIO PARA LLM REAL ===
HF_API_KEY=hf_xxxxxxxxxxxxxxxxxxxxxxxxx
# === SEGURIDAD (cambiar en producción) ===
POSTGRES_PASSWORD=tu_password_seguro
JWT_SECRET_KEY=clave_secreta_para_jwt_minimo_32_caracteres
# === OPCIONAL ===
CKA_LLM_PROVIDER=HF # Usar HuggingFace (o "Fake" para desarrollo)
CKA_USE_QDRANT=true # Habilitar búsqueda vectorial
CKA_USE_REDIS=true # Habilitar cache y rate limiting
docker compose up -d
Este comando:
# Ver estado de los contenedores
docker compose ps
# Verificar health de la API
curl http://localhost:8088/health
Respuesta esperada:
{
"status": "healthy",
"components": {
"database": { "healthy": true, "status": "connected" },
"qdrant": { "healthy": true, "status": "connected", "documents": 0 },
"llm": { "healthy": true, "provider": "hf", "model": "meta-llama/..." }
}
}
| Servicio | URL | Descripción |
|---|---|---|
| UI Web | http://localhost:3000 | Interfaz de usuario |
| API | http://localhost:8088 | API REST |
| Health Check | http://localhost:8088/health | Estado del sistema |
Al acceder por primera vez a http://localhost:3000, verás el Setup Wizard:
El sistema detecta que no hay usuarios y presenta un formulario:
Usuario: admin
Contraseña: (mínimo 12 caracteres)
Importante: Esta es la única oportunidad de crear el admin sin autenticación.
El wizard muestra el estado de cada componente:
Si Qdrant no tiene la colección de documentos, el wizard ofrece crearla.
# Obtener token de autenticación
TOKEN=$(curl -s -X POST http://localhost:8088/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"tu_password"}' | jq -r .access_token)
# Subir documento
curl -X POST http://localhost:8088/api/admin/upload-public-document \
-H "Authorization: Bearer $TOKEN" \
-F "file=@mi_documento.pdf" \
-F "category=public_docs"
Para ingestar todos los PDFs de un directorio:
# Copiar documentos al volumen de datos
docker cp ./mis_documentos/ cortex_api:/app/data/documentacion/publica/
# Ejecutar ingesta masiva
curl -X POST http://localhost:8088/admin/refresh-public-docs \
-H "Authorization: Bearer $TOKEN"
curl -X POST http://localhost:8088/query \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"query": "¿Cuáles son los requisitos para abrir una cuenta?",
"session_id": "mi-sesion-1"
}'
Respuesta:
{
"answer": "Según la documentación, los requisitos para abrir una cuenta son...",
"used_chunks": ["chunk-id-1", "chunk-id-2"],
"citations": [{ "id": "chunk-id-1", "source": "requisitos_cuenta.pdf" }],
"session_id": "mi-sesion-1"
}
# Ver logs de la API
docker compose logs -f cortex-api
# Reiniciar solo la API (después de cambios)
docker compose restart cortex-api
# Detener todo
docker compose down
# Detener y eliminar volúmenes (CUIDADO: borra datos)
docker compose down -v
# Reconstruir imágenes (después de cambios de código)
docker compose build --no-cache
docker compose up -d
# Ver logs detallados
docker compose logs cortex-api
# Verificar que los servicios dependientes están healthy
docker compose ps
HF_API_KEY está en .envdocker compose restart cortex-api# Verificar que Qdrant está corriendo
docker compose logs qdrant
# Reiniciar Qdrant
docker compose restart qdrant
# Ver logs de PostgreSQL
docker compose logs postgres
# Verificar conexión
docker compose exec postgres psql -U cortex -d cortex -c "SELECT 1"