Spring AI y Milvus: Uso de Milvus como almacén vectorial de Spring AI
Introducción
En el mundo actual, la capacidad de procesar y analizar rápidamente grandes volúmenes de datos puede mejorar significativamente la funcionalidad de las aplicaciones. Esto es particularmente cierto en campos como la inteligencia artificial y el aprendizaje automático, donde los datos a menudo existen en forma de vectores de alta dimensión. Integrar bases de datos vectoriales como Milvus en aplicaciones Spring AI aborda esta necesidad al proporcionar capacidades eficientes de gestión y recuperación de datos. Esta integración permite a los desarrolladores realizar consultas complejas y búsquedas de similitud de forma rápida y precisa, facilitando mejores experiencias de usuario y un comportamiento de aplicación más inteligente.
Milvus destaca en el panorama de las bases de datos vectoriales debido a sus sólidas características adaptadas para la escalabilidad y el rendimiento en la gestión de datos vectoriales. Como plataforma de código abierto, ofrece una solución flexible y rentable para empresas y desarrolladores que buscan aprovechar capacidades avanzadas de búsqueda en aplicaciones. Milvus admite una variedad de estrategias de indexación, que son cruciales para optimizar el rendimiento de búsqueda en documentos grandes y no estructurados. Esto lo convierte en una excelente opción para aplicaciones que implican reconocimiento de imágenes y videos, análisis de texto y cualquier otro dominio donde la búsqueda de similitud sea crucial.
Configuración y preparación para integrar Milvus con aplicaciones Spring Boot
Configurar Milvus usando Docker Compose
Para integrar Milvus con Spring AI en una aplicación Spring Boot, comienza configurando una instancia de Milvus usando Docker Compose. Este método es sencillo y adecuado para entornos de desarrollo.
Procedimiento:
Descargar el archivo YAML de Docker Compose: Usa el siguiente comando para descargar la versión específica del archivo Docker Compose de Milvus:
wget https://github.com/milvus-io/milvus/releases/download/v2.4.0/milvus-standalone-docker-compose.yml -O docker-compose.yml
Iniciar la instancia de Milvus: Navega al directorio que contiene el archivo docker-compose.yml e inicia la instancia de Milvus:
docker-compose up -d
Asegúrate de que Docker Compose V2 esté instalado, ya que se recomienda sobre V1 para un mejor rendimiento y compatibilidad. Puedes comprobar la presencia de VectorDB en Docker Desktop(Windows) una vez que el comando haya terminado de ejecutarse:
Para linux puedes ejecutar este comando:
docker ps
2. Crear un proyecto Spring Boot
Generar el proyecto: Usa Spring Initializr para crear un nuevo proyecto Spring Boot. Selecciona Maven o Gradle(El que se usó aquí fue Gradle) como herramienta de compilación y agrega dependencias como 'Spring Web' y 'Spring Data JPA'.
Configurar el entorno del proyecto: Después de descargarlo, extrae el archivo zip y abre el proyecto en tu IDE preferido.
Spring Initializr
3. Agregar dependencias para la integración de Milvus y OpenAI
Dependiendo de si estás usando Maven o Gradle, agrega las dependencias necesarias para integrar Milvus y OpenAI con Spring AI.
Para Gradle (build.gradle):
repositories {
mavenCentral()
maven { url 'https://repo.spring.io/milestone' }
maven { url 'https://repo.spring.io/snapshot' }
}
dependencies {
implementation 'org.springframework.ai:spring-ai-milvus-store-spring-boot-starter:0.8.1-SNAPSHOT'
implementation 'org.springframework.ai:spring-ai-openai-spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
// Other dependencies
}
Conectar Spring AI con Milvus: configuración y uso detallados
En el contexto de Spring AI, Milvus sirve como backend para almacenar y gestionar datos vectoriales, lo que permite una recuperación rápida y escalable de elementos similares basada en la similitud vectorial. Así es como puedes conectarlos.
1. Configurar Milvus y OpenAI en Spring Boot
Agrega las siguientes propiedades a tu application.properties o application.yml para configurar la conexión a Milvus y configurar los embeddings de OpenAI:
Para application.properties:
spring.application.name=demo
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
spring.ai.vectorstore.milvus.client.host=localhost
spring.ai.vectorstore.milvus.client.port=19530
spring.ai.vectorstore.milvus.client.username=root
spring.ai.vectorstore.milvus.client.password=milvus
spring.ai.vectorstore.milvus.databaseName=default
spring.ai.vectorstore.milvus.collectionName=vector_store_1
spring.ai.vectorstore.milvus.embeddingDimension=1536
spring.ai.vectorstore.milvus.indexType=IVF_FLAT
spring.ai.vectorstore.milvus.metricType=COSINE
spring.ai.openai.api-key=YOUR_API_KEY
spring.ai.openai.embedding.options.model=text-embedding-ada-002
Reemplaza YOUR_API_KEY con la clave de API real obtenida de OpenAI. Esta configuración proporciona una configuración básica para integrar Milvus con una aplicación Spring Boot usando Spring AI y OpenAI para embeddings. Ajusta las configuraciones y dependencias según sea necesario en función de tus requisitos y entorno específicos.
2. Autoconecta el VectorStore en tu servicio
En tu servicio Spring, autoconecta el VectorStore para interactuar con la base de datos Milvus. Así es como se puede hacer:
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.ai.document.Document;
import org.springframework.ai.vectorstore.SearchRequest;
import java.util.List;
import java.util.Map;
@Service
public class VectorStoreService {
@Autowired
private VectorStore vectorStore;
}
3. Uso de EmbeddingClient para generar embeddings
Para generar embeddings que puedan almacenarse en Milvus, usa el EmbeddingClient proporcionado por Spring AI. Así es como se puede hacer:
package com.example.demo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.ai.embedding.EmbeddingClient;
import org.springframework.ai.embedding.EmbeddingResponse;
import java.util.List;
import java.util.Map;
@RestController
public class EmbeddingController {
private final EmbeddingClient embeddingClient;
@Autowired
public EmbeddingController(EmbeddingClient embeddingClient) {
this.embeddingClient = embeddingClient;
}
}
Ejemplos de código Java: implementación del almacenamiento vectorial
Almacenamiento y recuperación de datos vectoriales
Para utilizar eficazmente Milvus para el almacenamiento vectorial dentro de aplicaciones Spring AI, los desarrolladores deben comprender cómo almacenar, recuperar y gestionar datos vectoriales. A continuación se muestran ejemplos de código Java que demuestran estas funcionalidades.
Agregar documentos a Milvus:
@Service
public class VectorStoreService {
@Autowired
private VectorStore vectorStore;
public void addDocuments() {
List<Document> documents = List.of(
new Document("Exploring the depths of AI with Spring", Map.of("category", "AI")),
new Document("Navigating through large datasets efficiently"),
new Document("Harnessing the power of vector search", Map.of("importance", "high"))
);
vectorStore.add(documents);
}
}
Buscar documentos similares:
public List<Document> searchSimilarDocuments() {
return vectorStore.similaritySearch(
SearchRequest.query("Efficient data processing and retrieval")
.withTopK(3)
.withSimilarityThreshold(0.1)
);
}
Generación de embeddings con OpenAI:
Los embeddings son cruciales para las búsquedas basadas en vectores. Así es como puedes generar embeddings usando el servicio de OpenAI dentro de una aplicación Spring AI:
@RestController
public class EmbeddingController {
private final EmbeddingClient embeddingClient;
@Autowired
public EmbeddingController(EmbeddingClient embeddingClient) {
this.embeddingClient = embeddingClient;
}
@GetMapping("/ai/embedding")
public Map<String, Object> embed(@RequestParam(value = "message", defaultValue = "What's the latest in AI?") String message) {
EmbeddingResponse embeddingResponse = this.embeddingClient.embedForResponse(List.of(message));
return Map.of("embedding", embeddingResponse);
}
}
Configuración avanzada y personalización
Milvus ofrece varias configuraciones avanzadas para optimizar el almacenamiento y la recuperación de vectores. Estas incluyen estrategias de indexación personalizadas y opciones de ajuste de rendimiento.
Ejemplo de configuración avanzada en Milvus:
spring.ai.vectorstore.milvus.indexType=HNSW
spring.ai.vectorstore.milvus.metricType=EUCLIDEAN
Estas propiedades se pueden establecer en el archivo application.properties para usar diferentes estrategias de indexación como Hierarchical Navigable Small World (HNSW) y diferentes tipos de métricas como EUCLIDEAN para el cálculo de distancia.
Casos de uso y aplicaciones prácticas de Milvus en Spring AI
Sistemas de recomendación:
Milvus impulsa sistemas de recomendación en diversas industrias al almacenar embeddings de usuarios y elementos y realizar búsquedas de similitud. Este enfoque es particularmente eficaz en recomendaciones personalizadas de películas, música, productos y feeds de contenido. Por ejemplo, un sistema de recomendación de películas puede usar Milvus para relacionar semánticamente las preferencias del usuario con vectores de películas, sugiriendo filmes que se alineen con los gustos individuales sin requerir consultas explícitas del usuario. Más sobre eso aquí.
Motores de búsqueda de contenido: Para aplicaciones que implican grandes conjuntos de datos de contenido textual no estructurado, Milvus puede transformar texto en forma vectorial y realizar búsquedas de similitud eficientes con varias metodologías. Esta capacidad es crucial para desarrollar motores de búsqueda sofisticados que van más allá de la coincidencia de palabras clave para comprender el contexto semántico de las consultas de los usuarios, mejorando así la relevancia y precisión de los resultados de búsqueda.
Desafíos y soluciones
- Escalabilidad de datos
Manejar enormes cantidades de datos vectoriales puede ser desafiante. Milvus aborda esto mediante funciones como particionamiento y sharding, que ayudan a gestionar grandes conjuntos de datos distribuyendo los datos entre diferentes nodos, mejorando así el rendimiento y la escalabilidad.
- Latencia de consultas
Optimizar los parámetros del índice y escalar el clúster de Milvus reduce eficazmente la latencia de las consultas. Milvus admite varios tipos de índices como HNSW, IVF y Product Quantization, que pueden adaptarse a casos de uso específicos para equilibrar velocidad y precisión.
Casos de uso avanzados
Reconocimiento de imágenes y videos
Milvus se utiliza en aplicaciones de análisis de imágenes y videos de alto rendimiento, como sistemas de deduplicación de videos y búsquedas de similitud de imágenes. Por ejemplo, plataformas como Shopee utilizan Milvus para mejorar las capacidades de recuperación de video en tiempo real y búsqueda de coincidencias de copyright.
Chatbots impulsados por IA y atención al cliente
Integrar Milvus con modelos de IA permite el desarrollo de chatbots basados en RAG para comprender y responder a las consultas de los usuarios con alta relevancia y precisión. Empresas como PayPal y Farfetch usan Milvus para impulsar la IA conversacional para atención al cliente y experiencias de compra personalizadas.
Conclusión
Milvus mejora significativamente las capacidades de las aplicaciones de Spring AI al proporcionar una gestión y recuperación eficientes de datos vectoriales. Su versatilidad en diversos ámbitos —desde el comercio electrónico y el entretenimiento hasta la atención médica y los servicios financieros— demuestra su potencial para transformar industrias al habilitar funcionalidades de aplicaciones más inteligentes, receptivas y personalizadas. Se anima a los desarrolladores a aprovechar las funciones avanzadas de Milvus y sus opciones de configuración flexibles para optimizar sus aplicaciones y explorar nuevas posibilidades en soluciones impulsadas por IA.
Sigue leyendo

Vector Lakebase: End the AI Data Silo
Learn how Vector Lakebase unifies vector search, data lakes, and AI data operations so teams can serve RAG and agents without copy-and-sync pipelines.

Introducing Zilliz CLI and Agent Skills for Zilliz Cloud
Manage your vector database from your terminal or AI coding agent. Zilliz CLI and Agent Skills work with Claude Code, Cursor, Codex, and Copilot.

Why Not All VectorDBs Are Agent-Ready
Explore why choosing the right vector database is critical for scaling AI agents, and why traditional solutions fall short in production.


