Plataforma web de gestión documental y búsqueda semántica de tesis para la carrera de Diseño y Desarrollo de Software. Combina un panel administrativo en React con un motor de Inteligencia Artificial local (RAG) que permite realizar consultas en lenguaje natural sobre el repositorio de proyectos.
Antes de instalar, asegúrate de tener lo siguiente:
| Herramienta | Versión mínima | Descarga |
|---|---|---|
| Python | 3.11+ | https://www.python.org/downloads/ |
| Node.js | 18+ | https://nodejs.org/ |
| PostgreSQL | 15+ | https://www.postgresql.org/download/ |
| pgvector | 0.7+ | https://github.com/pgvector/pgvector |
| pgAdmin 4 | cualquiera | incluido con PostgreSQL |
Windows: durante la instalación de PostgreSQL, anota bien la contraseña que le pones al usuario
postgres. La necesitarás más adelante.
pgvector es la extensión de PostgreSQL que permite almacenar y buscar vectores de embedding. Sin ella el sistema no funciona.
Opción A — Instalador precompilado (Windows, recomendado):
- Ve a https://github.com/pgvector/pgvector/releases
- Descarga el archivo
.zipque corresponda a tu versión de PostgreSQL (Ej:pgvector-pg15-win.zip) - Copia
vector.dllaC:\Program Files\PostgreSQL\15\lib\ - Copia
vector.controly los archivosvector--*.sqlaC:\Program Files\PostgreSQL\15\share\extension\ - Reinicia el servicio de PostgreSQL desde el Administrador de servicios de Windows
Verificar que está disponible:
-- Ejecutar en pgAdmin
SELECT * FROM pg_available_extensions WHERE name = 'vector';
-- Debe aparecer una filaAbre pgAdmin 4, conecta al servidor local y ejecuta:
CREATE DATABASE tecsisai
ENCODING = 'UTF8'
LC_COLLATE = 'es_PE.UTF-8'
LC_CTYPE = 'es_PE.UTF-8';Si el locale
es_PE.UTF-8no está disponible en tu sistema, usaCcomo alternativa:CREATE DATABASE tecsisai ENCODING = 'UTF8' TEMPLATE = template0;
En pgAdmin, conecta a la base de datos tecsisai y abre el archivo:
Backend/database/tecsisai_schema.sql
Ejecútalo completo (F5 o botón "Execute"). Este script crea:
- Schema
tecsisaiy sus tablas (usuarios,tesis,documentos_rag,log_consultas) - Triggers (auto-código de tesis, updated_at)
- Stored procedure
sp_obtener_metricas_dashboard() - Datos de prueba iniciales (3 usuarios, 6 tesis, logs de consulta)
El schema original usa vector(1536) (dimensión OpenAI). El modelo de IA local que usa este proyecto genera vectores de 384 dimensiones. Ejecuta el parche:
Backend/database/patch_vector_384.sql
Esto modifica la columna embedding a vector(384) y recrea el índice HNSW.
Este paso es obligatorio. El schema original limita pagina_origen > 0, pero el sistema usa el valor 0 para almacenar el resumen/abstract de proyectos registrados manualmente. Sin este parche, registrar un proyecto con resumen lanzará un error de PostgreSQL.
Backend/database/patch_abstract_constraint.sql
Para tener más tesis de demostración, ejecuta:
Backend/database/seed_datos_extra.sql
Agrega 10 tesis adicionales (C24-007 a C24-016) y más entradas en el historial de consultas.
Si algunas columnas como grupo, tecnologias, similitud_maxima o score no están en tu schema, ejecuta:
Backend/database/patch_columnas_tesis.sql
cd Backend
python -m venv venvActivar el entorno:
# Windows PowerShell
venv\Scripts\Activate.ps1
# Windows CMD
venv\Scripts\activate.bat
# Linux / macOS
source venv/bin/activatepip install -r requirements.txtLa primera instalación descarga
torchysentence-transformers(~1 GB). Ten paciencia. Sitorchfalla en Windows, instálalo manualmente primero:pip install torch --index-url https://download.pytorch.org/whl/cpu
Abre Backend/core_backend/settings.py y edita el bloque DATABASES:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'tecsisai', # nombre de la base de datos
'USER': 'postgres', # usuario de PostgreSQL
'PASSWORD': 'TU_CONTRASEÑA', # <-- cambia esto
'HOST': 'localhost',
'PORT': '5432',
}
}# Desde la carpeta Backend/ con el venv activado
python manage.py migrate
python manage.py runserverEl backend quedará corriendo en http://localhost:8000.
Nota:
migratesolo aplica las migraciones de Django (sesiones, admin, etc.). Las tablas del proyecto ya las creaste con el SQL del paso 2.
cd Frontend/frontend_admin
npm installnpm run devEl frontend estará disponible en http://localhost:5173.
Vite redirige automáticamente
/api/*al backend enlocalhost:8000, por lo que no necesitas cambiar ninguna URL.
Con ambos servidores corriendo, abre http://localhost:5173 y comprueba:
- Dashboard — Deben aparecer las métricas (total tesis, aprobadas, en revisión, etc.)
- Proyectos — Deben listarse las 6+ tesis del seed data con sus estados
- Chat IA — Escribe
lista de tesis registradasy deben aparecer los proyectos - Historial — Deben aparecer las consultas registradas en
log_consultas
- Ve a la sección Proyectos
- Clic en Registrar proyecto
- Clic en XML — autocompletar y selecciona
Backend/database/proyecto_demo.xml - Los campos se llenan automáticamente
- Opcionalmente adjunta un PDF para indexar su contenido completo
- Clic en Registrar proyecto
Al registrar un proyecto, adjunta el PDF en el modal. El sistema:
- Registra la tesis en la base de datos
- Extrae el texto del PDF página por página con
pypdf - Genera embeddings con
paraphrase-multilingual-MiniLM-L12-v2(modelo local, sin costo de API) - Almacena los vectores en PostgreSQL con pgvector
El chat soporta:
- Consultas de listado:
muéstrame todas las tesis,lista de proyectos aprobados - Búsqueda semántica:
sistemas de gestión con microservicios,aplicaciones móviles para salud - El motor calcula similitud coseno contra los embeddings almacenados en pgvector
TecsisAi/
├── Backend/
│ ├── core_backend/ # Configuración Django (settings, urls)
│ ├── rag_api/ # App principal: modelos, vistas, urls
│ ├── database/ # Scripts SQL
│ │ ├── tecsisai_schema.sql # Schema completo + seed data
│ │ ├── patch_vector_384.sql # Ajuste de dimensión de embeddings
│ │ ├── patch_columnas_tesis.sql # Columnas adicionales (grupo, tecnologias)
│ │ ├── seed_datos_extra.sql # 10 tesis adicionales para demo
│ │ └── proyecto_demo.xml # XML de ejemplo para importar
│ ├── requirements.txt
│ └── manage.py
└── Frontend/
└── frontend_admin/
├── src/
│ └── App.jsx # Toda la UI (panel, chat, modales)
├── vite.config.js # Proxy /api → localhost:8000
└── package.json
| Capa | Tecnología |
|---|---|
| Frontend | React 19 + Vite 8 + Tailwind CSS 4 |
| Backend | Django 6 + Django REST Framework 3.17 |
| Base de datos | PostgreSQL 15 + pgvector |
| Modelo de IA | paraphrase-multilingual-MiniLM-L12-v2 (384 dims, local) |
| Extracción PDF | pypdf |
| Búsqueda vectorial | pgvector con índice HNSW y distancia coseno |
django.db.utils.OperationalError: connection refused
→ PostgreSQL no está corriendo. Verifica el servicio en el Administrador de servicios de Windows.
extension "vector" does not exist
→ No está instalado pgvector. Sigue el paso 1.
ERROR: column "embedding" is of type vector(1536) but expression is of type vector(384)
→ No aplicaste el parche. Ejecuta Backend/database/patch_vector_384.sql en pgAdmin.
El chat no devuelve resultados al buscar temas → Las tesis no tienen embeddings. Registra un proyecto con PDF para que el sistema genere los vectores, o agrega texto al campo "Resumen" al registrar manualmente.
torch falla al instalar en Windows
→ Instala primero la versión CPU: pip install torch --index-url https://download.pytorch.org/whl/cpu, luego vuelve a ejecutar pip install -r requirements.txt.
El modelo de IA tarda en cargar la primera vez
→ Normal. sentence-transformers descarga el modelo (~100 MB) la primera vez que se hace una consulta. Las siguientes veces usa el caché local.