Spring AI e Milvus: usare Milvus come Vector Store di Spring AI
Introduzione
Nel mondo di oggi, la capacità di elaborare e analizzare rapidamente grandi volumi di dati può migliorare significativamente la funzionalità delle applicazioni. Questo è particolarmente vero in ambiti come l'intelligenza artificiale e il machine learning, dove i dati spesso esistono in forma vettoriale ad alta dimensionalità. L'integrazione di database vettoriali come Milvus nelle applicazioni Spring AI risponde a questa esigenza fornendo capacità efficienti di gestione e recupero dei dati. Questa integrazione consente agli sviluppatori di eseguire query complesse e ricerche di similarità in modo rapido e accurato, facilitando migliori esperienze utente e un comportamento delle applicazioni più intelligente.
Milvus si distingue nel panorama dei database vettoriali grazie alle sue solide funzionalità pensate per la scalabilità e le prestazioni nella gestione dei dati vettoriali. In quanto piattaforma open-source, offre una soluzione flessibile ed economicamente vantaggiosa per aziende e sviluppatori che desiderano sfruttare capacità di ricerca avanzate nelle applicazioni. Milvus supporta una varietà di strategie di indicizzazione, fondamentali per ottimizzare le prestazioni di ricerca su documenti di grandi dimensioni e non strutturati. Questo lo rende una scelta eccellente per applicazioni che coinvolgono il riconoscimento di immagini e video, l'analisi del testo e qualsiasi altro dominio in cui la ricerca di similarità sia cruciale.
Configurazione e impostazione per integrare Milvus con applicazioni Spring Boot
Configurazione di Milvus utilizzando Docker Compose
Per integrare Milvus con Spring AI in un'applicazione Spring Boot, inizia configurando un'istanza Milvus utilizzando Docker Compose. Questo metodo è semplice e adatto agli ambienti di sviluppo.
Procedura:
Scarica il file YAML di Docker Compose: Usa il seguente comando per scaricare la versione specifica del file Docker Compose di Milvus:
wget https://github.com/milvus-io/milvus/releases/download/v2.4.0/milvus-standalone-docker-compose.yml -O docker-compose.yml
Avvia l'istanza Milvus: Vai alla directory contenente il file docker-compose.yml e avvia l'istanza Milvus:
docker-compose up -d
Assicurati che Docker Compose V2 sia installato, poiché è consigliato rispetto alla V1 per migliori prestazioni e compatibilità. Puoi verificare la presenza di VectorDB su Docker Desktop(Windows) una volta terminata l'esecuzione del comando:
Per linux puoi eseguire questo comando:
docker ps
2. Crea un progetto Spring Boot
Genera il progetto: Usa Spring Initializr per creare un nuovo progetto Spring Boot. Seleziona Maven o Gradle(Quello utilizzato qui era Gradle) come strumento di build e aggiungi dipendenze come 'Spring Web' e 'Spring Data JPA'.
Configura l'ambiente del progetto: Dopo il download, estrai il file zip e apri il progetto nel tuo IDE preferito.
Spring Initializr
3. Aggiungi le dipendenze per l'integrazione di Milvus e OpenAI
A seconda che tu stia utilizzando Maven o Gradle, aggiungi le dipendenze necessarie per integrare Milvus e OpenAI con Spring AI.
Per 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
}
Collegare Spring AI con Milvus: configurazione dettagliata e utilizzo
Nel contesto di Spring AI, Milvus funge da backend per l'archiviazione e la gestione dei dati vettoriali, consentendo il recupero rapido e scalabile di elementi simili in base alla similarità vettoriale. Ecco come puoi collegarli insieme.
1. Configura Milvus e OpenAI in Spring Boot
Aggiungi le seguenti proprietà al tuo application.properties o application.yml per configurare la connessione a Milvus e impostare gli embedding OpenAI:
Per 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
Sostituisci YOUR_API_KEY con la chiave API effettiva ottenuta da OpenAI. Questa configurazione fornisce un'impostazione di base per integrare Milvus con un'applicazione Spring Boot utilizzando Spring AI e OpenAI per gli embedding. Regola le configurazioni e le dipendenze secondo necessità in base ai tuoi requisiti specifici e al tuo ambiente.
2. Autowire del VectorStore nel tuo Service
Nel tuo service Spring, esegui l'autowire del VectorStore per interagire con il database Milvus. Ecco come può essere fatto:
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. Utilizzo dell'EmbeddingClient per generare embedding
Per generare embedding che possono essere archiviati in Milvus, usa l'EmbeddingClient fornito da Spring AI. Ecco come può essere fatto:
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;
}
}
Esempi di codice Java: implementazione dell'archiviazione vettoriale
Archiviazione e recupero dei dati vettoriali
Per utilizzare efficacemente Milvus per l'archiviazione vettoriale all'interno delle applicazioni Spring AI, gli sviluppatori devono comprendere come archiviare, recuperare e gestire i dati vettoriali. Di seguito sono riportati esempi di codice Java che dimostrano queste funzionalità.
Aggiunta di documenti 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);
}
}
Ricerca di documenti simili:
public List<Document> searchSimilarDocuments() {
return vectorStore.similaritySearch(
SearchRequest.query("Efficient data processing and retrieval")
.withTopK(3)
.withSimilarityThreshold(0.1)
);
}
Generazione di embedding con OpenAI:
Gli embedding sono fondamentali per le ricerche basate su vettori. Ecco come puoi generare embedding utilizzando il servizio di OpenAI all'interno di un'applicazione 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);
}
}
Configurazione e personalizzazione avanzate
Milvus offre diverse impostazioni avanzate per ottimizzare l'archiviazione e il recupero dei vettori. Queste includono strategie di indicizzazione personalizzate e opzioni di ottimizzazione delle prestazioni.
Esempio di configurazione avanzata in Milvus:
spring.ai.vectorstore.milvus.indexType=HNSW
spring.ai.vectorstore.milvus.metricType=EUCLIDEAN
Queste proprietà possono essere impostate nel file application.properties per utilizzare diverse strategie di indicizzazione come Hierarchical Navigable Small World (HNSW) e diversi tipi di metrica come EUCLIDEAN per il calcolo della distanza.
Casi d'uso e applicazioni pratiche di Milvus in Spring AI
Sistemi di raccomandazione:
Milvus alimenta sistemi di raccomandazione in vari settori archiviando embedding di utenti e articoli ed eseguendo ricerche di similarità. Questo approccio è particolarmente efficace nelle raccomandazioni personalizzate per film, musica, prodotti e feed di contenuti. Ad esempio, un sistema di raccomandazione di film può utilizzare Milvus per abbinare semanticamente le preferenze degli utenti con i vettori dei film, suggerendo film in linea con i gusti individuali senza richiedere query esplicite da parte dell'utente. Maggiori informazioni qui.
Motori di ricerca di contenuti: Per applicazioni che coinvolgono grandi set di dati di contenuti testuali non strutturati, Milvus può trasformare il testo in forma vettoriale ed eseguire ricerche di similarità efficienti con varie metodologie. Questa capacità è cruciale per sviluppare motori di ricerca sofisticati che vadano oltre la corrispondenza delle parole chiave per comprendere il contesto semantico delle query degli utenti, migliorando così la pertinenza e l'accuratezza dei risultati di ricerca.
Sfide e soluzioni
- Scalabilità dei dati
Gestire enormi quantità di dati vettoriali può essere impegnativo. Milvus affronta questo aspetto tramite funzionalità come il partizionamento e lo sharding, che aiutano a gestire grandi set di dati distribuendo i dati su nodi diversi, migliorando così prestazioni e scalabilità.
- Latenza delle query
L'ottimizzazione dei parametri degli indici e il dimensionamento efficace del cluster Milvus riducono la latenza delle query. Milvus supporta vari tipi di indice come HNSW, IVF e Product Quantization, che possono essere adattati a casi d'uso specifici per bilanciare velocità e accuratezza.
Casi d'uso avanzati
Riconoscimento di immagini e video
Milvus viene utilizzato in applicazioni di analisi di immagini e video ad alto throughput, come sistemi di deduplicazione video e ricerche di similarità delle immagini. Ad esempio, piattaforme come Shopee utilizzano Milvus per migliorare le capacità di richiamo video in tempo reale e di ricerca per corrispondenza del copyright.
Chatbot basati sull'AI e assistenza clienti
L'integrazione di Milvus con modelli di AI consente lo sviluppo di chatbot basati su RAG per comprendere e rispondere alle query degli utenti con elevata pertinenza e accuratezza. Aziende come PayPal e Farfetch utilizzano Milvus per alimentare l'AI conversazionale per l'assistenza clienti ed esperienze di shopping personalizzate.
Conclusione
Milvus migliora significativamente le capacità delle applicazioni Spring AI fornendo una gestione e un recupero efficienti dei dati vettoriali. La sua versatilità in vari ambiti—dall’e-commerce e l’intrattenimento alla sanità e ai servizi finanziari—dimostra il suo potenziale di trasformare i settori consentendo funzionalità applicative più intelligenti, reattive e personalizzate. Gli sviluppatori sono incoraggiati a sfruttare le funzionalità avanzate e le opzioni di configurazione flessibili di Milvus per ottimizzare le proprie applicazioni ed esplorare nuove possibilità nelle soluzioni basate sull’IA.
Continua a leggere

How to Improve Retrieval Quality for Japanese Text with Sudachi, Milvus/Zilliz, and AWS Bedrock
Learn how Sudachi normalization and Milvus/Zilliz hybrid search improve Japanese RAG accuracy with BM25 + vector fusion, AWS Bedrock embeddings, and practical code examples.

Milvus 2.6.x Now Generally Available on Zilliz Cloud, Making Vector Search Faster, Smarter, and More Cost-Efficient for Production AI
Milvus 2.6.x is now GA on Zilliz Cloud, delivering faster vector search, smarter hybrid queries, and lower costs for production RAG and AI applications.

The Great AI Agent Protocol Race: Function Calling vs. MCP vs. A2A
Compare Function Calling, MCP, and A2A protocols for AI agents. Learn which standard best fits your development needs and future-proof your applications.


