Elasticsearch tiene integraciones nativas con las herramientas y proveedores líderes en la industria de IA generativa. Echa un vistazo a nuestros webinars sobre cómo ir más allá de los conceptos básicos de RAG o crear apps listas para la producción con la base de datos vectorial de Elastic.
Para crear las mejores soluciones de búsqueda para tu caso de uso, inicia una prueba gratuita en el cloud o prueba Elastic en tu máquina local ahora mismo.
Spring AI ya está disponible en general, con su primera versión estable 1.0 lista para que la descargues en Maven Central. Vamos a usarla de inmediato para construir una aplicación de IA completa, usando tu LLM favorito y nuestra base de datos vectorial favorita. O lanzarte directamente al repositorio con la aplicación final.
¿Qué es Spring AI?
Spring AI 1.0, una solución integral para la ingeniería de IA en Java, ya está disponible tras un importante periodo de desarrollo influido por los rápidos avances en el campo de la IA. La versión incluye numerosas funciones nuevas esenciales para ingenieros de IA.
Java y Spring están en una posición ideal para sumar a toda esta ola de IA. Un montón de empresas están ejecutando sus productos en Spring Boot, lo que facilita muchísimo conectar IA a lo que ya están haciendo. Básicamente puedes vincular tu lógica de negocio y datos directamente a esos modelos de IA sin demasiadas complicaciones.

Spring AI ofrece soporte para diversos modelos y tecnologías de IA, tales como:
- Modelos de imagen: generan imágenes con indicaciones de texto.
- Modelos de transcripción: toma fuentes de audio y conviértelas en texto.
- Modelos de incrustación: convertir datos arbitrarios en vectores, que son tipos de datos optimizados para la búsqueda por similitud semántica.
- Modelos de chat: ¡estos deberían ser familiares! Sin duda tuviste una breve conversación con alguno en algún sitio.
Los modelos de chat son donde parece estar la mayor parte de la atención en el ámbito de la IA, y con razón, ¡son geniales! Puedes pedirles ayuda para corregir un documento o escribir un poema. (Solo no les pidas que cuenten un chiste... todavía.) Son geniales, pero tienen algunos problemas.
Soluciones de IA de primavera a los retos de la IA

(La imagen mostrada se emplea con licencia del líder del equipo de Spring AI, el Dr. Mark Pollack)
Vamos a repasar algunos de estos problemas y sus soluciones en Spring AI.
| Problema | Solución | |
|---|---|---|
| Consistencia | Los modelos de chat son de mente abierta y propensos a distracciones | Puedes darles un sistema de consignas para gobernar su forma y estructura general |
| Memoria | Los modelos de IA no tienen memoria, por lo que no pueden correlacionar un mensaje de un usuario dado a otro | Puedes darles un sistema de memoria para almacenar las partes relevantes de la conversación |
| Aislamiento | Los modelos de IA viven en pequeños espacios aislados, pero pueden hacer cosas realmente asombrosas si les das acceso a herramientas, funciones que pueden invocar cuando lo consideren necesario | Spring AI soporta la llamada a herramientas, que te permite informar al modelo de IA sobre herramientas en su entorno, que luego puede pedirte que invoques. Esta interacción de varios turnos se gestiona de forma transparente para ti |
| Datos privados | Los modelos de IA son inteligentes, ¡pero no omniscientes! No saben lo que hay en vuestras bases de datos propietarias, ¡ni creemos que querríais que lo supieran! | Necesitas informar sus respuestas rellenando los prompts, básicamente usando el todopoderoso operador de concatenación de cadenas para poner texto en la petición antes de que el modelo mire la pregunta que se está planteando. Información de fondo, si quieres. ¿Cómo decides qué debe enviar y qué no? Emplea un almacén vectorial para seleccionar solo los datos relevantes y enviarlos a continuación. Esto se denomina generación aumentada por recuperación, o RAG |
| Alucinación | A los modelos de chat de IA les gusta de, bueno, ¡charlar! Y a veces lo hacen con tanta confianza que pueden inventar cosas | Necesitas usar la evaluación —usando un modelo para validar la salida de otro— para confirmar resultados razonables |
Y, por supuesto, ninguna aplicación de IA es una isla. Hoy en día, los sistemas y servicios modernos de IA funcionan mejor cuando se integran con otros sistemas y servicios. El Protocolo de Contexto de Modelo (MCP) permite conectar tus aplicaciones de IA con otros servicios basados en MCP, independientemente del lenguaje en el que estén escritos. Puedes ensamblar todo esto en flujos de trabajo agenticos que manejan hacia un objetivo mayor.
¿Lo mejor? Todo esto puedes hacer mientras construyes sobre los modismos y abstracciones familiares que cualquier desarrollador de Spring Boot llegó a esperar: dependencias de inicio convenientes para prácticamente todo están disponibles en el Inicializador de Spring.
Spring AI ofrece configuraciones automáticas convenientes de Spring Boot que te dan la configuración de convención sobre configuración que ya conoces y esperas. Y Spring AI soporta observabilidad con el Actuator de Spring Boot y el proyecto Micrometer. También funciona bien con GraalVM y los hilos virtuales, permitiéndote crear aplicaciones de IA súper rápidas y eficientes que escalan.
Por qué Elasticsearch
Elasticsearch es un motor de búsqueda de texto completo, probablemente lo sepas. ¿Entonces por qué lo estamos usando para este proyecto? ¡Pues también es una tienda vectorial! Y bastante bueno, donde los datos están junto al texto completo. Otros beneficios notables:
- Súper fácil de configurar
- Código abierto
- Escalable horizontalmente
- La mayoría de los datos libres de tu organización probablemente ya estén en un clúster de Elasticsearch
- Cuenta con capacidad completa de motor de búsqueda
- ¡ Totalmente integrado en Spring AI!
Teniendo todo en cuenta, Elasticsearch cumple con todos los requisitos para ser un excelente almacén vectorial, así que vamos a configurarlo y empezar a construir nuestra aplicación.
Primeros pasos con Elasticsearch
Vamos a necesitar tanto Elasticsearch como Kibana, la consola de interfaz que usarás para interactuar con los datos alojados en la base de datos.
Puedes probar todo en tu máquina local gracias a la calidad de las imágenes de Docker y la página principal Elastic.co. Ve allí, baja para encontrar el comando curl , ejecuta y canaliza directamente a tu carcasa:
Esto simplemente extraerá y configurará imágenes Docker para Elasticsearch y Kibana, y tras unos minutos las tendrás funcionando en tu máquina local, con credenciales de conexión completas.
También tienes dos URLs diferentes que puedes usar para interactuar con tu instancia de Elasticsearch. Haz lo que indica el aviso y apunta tu navegador a http://localhost:5601.
Fíjate también en el nombre de usuario elastic y la contraseña impresos en la consola: los necesitarás para iniciar sesión (en el ejemplo de arriba son respectivamente elastic y w1GB15uQ).
Preparando la app
Ve a la página de Spring Initializr y genera un nuevo proyecto de Spring AI con las siguientes dependencias:
Elasticsearch Vector StoreSpring Boot ActuatorGraalVMOpenAIWeb
Cerciórate de elegir la versión más reciente y mejor de Java (idealmente Java 24 - a fecha de este texto - o posterior) y la herramienta de compilación que elijas. Estamos usando Apache Maven en este ejemplo.
Haz clic Generate y luego descomprime el proyecto e impórtalo al IDE que elijas. (Estamos usando IntelliJ IDEA.)
Lo primero de todo: especifiquemos tus datos de conexión para tu aplicación Spring Boot. En application.properties, escribir lo siguiente:
También emplearemos la capacidad de almacenamiento vectorial de Spring AI para inicializar lo que sea necesario en Elasticsearch en cuanto a estructuras de datos, así que especifica:
Vamos a usar OpenAI en esta demo, concretamente el Modelo de Embedding y el Modelo de Chat (siéntete libre de usar el servicio que prefieras, siempre que Spring AI lo soporte).
El Modelo de Incrustación es necesario para crear incrustaciones de los datos antes de almacenarlos en Elasticsearch. Para que OpenAI funcione, necesitamos especificar la API key:
Puedes definirlo como una variable de entorno como SPRING_AI_OPENAI_API_KEY para evitar almacenar la credencial en tu código fuente.
Vamos a subir archivos, así que cerciórate de personalizar cuánto dato se puede subir al contenedor de servlet:
¡Ya casi llegamos! Antes de sumergirnos en la escritura del código, vamos a ver cómo va a funcionar esto.
En nuestra máquina, descargamos el siguiente archivo (una lista de reglas para un juego de mesa), lo renombramos a test.pdf y lo pusimos en ~/Downloads/test.pdf.
El archivo se enviará al punto final /rag/ingest (reemplaza la ruta según tu configuración local):
Esto puede tardar unos segundos...
Entre bastidores, los datos se envían a OpenAI, que crea incrustaciones de los datos; esos datos se escriben entonces en Elasticsearch, tanto los vectores como el texto original.
Esos datos, junto con todas las incrustaciones que contienen, es donde ocurre la magia. Luego podemos consultar Elasticsearch usando la interfaz VectorStore .
El flujo completo es así:
- El cliente HTTP sube el PDF que elijas a la aplicación Spring.
- Spring AI se encarga de la extracción de texto de nuestro PDF y divide cada página en fragmentos de 800 caracteres.
- OpenAI genera la representación vectorial para cada bloque.
- Tanto el texto fragmentado como la incrustación se almacenan entonces en Elasticsearch.

Por último, haremos una consulta:
Y obtendremos una respuesta relevante:
¡Muy bien! ¿Cómo funciona todo esto?
- El cliente HTTP envia la pregunta a la aplicación Spring.
- Spring AI obtiene la representación vectorial de la pregunta de OpenAI.
- Con esa incrustación, busca documentos similares en los chunks almacenados de Elasticsearch y recupera los documentos más parecidos.
- Spring AI envía entonces la pregunta y el contexto recuperado a OpenAI para generar una respuesta LLM.
- Finalmente, devuelve la respuesta generada y una referencia al contexto recuperado.

Vamos a profundizar en el código de Java para ver cómo funciona realmente.
Primero que nada, la clase Main : es una clase principal estándar estándar para cualquier aplicación de botas de muelle.
No hay nada que ver allí. Sigamos...
A continuación, un controlador HTTP básico:
El controlador simplemente llama a un servicio que creamos para gestionar la ingesta de archivos y escribirlos en el almacén vectorial de Elasticsearch, y luego facilitar consultas contra ese mismo almacén vectorial.
Veamos el servicio:
Este código gestiona toda la ingestión: dado un Framework Spring Resource, que es un contenedor alrededor de bytes, leemos los datos PDF (presumiblemente un archivo .PDF - cerciórate de validar lo máximo antes de aceptar entradas arbitrarias) usando el PagePdfDocumentReader de Spring AI y luego tokenizándolos usando el TokenTextSplitterde Spring AI , Finalmente, agregando el List<Document>resultante a la implementación VectorStore , ElasticsearchVectorStore.
Puedes confirmarlo usando Kibana: luego de enviar un archivo al endpoint /rag/ingest , abre tu navegador para localhost:5601 y en el menú lateral de la izquierda navega hasta Dev Tools. Allí puedes emitir consultas para interactuar con los datos de la instancia de Elasticsearch.

Haz una consulta como esta:

Ahora, lo divertido: ¿cómo sacamos esos datos de nuevo en respuesta a las consultas de los usuarios?
Aquí tienes un primer corte en una implementación de la consulta, en un método llamado directRag.
El código es bastante sencillo, pero vamos a desglosarlo en varios pasos:
- Usa el
VectorStorepara realizar una búsqueda de similitud. - Con todos los resultados, consigue los
DocumentAI de Spring subyacentes y extrae su texto, concatenándolos todos en un solo resultado. - Envía los resultados del
VectorStoreal modelo, junto con un prompt que indique al modelo qué hacer con ellos y la pregunta del usuario. Espera la respuesta y devuélvelo.
Esto es RAG - generación aumentada por recuperación. Es la idea de que usamos datos de un almacén vectorial para informar el procesamiento y análisis que realiza el modelo. Ahora que sabes cómo hacerlo, ¡esperemos que nunca tengas que hacerlo! Al menos no así: los Asesores de Spring AI están aquí para simplificar aún más este proceso.
Advisors te permite preprocesar y postprocesar una solicitud a un modelo dado, además de proporcionar una capa de abstracción entre tu aplicación y el almacén vectorial. Agrega la siguiente dependencia a tu build:
Agrega otro método llamado advisedRag(String question) a la clase:
Toda la lógica de patrón RAG está encapsulada en la QuestionAnswerAdvisor. ¡Todo lo demás es igual que cualquier petición a un ChatModel ! ¡Muy bien!
Y puedes obtener el código completo desde GitHub.
Conclusión
En esta demostración, usamos imágenes Docker y todo lo hicimos en nuestra máquina local, pero el objetivo aquí es construir sistemas y servicios de IA aptos para producción. Hay varias cosas que podrías hacer para que eso sea realidad.
En primer lugar, puedes agregar Spring Boot Actuator para monitorizar el consumo de tokens. Los tokens son un indicador de la complejidad (y a veces del costo en dólares y centavos) de una solicitud dada al modelo.
Ya tienes el Actuador de Bota de Muelle en la ruta de clase, así que solo tienes que especificar las siguientes propiedades para mostrar todas las métricas (capturadas por el magnífico proyecto Micrometer.io ):
Resetear tu solicitud. Haz una consulta y luego ve a: http://localhost:8080/actuator/metrics. Busca "token" y verás información sobre los tokens que está usando la aplicación. Cerciórate de estar atento a esto. Por supuesto, puedes usar la integración de Micrometer para Elasticsearch para impulsar esas métricas y que Elasticsearch actúe también como tu base de datos de seriales temporales preferida.
Entonces deberías considerar que cada vez que hacemos una petición a un almacén de datos como Elasticsearch, o a OpenAI, u otros servicios de red, estamos haciendo IO y —a menudo— ese IO bloquea los hilos sobre los que se ejecuta. Java 21 y posteriores incluyen hilos virtuales que no bloquean y mejoran significativamente la escalabilidad. Habilitarlo con:
Y, por último, querrás alojar tu aplicación y tus datos en un lugar donde puedan prosperar y escalar. Estamos seguros de que probablemente ya pensaste dónde ejecutar tu aplicación, pero ¿dónde alojarás tus datos? ¿Podemos recomendar el Elastic Cloud? Es seguro, privado, escalable y lleno de funciones. ¿Nuestra parte favorita? Si quieres, puedes conseguir la edición Serverless donde Elastic lleva el buscapersonas, ¡no tú!
Preguntas frecuentes
¿Qué es Spring AI?
Spring AI es una solución para la ingeniería de IA en Java que ayuda a generar imágenes a partir de indicaciones de texto dadas, convertir fuentes de audio en texto, convertir datos arbitrarios en vectores y crear modelos de chat.
¿Cuáles son los beneficios de usar Spring AI con Elasticsearch?
Las principales ventajas de usar Spring AI con Elasticsearch son crear aplicaciones de IA aprovechando Elasticsearch para almacenar vectores de alto rendimiento. Esto permite que las capacidades de búsqueda híbrida, que combinan el significado semántico con la combinación tradicional de palabras clave, proporcionen el contexto más relevante para los LLM.




