Spring AI и Milvus: использование Milvus в качестве векторного хранилища Spring AI
Введение
В современном мире способность быстро обрабатывать и анализировать большие объемы данных может значительно расширить функциональность приложений. Это особенно актуально в таких областях, как искусственный интеллект и машинное обучение, где данные часто существуют в форме многомерных векторов. Интеграция векторных баз данных, таких как Milvus, в приложения Spring AI отвечает этой потребности, предоставляя эффективные возможности обработки и извлечения данных. Эта интеграция позволяет разработчикам быстро и точно выполнять сложные запросы и поиск по сходству, способствуя улучшению пользовательского опыта и более интеллектуальному поведению приложений.
Milvus выделяется среди векторных баз данных благодаря своим надежным функциям, ориентированным на масштабируемость и производительность при управлении векторными данными. Как платформа с открытым исходным кодом, она предлагает гибкое и экономичное решение для компаний и разработчиков, стремящихся использовать расширенные возможности поиска в приложениях. Milvus поддерживает различные стратегии индексирования, которые имеют решающее значение для оптимизации производительности поиска по большим неструктурированным документам. Это делает его отличным выбором для приложений, связанных с распознаванием изображений и видео, анализом текста и любой другой областью, где поиск по сходству имеет ключевое значение.
Настройка и конфигурация для интеграции Milvus с приложениями Spring Boot
Настройка Milvus с использованием Docker Compose
Чтобы интегрировать Milvus со Spring AI в приложении Spring Boot, начните с настройки экземпляра Milvus с помощью Docker Compose. Этот метод прост и подходит для сред разработки.
Процедура:
Загрузите YAML-файл Docker Compose: используйте следующую команду, чтобы загрузить конкретную версию файла Milvus Docker Compose:
wget https://github.com/milvus-io/milvus/releases/download/v2.4.0/milvus-standalone-docker-compose.yml -O docker-compose.yml
Запустите экземпляр Milvus: перейдите в каталог, содержащий файл docker-compose.yml, и запустите экземпляр Milvus:
docker-compose up -d
Убедитесь, что установлен Docker Compose V2, так как он рекомендуется вместо V1 для лучшей производительности и совместимости. Вы можете проверить наличие VectorDB в Docker Desktop(Windows) после завершения выполнения команды:
Для linux можно выполнить эту команду:
docker ps
2. Создайте проект Spring Boot
Сгенерируйте проект: используйте Spring Initializr для создания нового проекта Spring Boot. Выберите Maven или Gradle(здесь использовался Gradle) в качестве инструмента сборки и добавьте зависимости, такие как 'Spring Web' и 'Spring Data JPA'.
Настройте окружение проекта: после загрузки извлеките zip-файл и откройте проект в предпочитаемой вами IDE.
Spring Initializr
3. Добавьте зависимости для интеграции Milvus и OpenAI
В зависимости от того, используете ли вы Maven или Gradle, добавьте необходимые зависимости для интеграции Milvus и OpenAI со Spring AI.
Для 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
}
Подключение Spring AI к Milvus: подробная конфигурация и использование
В контексте Spring AI Milvus служит серверной частью для хранения и управления векторными данными, позволяя быстро и масштабируемо извлекать похожие элементы на основе векторного сходства. Вот как можно соединить их вместе.
1. Настройте Milvus и OpenAI в Spring Boot
Добавьте следующие свойства в ваш application.properties или application.yml, чтобы настроить подключение к Milvus и настроить эмбеддинги OpenAI:
Для 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
Замените YOUR_API_KEY фактическим API-ключом, полученным от OpenAI. Эта настройка предоставляет базовую конфигурацию для интеграции Milvus с приложением Spring Boot с использованием Spring AI и OpenAI для эмбеддингов. При необходимости настройте конфигурации и зависимости в соответствии с вашими конкретными требованиями и средой.
2. Автоматически внедрите VectorStore в ваш сервис
В вашем Spring-сервисе автоматически внедрите VectorStore для взаимодействия с базой данных Milvus. Вот как это можно сделать:
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. Использование EmbeddingClient для генерации эмбеддингов
Чтобы генерировать эмбеддинги, которые можно хранить в Milvus, используйте EmbeddingClient, предоставляемый Spring AI. Вот как это можно сделать:
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: реализация векторного хранилища
Сохранение и извлечение векторных данных
Чтобы эффективно использовать Milvus для векторного хранения в приложениях Spring AI, разработчикам необходимо понимать, как сохранять, извлекать и управлять векторными данными. Ниже приведены примеры кода Java, демонстрирующие эти возможности.
Добавление документов в 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);
}
}
Поиск похожих документов:
public List<Document> searchSimilarDocuments() {
return vectorStore.similaritySearch(
SearchRequest.query("Efficient data processing and retrieval")
.withTopK(3)
.withSimilarityThreshold(0.1)
);
}
Генерация эмбеддингов с OpenAI:
Эмбеддинги имеют решающее значение для векторного поиска. Вот как вы можете генерировать эмбеддинги с помощью сервиса OpenAI в приложении 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);
}
}
Расширенная конфигурация и настройка
Milvus предлагает несколько расширенных параметров для оптимизации хранения и извлечения векторов. К ним относятся пользовательские стратегии индексирования и параметры настройки производительности.
Пример расширенной конфигурации в Milvus:
spring.ai.vectorstore.milvus.indexType=HNSW
spring.ai.vectorstore.milvus.metricType=EUCLIDEAN
Эти свойства можно задать в файле application.properties, чтобы использовать различные стратегии индексирования, такие как Hierarchical Navigable Small World (HNSW), и различные типы метрик, например EUCLIDEAN, для расчета расстояния.
Варианты использования и практические применения Milvus в Spring AI
Рекомендательные системы:
Milvus обеспечивает работу рекомендательных систем в различных отраслях, храня эмбеддинги пользователей и объектов и выполняя поиск по сходству. Этот подход особенно эффективен в персонализированных рекомендациях фильмов, музыки, товаров и лент контента. Например, система рекомендаций фильмов может использовать Milvus для семантического сопоставления предпочтений пользователей с векторами фильмов, предлагая фильмы, соответствующие индивидуальным вкусам, без необходимости явных пользовательских запросов. Подробнее об этом здесь.
Поисковые системы контента: Для приложений, работающих с большими наборами неструктурированного текстового контента, Milvus может преобразовывать текст в векторную форму и выполнять эффективный поиск по сходству с использованием различных методологий. Эта возможность имеет решающее значение для разработки сложных поисковых систем, которые выходят за рамки сопоставления ключевых слов и понимают семантический контекст пользовательских запросов, тем самым повышая релевантность и точность результатов поиска.
Проблемы и решения
- Масштабируемость данных
Обработка огромных объемов векторных данных может быть сложной задачей. Milvus решает эту проблему с помощью таких функций, как секционирование и шардинг, которые помогают управлять большими наборами данных, распределяя данные по разным узлам, тем самым повышая производительность и масштабируемость.
- Задержка запросов
Оптимизация параметров индекса и эффективное масштабирование кластера Milvus снижают задержку запросов. Milvus поддерживает различные типы индексов, такие как HNSW, IVF и Product Quantization, которые можно адаптировать к конкретным вариантам использования, чтобы сбалансировать скорость и точность.
Расширенные варианты использования
Распознавание изображений и видео
Milvus используется в приложениях для высокопроизводительного анализа изображений и видео, таких как системы дедупликации видео и поиск похожих изображений. Например, платформы вроде Shopee используют Milvus для улучшения возможностей видеопоиска в реальном времени и поиска совпадений по авторским правам.
Чат-боты и поддержка клиентов на базе ИИ
Интеграция Milvus с моделями ИИ позволяет разрабатывать чат-ботов на основе RAG, чтобы понимать пользовательские запросы и отвечать на них с высокой релевантностью и точностью. Такие компании, как PayPal и Farfetch, используют Milvus для обеспечения работы разговорного ИИ в поддержке клиентов и персонализированном шопинге.
Заключение
Milvus значительно расширяет возможности приложений Spring AI, обеспечивая эффективное управление векторными данными и их извлечение. Его универсальность в различных областях — от электронной коммерции и развлечений до здравоохранения и финансовых услуг — демонстрирует его потенциал для трансформации отраслей за счет создания более интеллектуальных, отзывчивых и персонализированных функций приложений. Разработчикам рекомендуется использовать расширенные возможности Milvus и гибкие параметры конфигурации для оптимизации своих приложений и изучения новых возможностей в решениях на базе ИИ.
Читать далее

Democratizing AI: Making Vector Search Powerful and Affordable
Zilliz democratizes AI vector search with Milvus 2.6 and Zilliz Cloud for powerful, affordable scalability, cutting costs in infrastructure, operations, and development.

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.

Vector Databases vs. Graph Databases
Use a vector database for AI-powered similarity search; use a graph database for complex relationship-based queries and network analysis.


