Integrar inteligencia artificial en una API con Spring Boot es más sencillo de lo que parece cuando usas LangChain4j. Aquí construyes un sistema de recomendaciones con IA que sugiere películas de Platzi Play según los gustos del usuario, conectando un modelo LLM con tu base de datos mediante tools. Es ideal si ya tienes una API REST y quieres llevarla al siguiente nivel.
Cómo eliminar una película con DeleteMapping en Spring Boot
Antes de entrar a la parte de IA, conviene revisar el endpoint de borrado. La anotación @DeleteMapping recibe el id mediante @PathVariable y delega la operación al repositorio.
La respuesta es un ResponseEntity<Void> con Void en mayúscula, porque debe ser una clase tipo objeto. El método del servicio no retorna nada: solo elimina la película.
- En el controlador devuelves
ResponseEntity.ok().build().
- En
MovieEntityRepository llamas a this.crudMovieEntity.deleteById(id).
- Desde Postman pruebas con un request DELETE que retorna status code 200 y cuerpo vacío.
¿Por qué se usa Void en ResponseEntity al borrar? Porque el método no retorna datos, solo confirma que la operación se ejecutó. Void indica que el cuerpo de la respuesta está vacío.
Qué es un AI Service en LangChain4j y cómo se configura
El corazón del sistema vive en PlatziPlayAIService, una interfaz anotada con @AIService de LangChain4j. Dentro defines un método generateMoviesSuggestions que retorna un String y recibe el mensaje del usuario anotado con @UserMessage.
El truco está en el @SystemMessage, donde describes el rol del modelo con triples comillas para escribir en varias líneas. El prompt usado fue: Eres un experto en cine que recomienda películas personalizadas según los gustos del usuario. Debes recomendar máximo tres películas. No incluyas películas que estén por fuera de la plataforma de Platzi.
Con eso le das contexto al LLM y restringes su comportamiento a tu catálogo.
Cómo exponer el servicio de IA en un controlador REST
El controlador necesita un endpoint POST en /suggest. Inyectas el servicio con private final PlatziPlayAIService aiService y lo añades al constructor; Spring lo resuelve gracias a la anotación @AIService.
Para recibir las preferencias creas un Data Transfer Object como record: SuggestRequestDTO(String userPreferences). El método retorna ResponseEntity.ok(this.aiService.generateMoviesSuggestions(suggestRequest.userPreferences())).
¿Qué es un DTO en Spring Boot? Un Data Transfer Object es una estructura que transporta datos entre capas. Usar un record lo hace inmutable y conciso, ideal para requests y responses.
Cómo conectar la base de datos con la IA usando @Tool
Aquí ocurre la verdadera magia. En MovieService, sobre el método getAll que recupera todas las películas, agregas la anotación @Tool de LangChain4j con la descripción: Busca todas las películas que existan dentro de la plataforma.
Con esa simple anotación, LangChain4j entiende cuándo invocar ese método. El modelo decide por sí mismo llamarlo durante el ciclo de vida de la petición, recibe el resultado como toolExecutionResult y arma una respuesta personalizada con datos reales de tu base de datos.
- El modelo GPT-4 mini de OpenAI recibe el rol system con tu prompt.
- Recibe el rol user con las preferencias enviadas.
- En su array de tools detecta el método anotado y lo ejecuta.
- Combina el contexto recuperado con la solicitud para responder.
Qué resultados entrega el sistema de recomendaciones con IA
Al probar desde Postman con la preferencia Me gustan las películas del espacio o las que están ambientadas en Nueva York, la API recomienda tres títulos del catálogo:
- Inception, descrita como una fascinante exploración de sueños y realidad.
- Interestelar, una épica aventura espacial.
- Joker, ambientada en Nueva York con la transformación de Arthur Fleck.
Con otra petición como Me gustan las animadas que sean emotivas, sugiere Coco, Toy Story y Shrek, incluyendo año y duración recuperados de la base de datos. Solo la descripción la genera el modelo.
¿Cómo sabe la IA qué películas existen en la plataforma? Gracias a la anotación @Tool, el modelo invoca automáticamente el método que consulta la base de datos y usa esos resultados como contexto para responder.
Por qué LangChain4j abre posibilidades infinitas en una API
El flujo completo demuestra cómo una anotación bien colocada convierte un endpoint tradicional en una experiencia conversacional. El modelo GPT-4 mini funciona como orquestador, tu base de datos como fuente de verdad y LangChain4j como puente.
Esto te permite construir asistentes, recomendadores o buscadores semánticos sin escribir lógica compleja de integración. La librería gestiona el ciclo de la petición, las llamadas a tools y la composición final de la respuesta.
¿Qué tipo de recomendador construirías tú con esta arquitectura? Cuéntame en los comentarios qué dominio te gustaría conectar con un LLM.