Spring AI und Milvus: Milvus als Spring-AI-Vektorspeicher verwenden
Einführung
In der heutigen Welt kann die Fähigkeit, große Datenmengen schnell zu verarbeiten und zu analysieren, die Funktionalität von Anwendungen erheblich verbessern. Dies gilt insbesondere in Bereichen wie künstlicher Intelligenz und maschinellem Lernen, in denen Daten häufig in hochdimensionaler Vektorform vorliegen. Die Integration von Vektordatenbanken wie Milvus in Spring-AI-Anwendungen erfüllt diesen Bedarf, indem sie effiziente Funktionen zur Datenverarbeitung und -abfrage bereitstellt. Diese Integration ermöglicht es Entwicklern, komplexe Abfragen und Ähnlichkeitssuchen schnell und präzise durchzuführen, wodurch bessere Benutzererlebnisse und ein intelligenteres Anwendungsverhalten ermöglicht werden.
Milvus hebt sich in der Landschaft der Vektordatenbanken durch seine robusten Funktionen hervor, die auf Skalierbarkeit und Leistung bei der Verwaltung von Vektordaten zugeschnitten sind. Als Open-Source-Plattform bietet es eine flexible und kosteneffiziente Lösung für Unternehmen und Entwickler, die fortschrittliche Suchfunktionen in Anwendungen nutzen möchten. Milvus unterstützt eine Vielzahl von Indexierungsstrategien, die entscheidend sind, um die Suchleistung über große, unstrukturierte Dokumente hinweg zu optimieren. Dies macht es zu einer ausgezeichneten Wahl für Anwendungen mit Bild- und Videoerkennung, Textanalyse und jedem anderen Bereich, in dem Ähnlichkeitssuche entscheidend ist.
Einrichtung und Konfiguration zur Integration von Milvus in Spring-Boot-Anwendungen
Einrichten von Milvus mit Docker Compose
Um Milvus mit Spring AI in einer Spring-Boot-Anwendung zu integrieren, beginnen Sie mit der Einrichtung einer Milvus-Instanz mit Docker Compose. Diese Methode ist unkompliziert und für Entwicklungsumgebungen geeignet.
Vorgehensweise:
Docker-Compose-YAML-Datei herunterladen: Verwenden Sie den folgenden Befehl, um die spezifische Version der Milvus-Docker-Compose-Datei herunterzuladen:
wget https://github.com/milvus-io/milvus/releases/download/v2.4.0/milvus-standalone-docker-compose.yml -O docker-compose.yml
Milvus-Instanz starten: Navigieren Sie zu dem Verzeichnis, das die Datei docker-compose.yml enthält, und starten Sie die Milvus-Instanz:
docker-compose up -d
Stellen Sie sicher, dass Docker Compose V2 installiert ist, da es gegenüber V1 für bessere Leistung und Kompatibilität empfohlen wird. Sie können nach Abschluss des Befehls auf Docker Desktop(Windows) prüfen, ob VectorDB vorhanden ist:
Für Linux können Sie diesen Befehl ausführen:
docker ps
2. Ein Spring-Boot-Projekt erstellen
Projekt generieren: Verwenden Sie Spring Initializr, um ein neues Spring-Boot-Projekt zu erstellen. Wählen Sie entweder Maven oder Gradle(Das hier verwendete war Gradle) als Build-Tool aus und fügen Sie Abhängigkeiten wie 'Spring Web' und 'Spring Data JPA' hinzu.
Projektumgebung einrichten: Entpacken Sie nach dem Herunterladen die ZIP-Datei und öffnen Sie das Projekt in Ihrer bevorzugten IDE.
Spring Initializr
3. Abhängigkeiten für die Integration von Milvus und OpenAI hinzufügen
Je nachdem, ob Sie Maven oder Gradle verwenden, fügen Sie die erforderlichen Abhängigkeiten hinzu, um Milvus und OpenAI mit Spring AI zu integrieren.
Für 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
}
Verbindung von Spring AI mit Milvus: Detaillierte Konfiguration und Nutzung
Im Kontext von Spring AI dient Milvus als Backend zum Speichern und Verwalten von Vektordaten und ermöglicht eine schnelle und skalierbare Abfrage ähnlicher Elemente basierend auf Vektorähnlichkeit. So können Sie sie miteinander verbinden.
1. Milvus und OpenAI in Spring Boot konfigurieren
Fügen Sie die folgenden Eigenschaften zu Ihrer application.properties oder application.yml hinzu, um die Verbindung zu Milvus zu konfigurieren und OpenAI-Embeddings einzurichten:
Für 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
Ersetzen Sie YOUR_API_KEY durch den tatsächlichen API-Schlüssel, den Sie von OpenAI erhalten haben. Diese Einrichtung bietet eine grundlegende Konfiguration für die Integration von Milvus in eine Spring Boot-Anwendung unter Verwendung von Spring AI und OpenAI für Embeddings. Passen Sie die Konfigurationen und Abhängigkeiten bei Bedarf an Ihre spezifischen Anforderungen und Ihre Umgebung an.
2. Autowire des VectorStore in Ihrem Service
Führen Sie in Ihrem Spring-Service ein Autowire des VectorStore durch, um mit der Milvus-Datenbank zu interagieren. So kann es umgesetzt werden:
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. Verwendung des EmbeddingClient zum Generieren von Embeddings
Um Embeddings zu generieren, die in Milvus gespeichert werden können, verwenden Sie den von Spring AI bereitgestellten EmbeddingClient. So kann es umgesetzt werden:
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;
}
}
Java-Codebeispiele: Implementierung von Vektorspeicherung
Speichern und Abrufen von Vektordaten
Um Milvus effektiv für die Vektorspeicherung innerhalb von Spring AI-Anwendungen zu nutzen, müssen Entwickler verstehen, wie Vektordaten gespeichert, abgerufen und verwaltet werden. Nachfolgend finden Sie Java-Codebeispiele, die diese Funktionalitäten demonstrieren.
Hinzufügen von Dokumenten zu 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);
}
}
Suche nach ähnlichen Dokumenten:
public List<Document> searchSimilarDocuments() {
return vectorStore.similaritySearch(
SearchRequest.query("Efficient data processing and retrieval")
.withTopK(3)
.withSimilarityThreshold(0.1)
);
}
Generieren von Embeddings mit OpenAI:
Embeddings sind entscheidend für vektorbasierte Suchen. So können Sie Embeddings mithilfe des Dienstes von OpenAI innerhalb einer Spring AI-Anwendung generieren:
@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);
}
}
Erweiterte Konfiguration und Anpassung
Milvus bietet mehrere erweiterte Einstellungen zur Optimierung der Vektorspeicherung und -abfrage. Dazu gehören benutzerdefinierte Indexierungsstrategien und Optionen zur Leistungsoptimierung.
Beispiel für eine erweiterte Konfiguration in Milvus:
spring.ai.vectorstore.milvus.indexType=HNSW
spring.ai.vectorstore.milvus.metricType=EUCLIDEAN
Diese Eigenschaften können in der Datei application.properties festgelegt werden, um unterschiedliche Indexierungsstrategien wie Hierarchical Navigable Small World (HNSW) und unterschiedliche Metriktypen wie EUCLIDEAN für die Distanzberechnung zu verwenden.
Anwendungsfälle und praktische Anwendungen von Milvus in Spring AI
Empfehlungssysteme:
Milvus betreibt Empfehlungssysteme in verschiedenen Branchen, indem es Benutzer- und Item-Embeddings speichert und Ähnlichkeitssuchen durchführt. Dieser Ansatz ist besonders effektiv bei personalisierten Empfehlungen für Filme, Musik, Produkte und Content-Feeds. Beispielsweise kann ein Filmempfehlungssystem Milvus verwenden, um Benutzerpräferenzen semantisch mit Filmvektoren abzugleichen und Filme vorzuschlagen, die dem individuellen Geschmack entsprechen, ohne explizite Benutzerabfragen zu erfordern. Mehr dazu hier.
Content-Suchmaschinen: Für Anwendungen mit großen Datensätzen unstrukturierter textueller Inhalte kann Milvus Text in Vektorform umwandeln und effiziente Ähnlichkeitssuchen mit verschiedenen Methoden durchführen. Diese Fähigkeit ist entscheidend für die Entwicklung anspruchsvoller Suchmaschinen, die über Keyword-Matching hinausgehen, um den semantischen Kontext von Benutzeranfragen zu verstehen und dadurch die Relevanz und Genauigkeit der Suchergebnisse zu verbessern.
Herausforderungen und Lösungen
- Datenskalierbarkeit
Der Umgang mit großen Mengen an Vektordaten kann herausfordernd sein. Milvus begegnet dem durch Funktionen wie Partitionierung und Sharding, die dabei helfen, große Datensätze zu verwalten, indem Daten auf verschiedene Knoten verteilt werden, wodurch Leistung und Skalierbarkeit verbessert werden.
- Abfragelatenz
Die Optimierung von Indexparametern und die effektive Skalierung des Milvus-Clusters reduzieren die Abfragelatenz. Milvus unterstützt verschiedene Indextypen wie HNSW, IVF und Product Quantization, die auf spezifische Anwendungsfälle zugeschnitten werden können, um Geschwindigkeit und Genauigkeit auszubalancieren.
Erweiterte Anwendungsfälle
Bild- und Videoerkennung
Milvus wird in hochdurchsatzfähigen Anwendungen zur Bild- und Videoanalyse eingesetzt, etwa in Systemen zur Video-Deduplizierung und bei Bildähnlichkeitssuchen. Beispielsweise nutzen Plattformen wie Shopee Milvus, um Echtzeit-Video-Recall und Suchfunktionen für Copyright-Abgleiche zu verbessern.
KI-gesteuerte Chatbots und Kundensupport
Die Integration von Milvus mit KI-Modellen ermöglicht die Entwicklung RAG-basierter Chatbots, um Benutzeranfragen mit hoher Relevanz und Genauigkeit zu verstehen und zu beantworten. Unternehmen wie PayPal und Farfetch verwenden Milvus, um Conversational AI für Kundensupport und personalisierte Einkaufserlebnisse zu betreiben.
Fazit
Milvus erweitert die Fähigkeiten von Spring-AI-Anwendungen erheblich, indem es eine effiziente Verwaltung und Abfrage von Vektordaten ermöglicht. Seine Vielseitigkeit in verschiedenen Bereichen – von E-Commerce und Unterhaltung bis hin zu Gesundheitswesen und Finanzdienstleistungen – zeigt sein Potenzial, Branchen zu transformieren, indem intelligentere, reaktionsschnellere und personalisierte Anwendungsfunktionen ermöglicht werden. Entwickler werden ermutigt, die fortschrittlichen Funktionen und flexiblen Konfigurationsoptionen von Milvus zu nutzen, um ihre Anwendungen zu optimieren und neue Möglichkeiten in KI-gesteuerten Lösungen zu erkunden.
Weiterlesen

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.

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.

What is the K-Nearest Neighbors (KNN) Algorithm in Machine Learning?
KNN is a supervised machine learning technique and algorithm for classification and regression. This post is the ultimate guide to KNN.


