Inspiration

Este proyecto fue inspirado por el reto propuesto por Gradiant en el HackUDC 2025, donde se sugería el siguiente problema: en una empresa, cuando una parte del equipo trabaja con una tecnología, adquiere muchos conocimientos que podrían ser de utilidad futura para sus compañeros. De ahí surge la necesidad de registrar y manejar dicha información, de alguna manera cómoda para los usuarios que la inserten (para que no eviten hacerlo) y para los usuarios que la consulten.

What it does

En esencia, el proyecto soluciona la "pérdida de información" que se produce cuando en una empresa alguien gasta el tiempo y los recursos en aprender a dominar una tecnología y posteriormente otra gente vuelve a hacerlo por desconocimiento de que esto ya había sucedido en la empresa en primer lugar. Si existiese algún sistema de registrar y acceder a esta información, las empresas (o cualquier otra organización) podrían facilitar la colaboración entre empleados y ahorrar grandes cantidades de tiempo y recursos, además de favorecer la cooperación y un buen entorno de trabajo

CompetencIApp almacena, a partir de sencillos prompts en lenguaje natural, las competencias que adquiere cada uno de sus usuarios. De igual manera, tras un prompt en lenguaje natural para la consulta, informa al usuario de otros trabajadores que puedan ser competentes en la disciplina que corresponda.

Internamente, transforma la parte "relevante" de cada prompt en embeddings que puede almacenar y comparar para encontrar similitudes entre competencias semánticamente parecidas (por ejemplo, relacionar a un usuario que maneja "MPI" con uno que busca "programación paralela") y aportar un servicio de utilidad de una manera accesible y user-friendly.

How we built it

  • Base de datos SQLite para almacenamiento de información de empleados.
  • Procesamiento de lenguaje natural con el modelo llama3.2 para extraer competencias de frases.
  • Vectorización de competencias usando HuggingFaceEmbeddings.
  • Backend con FastAPI para gestionar las solicitudes de la aplicación.
  • Interfaz gráfica con JavaFX para interacción con los usuarios.

Challenges we ran into

El primer gran reto del proyecto fue decidir, conceptualmente, los sistemas que utilizaríamos para el registro y la gestión de la organización. Tras llegar a la conclusión de que utilizando LLMs para la comparación de embeddings para encontrar competencias semánticamente similares (de manera similar a cómo lo haría un sistema RAG) podría proporcionarnos grandes resultados, a la vez que evitaba la necesidad de que el usuario rellenase horribles formularios que pronto quedarían obsoletos.

No obstante, nuestro conocimiento acerca de la integración de LLMs en aplicaciones requirió una exhaustiva investigación al respecto, además de sobre cómo usar dependencias como Ollama o Langchain. El propio uso de la IA ya integrada en la aplicación también fue todo un reto, así como comprender profundamente cómo funcionaba la generación y la búsqueda de cercanía en embeddings.

Debido a que no teníamos conocimiento acerca de interfaces gráficas en Python, decidimos crear el programa cliente en Java utlizando javafx. Aunque esto también trajo sus propios retos y dificultades, las más importantes fueron las derivadas de la comunicación entre las dos partes del programa: el servidor en Python y el Cliente en java. Aprender a usar http fue un reto, pero superado de manera exitosa.

Accomplishments that we're proud of

En primer lugar, haber podido sacar este proyecto adelante en tan poco tiempo en las condiciones del momento, superando cualquier reto que se nos pusiese por delante y adaptándonos a nuestra necesidades y a nuestras circunstancias es en sí una razón para estar orgullosos. No obstante, nuestro principal motivo de orgullo es el Software que desarrollamos. CompetencIApp es una aplicación realmente útil y con potencial para cualquier organización, que además utiliza tecnologías innovadoras para ello. Por último, consideramos que hacer Software libre a disponibilidad de cualquiera que le encuentre utilidad es algo beneficioso para la sociedad y un motivo más de orgullo, en lo que al proyecto se refiere.

What we learned

Tras el desarrollo de un proyecto así y en unas circunstancias tan especiales (HackUDC2025), uno aprende una gran cantidad de cosas realmente importantes. Si bien no directamente relacionadas con el proyecto, su desarrollo nos ha brindado una gran oportunidad de aprendizaje en disciplinas transversales vitales como la resolución de problemas, el trabajo en equipo, la gestión de proyectos, el diseño de Software, la priorización de requisitos, etc.

No obstante, el propio proyecto, que, como mencionamos anteriormente, cuenta con muchas tecnologías con las que antes de este desarrollo no estábamos familiarizados, también nos ha brindado la oportunidad (hasta cierto punto, nos ha forzado a) de aprender a utilizar un gran número de assets como LLMs, su integración en el programa, Ollama, Langchain, SQLite, http, búsqueda por comparación de embeddings... por mencionar algunas de las que más ajenas nos resultaban hace unos pocos días.

What's next for CompetencIApp

Si bien no dudamos de la completitud de nuestro código, somos conscientes de que las circunstancias en que este ha sido desarrollado lo dotan de una naturaleza (aún) burda y que requiere de ser pulida, completada y mejorada, para lo cual contamos tanto con nosotros mismos como con cualquier otro programador interesado en contribuir al código fuente.

Si hablamos de funcionalidades completas, nos hubiese gustado permitir la inserción de documentos para que pudiesen procesarse de manera similar a cómo se procesan ahora las competencias de los compañeros, o la integración con las APIs de Linkedin o Github.

Built With

Share this project:

Updates