Sistema de recomendaciones de películas con IA en Java

Clase 18 de 23Curso de Java Spring Boot

Resumen

En este material te comparto cómo implementar un sistema de recomendaciones de películas usando Java, LangChain4j e inteligencia artificial en la plataforma Plazy Play. Aquí verás el potencial real de integrar inteligencia artificial para personalizar las sugerencias de contenido según los intereses del usuario, aprovechando la potencia de herramientas modernas y buenas prácticas en desarrollo backend.

¿Cómo eliminar películas en la base de datos usando Java?

Eliminar películas es sencillo empleando la notación @DeleteMapping. El método recibe el ID de la película como variable de ruta y responde con un ResponseEntity.ok().build(), ya que el método delete no retorna datos. El uso de Void en el ResponseEntity es importante porque Delete no regresa un objeto, solo indica que la operación fue realizada.

Para probar esta operación, se puede utilizar Postman enviando una petición DELETE al endpoint correspondiente con el ID de la película. Si el borrado es exitoso, se recibirá un status code 200 y el cuerpo estará vacío, confirmando la eliminación.

¿Cómo funciona el sistema de sugerencias de películas potenciado por IA?

El corazón del sistema es el servicio Plazy Play aiService, donde se integra la anotación aiService de LangChain4j. El método principal, llamado generateMovieSuggestions, toma como entrada un mensaje del usuario (las preferencias) usando la anotación @UserMessage.

Se define un mensaje de sistema personalizado para que la IA actúe como un experto en cine. El prompt restringe la respuesta a un máximo de tres películas y exige que solo se sugieran títulos disponibles en Plazy Play, asegurando recomendaciones relevantes y precisas.

¿Cómo se estructuran las peticiones y la transferencia de datos del usuario?

El controlador recibe las preferencias del usuario como un objeto llamado SuggestRequestDTO, implementado como un record en Java. Este DTO solo contiene el campo userPreference, que captura los gustos expresados por la persona. Se utiliza @PostMapping para definir el endpoint /suggest, el cual responde con una lista de sugerencias generadas dinámicamente.

La inyección del servicio se realiza gracias a la anotación correspondiente y el uso de constructores. El controlador envía las preferencias del usuario al método generateMovieSuggestions del aiService y retorna la respuesta de forma segura y eficiente empleando ResponseEntity.

¿Cómo conoce la IA las películas disponibles en la plataforma?

Se aprovecha el método getAll del MovieService, anotado con @Tool de LangChain4j. Esta anotación convierte el método en una herramienta disponible para el modelo, permitiéndole consultar la lista actualizada de películas durante la generación de recomendaciones. El prompt asociado indica: "busca todas las películas que existan dentro de la plataforma", asegurando que las respuestas estén alineadas con el catálogo real.

¿Qué resultados genera el sistema de recomendación con ejemplos prácticos?

El proceso completo se visualiza probando el endpoint /suggest desde Postman, enviando preferencias como me gustan las películas del espacio o las que están ambientadas en Nueva York. El resultado son recomendaciones personalizadas como "Inception", "Interestellar" y "Joker", explicando brevemente por qué se sugieren.

Al introducir otras preferencias como me gustan las animadas que sean emotivas, el sistema recomienda "Coco", "Toy Story" y "Shrek". Las respuestas contienen información relevante extraída directamente de la base de datos como año, duración y descripción, mostrando la potencia del enfoque.

El flujo interno incluye: - La petición del usuario es enviada al endpoint. - LangChain4j utiliza el rol de sistema y el mensaje del usuario para contextualizar la consulta. - El modelo llama automáticamente al tool que consulta las películas disponibles. - La IA selecciona sugerencias alineadas con los gustos del usuario y limita la respuesta a títulos de la plataforma.

¿Te gustaría explorar más sobre LangChain4j o el API de OpenAI? Comparte en los comentarios cuáles otras integraciones o casos de uso te parecen interesantes.