🇪🇨 Desarrollo Web e IA Aplicada: El “Psicólogo Virtual”
Durante mi intercambio en la Universidad Técnica Estatal de Quevedo (UTEQ), el enfoque académico no fue solo construir una aplicación, sino entender el porqué de cada decisión técnica. El proyecto “Psicólogo Virtual Unicórdoba” sirvió como caso de estudio para aplicar una arquitectura robusta bajo la mentoría del Profesor Bryan Cortez.
Más que un producto final, este proyecto representa un ejercicio de desarrollo web e inteligencia artificial, donde la prioridad fue la seguridad, la escalabilidad y la correcta implementación de patrones de diseño.
🏗️ Arquitectura Desacoplada y Decisiones Técnicas
Optamos por una arquitectura de microservicios para separar responsabilidades y permitirnos usar la mejor herramienta para cada tarea. No fue una elección arbitraria, sino una necesidad para orquestar componentes heterogéneos:
-
Base de Datos (PostgreSQL): La pieza central. Implementamos lógica de negocio directamente en la base de datos para garantizar integridad:
- UUIDs: Usamos
uuid_generate_v4()como claves primarias para evitar ataques de enumeración. - Procedimientos Almacenados: Encapsulamos la lógica sensible (como el registro de usuarios o validación de credenciales) en funciones SQL, añadiendo una capa extra de seguridad.
- Triggers: Automatizamos la expiración de códigos de recuperación (15 min) directamente en el motor de base de datos.
- UUIDs: Usamos
-
Backend (Spring Boot + Java): Gestiona la seguridad con JWT (Access + Refresh Tokens) y hashing de contraseñas con BCrypt. La validación de datos no se confía solo al frontend; se refuerza aquí y en la base de datos.
-
Frontend (Next.js): Se eligió por su capacidad de renderizado híbrido y se aseguró con reCAPTCHA v3 invisible para mitigar bots sin afectar la UX.
🧠 El Flujo de IA: Doble Modelo
El sistema de “Inteligencia Artificial” no es una caja negra mágica. Diseñamos un pipeline explícito de dos etapas para controlar la respuesta:
- Clasificación: El texto del usuario pasa primero por un modelo ligero de scikit-learn que detecta la emoción (ej. tristeza, ansiedad).
- Generación: Esa emoción etiquetada, junto con el historial de chat, se alimenta a Meta Llama 3 (8B). Esto permite que el modelo de lenguaje genere una respuesta que no solo es coherente, sino empáticamente alineada con la emoción detectada.
Todo esto corre sobre contenedores Docker, lo que nos permitió solucionar el clásico problema de “en mi máquina funciona”, estandarizando el entorno de desarrollo y producción.
🚀 Aprendizajes Reales
La experiencia fue “real” en el sentido de enfrentar problemas cotidianos del desarrollo: manejar la latencia de modelos de IA locales y diseñar flujos de recuperación de contraseña seguros.

El equipo de trabajo junto al Profesor Bryan Cortez.
Documentación Técnica: