46.5kЗаказать демоВойтиНачать бесплатно

Spring AI и Milvus: использование Milvus в качестве векторного хранилища Spring AI

Apr 22, 20246 min read

Введение

В современном мире способность быстро обрабатывать и анализировать большие объемы данных может значительно расширить функциональность приложений. Это особенно актуально в таких областях, как искусственный интеллект и машинное обучение, где данные часто существуют в форме многомерных векторов. Интеграция векторных баз данных, таких как Milvus, в приложения Spring AI отвечает этой потребности, предоставляя эффективные возможности обработки и извлечения данных. Эта интеграция позволяет разработчикам быстро и точно выполнять сложные запросы и поиск по сходству, способствуя улучшению пользовательского опыта и более интеллектуальному поведению приложений.

Milvus выделяется среди векторных баз данных благодаря своим надежным функциям, ориентированным на масштабируемость и производительность при управлении векторными данными. Как платформа с открытым исходным кодом, она предлагает гибкое и экономичное решение для компаний и разработчиков, стремящихся использовать расширенные возможности поиска в приложениях. Milvus поддерживает различные стратегии индексирования, которые имеют решающее значение для оптимизации производительности поиска по большим неструктурированным документам. Это делает его отличным выбором для приложений, связанных с распознаванием изображений и видео, анализом текста и любой другой областью, где поиск по сходству имеет ключевое значение.

Настройка и конфигурация для интеграции Milvus с приложениями Spring Boot

  1. Настройка 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 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 может преобразовывать текст в векторную форму и выполнять эффективный поиск по сходству с использованием различных методологий. Эта возможность имеет решающее значение для разработки сложных поисковых систем, которые выходят за рамки сопоставления ключевых слов и понимают семантический контекст пользовательских запросов, тем самым повышая релевантность и точность результатов поиска.

Проблемы и решения

  1. Масштабируемость данных

Обработка огромных объемов векторных данных может быть сложной задачей. Milvus решает эту проблему с помощью таких функций, как секционирование и шардинг, которые помогают управлять большими наборами данных, распределяя данные по разным узлам, тем самым повышая производительность и масштабируемость.

  1. Задержка запросов

Оптимизация параметров индекса и эффективное масштабирование кластера Milvus снижают задержку запросов. Milvus поддерживает различные типы индексов, такие как HNSW, IVF и Product Quantization, которые можно адаптировать к конкретным вариантам использования, чтобы сбалансировать скорость и точность.

Расширенные варианты использования

Распознавание изображений и видео

Milvus используется в приложениях для высокопроизводительного анализа изображений и видео, таких как системы дедупликации видео и поиск похожих изображений. Например, платформы вроде Shopee используют Milvus для улучшения возможностей видеопоиска в реальном времени и поиска совпадений по авторским правам.

Чат-боты и поддержка клиентов на базе ИИ

Интеграция Milvus с моделями ИИ позволяет разрабатывать чат-ботов на основе RAG, чтобы понимать пользовательские запросы и отвечать на них с высокой релевантностью и точностью. Такие компании, как PayPal и Farfetch, используют Milvus для обеспечения работы разговорного ИИ в поддержке клиентов и персонализированном шопинге.

Заключение

Milvus значительно расширяет возможности приложений Spring AI, обеспечивая эффективное управление векторными данными и их извлечение. Его универсальность в различных областях — от электронной коммерции и развлечений до здравоохранения и финансовых услуг — демонстрирует его потенциал для трансформации отраслей за счет создания более интеллектуальных, отзывчивых и персонализированных функций приложений. Разработчикам рекомендуется использовать расширенные возможности Milvus и гибкие параметры конфигурации для оптимизации своих приложений и изучения новых возможностей в решениях на базе ИИ.

Обновлено Jul 09, 2026