Spring AI et Milvus : utiliser Milvus comme magasin de vecteurs Spring AI
Introduction
Dans le monde d’aujourd’hui, la capacité à traiter et analyser rapidement de grands volumes de données peut améliorer considérablement les fonctionnalités des applications. Cela est particulièrement vrai dans des domaines comme l’intelligence artificielle et le machine learning, où les données existent souvent sous forme de vecteurs à haute dimension. L’intégration de bases de données vectorielles comme Milvus dans des applications Spring AI répond à ce besoin en fournissant des capacités efficaces de gestion et de récupération des données. Cette intégration permet aux développeurs d’effectuer rapidement et précisément des requêtes complexes et des recherches de similarité, facilitant ainsi de meilleures expériences utilisateur et un comportement applicatif plus intelligent.
Milvus se distingue dans le paysage des bases de données vectorielles grâce à ses fonctionnalités robustes conçues pour la scalabilité et les performances dans la gestion des données vectorielles. En tant que plateforme open-source, il offre une solution flexible et rentable aux entreprises et aux développeurs souhaitant exploiter des capacités avancées de recherche applicative. Milvus prend en charge diverses stratégies d’indexation, essentielles pour optimiser les performances de recherche sur de grands documents non structurés. Cela en fait un excellent choix pour les applications impliquant la reconnaissance d’images et de vidéos, l’analyse de texte et tout autre domaine où la recherche de similarité est cruciale.
Configuration et paramétrage pour intégrer Milvus aux applications Spring Boot
Configuration de Milvus à l’aide de Docker Compose
Pour intégrer Milvus à Spring AI dans une application Spring Boot, commencez par configurer une instance Milvus à l’aide de Docker Compose. Cette méthode est simple et adaptée aux environnements de développement.
Procédure :
Télécharger le fichier YAML Docker Compose : Utilisez la commande suivante pour télécharger la version spécifique du fichier 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
Démarrer l’instance Milvus : Accédez au répertoire contenant le fichier docker-compose.yml et démarrez l’instance Milvus :
docker-compose up -d
Assurez-vous que Docker Compose V2 est installé, car il est recommandéé par rapport à V1 pour de meilleures performances et une meilleure compatibilité. Vous pouvez vérifier la présence de VectorDB sur Docker Desktop(Windows) une fois la commande terminée :
Pour linux, vous pouvez exécuter cette commande :
docker ps
2. Créer un projet Spring Boot
Générer le projet : Utilisez Spring Initializr pour créer un nouveau projet Spring Boot. Sélectionnez Maven ou Gradle(celui utilisé ici était Gradle) comme outil de build et ajoutez des dépendances telles que « Spring Web » et « Spring Data JPA ».
Configurer l’environnement du projet : Après le téléchargement, extrayez le fichier zip et ouvrez le projet dans votre IDE préféré.
Spring Initializr
3. Ajouter les dépendances pour l’intégration de Milvus et OpenAI
Selon que vous utilisez Maven ou Gradle, ajoutez les dépendances nécessaires pour intégrer Milvus et OpenAI à Spring AI.
Pour 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
}
Connecter Spring AI à Milvus : configuration détaillée et utilisation
Dans le contexte de Spring AI, Milvus sert de backend pour stocker et gérer les données vectorielles, permettant une récupération rapide et scalable d’éléments similaires basée sur la similarité vectorielle. Voici comment vous pouvez les connecter ensemble.
1. Configurer Milvus et OpenAI dans Spring Boot
Ajoutez les propriétés suivantes à votre application.properties ou application.yml pour configurer la connexion à Milvus et mettre en place les embeddings OpenAI :
Pour 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
Remplacez YOUR_API_KEY par la clé API réelle obtenue auprès d’OpenAI. Cette configuration fournit une configuration de base pour intégrer Milvus à une application Spring Boot en utilisant Spring AI et OpenAI pour les embeddings. Ajustez les configurations et les dépendances selon les besoins en fonction de vos exigences spécifiques et de votre environnement.
2. Injecter automatiquement le VectorStore dans votre service
Dans votre service Spring, injectez automatiquement le VectorStore pour interagir avec la base de données Milvus. Voici comment procéder :
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. Utilisation de l’EmbeddingClient pour générer des embeddings
Pour générer des embeddings qui peuvent être stockés dans Milvus, utilisez l’EmbeddingClient fourni par Spring AI. Voici comment procéder :
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;
}
}
Exemples de code Java : Implémentation du stockage vectoriel
Stockage et récupération de données vectorielles
Pour utiliser efficacement Milvus pour le stockage vectoriel dans les applications Spring AI, les développeurs doivent comprendre comment stocker, récupérer et gérer les données vectorielles. Vous trouverez ci-dessous des exemples de code Java qui démontrent ces fonctionnalités.
Ajout de documents à 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);
}
}
Recherche de documents similaires :
public List<Document> searchSimilarDocuments() {
return vectorStore.similaritySearch(
SearchRequest.query("Efficient data processing and retrieval")
.withTopK(3)
.withSimilarityThreshold(0.1)
);
}
Génération d’embeddings avec OpenAI :
Les embeddings sont essentiels pour les recherches basées sur des vecteurs. Voici comment vous pouvez générer des embeddings en utilisant le service d’OpenAI au sein d’une application 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);
}
}
Configuration et personnalisation avancées
Milvus offre plusieurs paramètres avancés pour optimiser le stockage et la récupération de vecteurs. Ceux-ci incluent des stratégies d’indexation personnalisées et des options de réglage des performances.
Exemple de configuration avancée dans Milvus :
spring.ai.vectorstore.milvus.indexType=HNSW
spring.ai.vectorstore.milvus.metricType=EUCLIDEAN
Ces propriétés peuvent être définies dans le fichier application.properties pour utiliser différentes stratégies d’indexation comme Hierarchical Navigable Small World (HNSW) et différents types de métriques tels que EUCLIDEAN pour le calcul de distance.
Cas d’utilisation et applications pratiques de Milvus dans Spring AI
Systèmes de recommandation :
Milvus alimente des systèmes de recommandation dans divers secteurs en stockant les embeddings des utilisateurs et des éléments et en effectuant des recherches de similarité. Cette approche est particulièrement efficace dans les recommandations personnalisées de films, de musique, de produits et de flux de contenu. Par exemple, un système de recommandation de films peut utiliser Milvus pour faire correspondre sémantiquement les préférences des utilisateurs avec des vecteurs de films, suggérant des films qui correspondent aux goûts individuels sans nécessiter de requêtes explicites de la part des utilisateurs. Plus d’informations à ce sujet ici.
Moteurs de recherche de contenu : Pour les applications impliquant de grands ensembles de données de contenu textuel non structuré, Milvus peut transformer le texte sous forme vectorielle et effectuer des recherches de similarité efficaces avec diverses méthodologies. Cette capacité est cruciale pour développer des moteurs de recherche sophistiqués qui vont au-delà de la correspondance de mots-clés afin de comprendre le contexte sémantique des requêtes des utilisateurs, améliorant ainsi la pertinence et la précision des résultats de recherche.
Défis et solutions
- Scalabilité des données
La gestion de vastes volumes de données vectorielles peut être difficile. Milvus y répond grâce à des fonctionnalités telles que le partitionnement et le sharding, qui aident à gérer de grands ensembles de données en distribuant les données entre différents nœuds, améliorant ainsi les performances et la scalabilité.
- Latence des requêtes
L’optimisation des paramètres d’index et la mise à l’échelle efficace du cluster Milvus réduisent la latence des requêtes. Milvus prend en charge divers types d’index comme HNSW, IVF et Product Quantization, qui peuvent être adaptés à des cas d’utilisation spécifiques afin d’équilibrer vitesse et précision.
Cas d’utilisation avancés
Reconnaissance d’images et de vidéos
Milvus est utilisé dans des applications d’analyse d’images et de vidéos à haut débit, telles que les systèmes de déduplication vidéo et les recherches de similarité d’images. Par exemple, des plateformes comme Shopee utilisent Milvus pour améliorer les capacités de rappel vidéo en temps réel et de recherche de correspondance de droits d’auteur.
Chatbots pilotés par l’IA et support client
L’intégration de Milvus avec des modèles d’IA permet le développement de chatbots basés sur RAG pour comprendre les requêtes des utilisateurs et y répondre avec une pertinence et une précision élevées. Des entreprises comme PayPal et Farfetch utilisent Milvus pour alimenter l’IA conversationnelle destinée au support client et aux expériences d’achat personnalisées.
Conclusion
Milvus améliore considérablement les capacités des applications Spring AI en assurant une gestion et une récupération efficaces des données vectorielles. Sa polyvalence dans divers domaines — du commerce électronique et du divertissement aux soins de santé et aux services financiers — démontre son potentiel à transformer les secteurs en permettant des fonctionnalités applicatives plus intelligentes, réactives et personnalisées. Les développeurs sont encouragés à exploiter les fonctionnalités avancées de Milvus et ses options de configuration flexibles afin d’optimiser leurs applications et d’explorer de nouvelles possibilités dans les solutions pilotées par l’IA.
Continuer à lire

Zilliz Cloud Update: Smarter Autoscaling for Cost Savings, Stronger Compliance with Audit Logs, and More
What's new in Zilliz Cloud? Smarter autoscaling with scale-down, audit logs GA, enhanced SSO, and Milvus 2.6 in Private Preview.

How to Use Anthropic MCP Server with Milvus
MCP + Milvus: Streamline AI agent development with standardized data access, eliminating integration hassles while enhancing context and flexibility.

Proactive Monitoring for Vector Database: Zilliz Cloud Integrates with Datadog
we're excited to announce Zilliz Cloud's integration with Datadog, enabling comprehensive monitoring and observability for your vectorDB deployments.


