· Juan Morisetti · Técnica  · 8 min read

Spring AI

Una forma simple de integrar LLMs en aplicaciones Java con Spring

Una forma simple de integrar LLMs en aplicaciones Java con Spring

En los últimos años, la inteligencia artificial — y en particular los modelos de lenguaje (LLMs) — dejaron de ser algo experimental para convertirse en una capacidad cada vez más presente dentro de sistemas reales.

Hoy los vemos por todos lados, en chatbots, asistentes, buscadores inteligentes, análisis de texto y automatización de procesos.

Si trabajas en Java y querés empezar a usar inteligencia artificial en tus aplicaciones, probablemente ya te hayas dado cuenta de algo: no es tan directo como parece.

No porque sea imposible, sino porque todo el ecosistema está mucho más preparado para otros lenguajes. Terminás leyendo ejemplos en Python, adaptando cosas, probando APIs a mano… y perdiendo más tiempo en la integración que en resolver el problema real.

Lo bueno es que ahora ya tenemos una buena ayuda, y es propio del ecosistema. Estamos viendo surgir a Spring AI.

¿Qué es Spring AI?

Si bien podríamos hablar largo y tendido de esto, no es mi intención. Yendo al punto, Spring AI es un proyecto del ecosistema Spring cuyo objetivo es bastante claro: simplificar la integración de modelos de inteligencia artificial dentro de aplicaciones Java, manteniendo los principios que ya conocemos del framework.

Ojo, aclaro por las dudas. No es un modelo, no entrena nada, y no reemplaza a proveedores como OpenAI o Anthropic. Está muy lejos de eso porque su rol es otro: actuar como una capa de abstracción entre tu aplicación y esos modelos.

De hecho, esta idea no es nueva dentro del mundo Spring. Es exactamente el mismo enfoque que se aplica en otros problemas.

Por ejemplo:

  • no interactuás directamente con JDBC en todos lados
  • no acoplás tu lógica a un cliente HTTP específico
  • usás abstracciones para desacoplar
  • Spring AI aplica ese mismo patrón, pero al dominio de la inteligencia artificial.

Digamos, es como si fuera una nueva extensión de lo que ya existe dentro de Spring hoy en día. Sólo que ahora se preocupa por cómo integrar IA dentro de un sistema real y, obviamente, sin generar acoplamiento, duplicación de código y complejidad innecesaria.

Quizá para los que somos más nuevos en el mundo Java no nos parezca una verdadera joya porque ya estamos acostumbrados a esta manera de trabajar de Spring. Pero la realidad, y aquellos que les tocó desarrollar mucho antes lo van a valorar mucho, es que sin una capa como esta, usar tecnologías externas era un dolor de cabeza. Y en particular para lo que trata este post, usar IA desde Java suele implicar:

  • llamar directamente a APIs específicas (por ejemplo, OpenAI)
  • construir manualmente los requests
  • parsear responses a mano
  • repetir lógica si cambiás de proveedor
  • mezclar la lógica de negocio con detalles de integración

El punto de entrada: ChatClient

A partir de esa abstracción, el framework introduce un conjunto de componentes que organizan la interacción con modelos. Si bien hay varios, lo que más se lee de los especialistas, es uno que funciona como puerta de entrada y ayuda a entender el resto: el ChatClient.

Este cliente es el componente que se encarga de interactuar con modelos de lenguaje. Conceptualmente, podés pensarlo como un cliente especializado, similar a cómo en Spring usarías RestTemplate o WebClient para consumir APIs externas. Por eso digo que ya estamos acostumbrados a esta forma de trabajar, y entender la idea no nos cuesta.

La diferencia es que, en lugar de hacer requests HTTP genéricos, este cliente trabaja directamente con prompts y respuestas generadas por modelos de IA.

Pero ¿Qué significa eso?

Cuando trabajás con modelos de lenguaje, la interacción se basa en “mensajes”, ya lo sabemos. Generalmente hay:

  • un mensaje de usuario (lo que pedís)
  • opcionalmente mensajes previos (contexto)
  • una respuesta generada por el modelo
  • Spring AI encapsula toda esa lógica y te permite trabajar con ella de forma mucho más estructurada. Veamos un ejemplo simple para entenderlo mejor.

Un ejemplo simple

String stringResponse = chatClient.prompt()
    .user("Explicame qué es arquitectura hexagonal en pocas palabras")
    .call()
    .content();

Este fragmento parece sencillo, pero abstrae bastante complejidad:

  • prompt() inicia la construcción de la interacción
  • .user(…) define el mensaje que le estás enviando al modelo
  • .call() ejecuta la llamada al proveedor configurado
  • .content() extrae el texto de la respuesta

Lo importante no es tanto la sintaxis, sino lo que representa: estás interactuando con un modelo de IA desde tu backend Java sin preocuparte por cómo se construye el request HTTP, cómo se autentica o cómo se parsea la respuesta. Obvio que en un ejemplo sencillo no se aprecia, pero en un proyecto real, es un montón.

Además, esta interacción no está atada a un proveedor específico, algo de lo que también veníamos indirectamente hablando en párrafos anteriores. Spring AI define interfaces comunes, lo que permite cambiar de modelo o proveedor sin tener que reescribir toda la lógica de la aplicación.

Este punto, aunque suene técnico, es clave en sistemas reales donde las decisiones pueden cambiar con el tiempo (costos, performance, privacidad, etc.).

Ahora bien, hasta acá todavía estamos en un nivel bastante superficial. Si uno se queda solo con este tipo de ejemplos, es fácil caer en una idea incompleta: pensar que usar IA es simplemente mandar un texto y recibir otro.

En la práctica, ese enfoque tiene poco valor.

Donde realmente empieza lo interesante

El verdadero desafío — y donde esto empieza a ser realmente interesante — es cómo integrar esa capacidad dentro de un sistema real. Es decir, cómo hacer que la IA trabaje con datos propios, respete reglas de negocio y forme parte de un flujo más grande dentro de tu aplicación.

Por ejemplo, hay una diferencia enorme entre: “resumime este texto” y: “resumime este contrato usando información del cliente que tengo en mi base de datos, considerando ciertas reglas específicas del negocio”

En el segundo caso, la IA deja de ser un componente aislado y pasa a estar integrada dentro de una lógica mucho más rica. Ese es el verdadero diferencial que tenemos que perseguir.

El concepto clave: RAG

Acá aparece uno de los conceptos más importantes en este dominio y que tan de moda está: el RAG (Retrieval Augmented Generation).

La idea, muy simplificada, es que el modelo no trabaja únicamente con lo que aprendió durante su entrenamiento, sino que también utiliza información que se le proporciona dinámicamente en cada request.

Esto permite resolver uno de los principales problemas de los modelos de lenguaje:

  • no conocen tus datos
  • pueden estar desactualizados
  • pueden generar respuestas incorrectas o inventadas (alucinaciones)
  • Si usas cualquier chat, por mencionar algo que todos usamos, habrás visto que muchas veces nos responde “cualquier cosa” o se va de rumbo. Eso es normal y pasa porque empieza a perder contexto.

Al incorporar datos reales del sistema — por ejemplo, documentos, registros o información interna — , es posible construir soluciones mucho más útiles y confiables.

Spring AI facilita este tipo de integración ofreciendo mecanismos para trabajar con embeddings y bases de datos vectoriales, que permiten buscar información relevante y agregarla al contexto del modelo antes de generar la respuesta.

Se que estoy mencionando muchos conceptos raros, complejos, y que al RAG lo estoy pasando muy por encima. No quiero en este post hablar sobre eso. Mi idea es resaltar lo importante para nosotros, los desarrolladores Java.

Lo central en esta etapa es entender la idea general: la IA se potencia cuando deja de estar aislada y se conecta con datos reales.

Casos de uso reales

A partir de ahí, ya no se trata de decir: “genial, puedo integrar esto, mi sistema va a ser mejor” y que quede sólo como un ejemplo. Ahora, sabiendo que existe este camino, tenemos que buscar comprender en qué nos puede servir, cómo integrarla en procesos concretos y reales dentro del backend.

Bueno, algunos ejemplos podrían ser:

  • asistentes que responden preguntas sobre documentación interna
  • sistemas que analizan textos automáticamente
  • buscadores que entienden el significado de lo que el usuario busca
  • funcionalidades dentro de aplicaciones existentes que generan o transforman contenido

En todos estos casos, la inteligencia artificial es una pieza más dentro del sistema, no un componente separado.

Expectativas realistas

Dicho todo esto, también es importante tener expectativas realistas.

Primero: Spring AI no elimina las limitaciones de los modelos. Las respuestas siguen siendo no determinísticas, pueden variar entre ejecuciones y no siempre son correctas. Tampoco desaparecen problemas como la latencia o los costos asociados al uso de APIs externas.

Además, hay un cambio conceptual importante que cualquier desarrollador tiene que hacer al trabajar con IA. En el desarrollo tradicional, estamos acostumbrados a sistemas determinísticos: Digo, nuestra mentalidad está puesta en que dado un input, esperamos siempre el mismo output. Pero con modelos de lenguaje, eso deja de ser cierto. Las respuestas son generadas, no calculadas de forma exacta. Si preguntamos 5 veces lo mismo, vamos a obtener 5 respuestas diferentes, parecidas seguramente, pero distintas.

Y ese cambio, llevado al software, impacta directamente en cómo diseñás, testeás y validás tu sistema.

Conclusión

En ese contexto, el aporte de Spring AI es bastante claro. No intenta resolver todos los problemas de la inteligencia artificial, ni abstraer completamente su complejidad. Lo que hace es algo más pragmático: ofrecer una forma consistente de integrarla dentro del ecosistema Spring, respetando principios como el desacoplamiento, la modularidad y la mantenibilidad.

Visto así, su valor no está tanto en la API que expone, sino en lo que habilita: llevar la inteligencia artificial al terreno de las aplicaciones Java reales, donde importa cómo se integra, cómo se mantiene y cómo evoluciona en el tiempo.

Con el tiempo irá evolucionando aún más y nos permitirá crear maravillas pero de manera más simple todavía.

No deja de ser una gran ayuda para nosotros.

Volver al Blog

Posts relacionados

Todos los Posts »