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 и гибкие параметры конфигурации для оптимизации своих приложений и изучения новых возможностей в решениях на базе ИИ.
Читать далее

My Wife Wanted Dior. I Spent $600 on Claude Code to Vibe-Code a 2M-Line Database Instead.
Write tests, not code reviews. How a test-first workflow with 6 parallel Claude Code sessions turns a 2M-line C++ codebase into a daily shipping pipeline.

AI Agents Are Quietly Transforming E-Commerce — Here’s How
Discover how AI agents transform e-commerce with autonomous decision-making, enhanced product discovery, and vector search capabilities for today's retailers.

DeepSeek-VL2: Mixture-of-Experts Vision-Language Models for Advanced Multimodal Understanding
Explore DeepSeek-VL2, the open-source MoE vision-language model. Discover its architecture, efficient training pipeline, and top-tier performance.


