Spring AI e Milvus: Usando Milvus como um Vector Store do Spring AI
Introdução
No mundo atual, a capacidade de processar e analisar rapidamente grandes volumes de dados pode aprimorar significativamente a funcionalidade das aplicações. Isso é particularmente verdadeiro em áreas como inteligência artificial e aprendizado de máquina, onde os dados frequentemente existem em forma vetorial de alta dimensionalidade. Integrar bancos de dados vetoriais como o Milvus em aplicações Spring AI atende a essa necessidade ao fornecer recursos eficientes de manipulação e recuperação de dados. Essa integração permite que desenvolvedores realizem consultas complexas e buscas por similaridade de forma rápida e precisa, facilitando melhores experiências para os usuários e um comportamento mais inteligente das aplicações.
O Milvus se destaca no cenário de bancos de dados vetoriais devido aos seus recursos robustos, adaptados para escalabilidade e desempenho no gerenciamento de dados vetoriais. Como uma plataforma de código aberto, ele oferece uma solução flexível e econômica para empresas e desenvolvedores que desejam aproveitar recursos avançados de busca em aplicações. O Milvus oferece suporte a uma variedade de estratégias de indexação, que são cruciais para otimizar o desempenho de busca em grandes documentos não estruturados. Isso o torna uma excelente escolha para aplicações envolvendo reconhecimento de imagens e vídeos, análise de texto e qualquer outro domínio em que a busca por similaridade seja crucial.
Configuração e Preparação para Integrar o Milvus com Aplicações Spring Boot
Configurando o Milvus Usando Docker Compose
Para integrar o Milvus com o Spring AI em uma aplicação Spring Boot, comece configurando uma instância do Milvus usando Docker Compose. Esse método é direto e adequado para ambientes de desenvolvimento.
Procedimento:
Baixe o arquivo YAML do Docker Compose: Use o comando a seguir para baixar a versão específica do arquivo Docker Compose do Milvus:
wget https://github.com/milvus-io/milvus/releases/download/v2.4.0/milvus-standalone-docker-compose.yml -O docker-compose.yml
Inicie a instância do Milvus: Navegue até o diretório que contém o arquivo docker-compose.yml e inicie a instância do Milvus:
docker-compose up -d
Certifique-se de que o Docker Compose V2 esteja instalado, pois ele é recomendado em vez da V1 para melhor desempenho e compatibilidade. Você pode verificar a presença do VectorDB no Docker Desktop(Windows) assim que o comando terminar de executar:
Para linux, você pode executar este comando:
docker ps
2. Crie um Projeto Spring Boot
Gere o projeto: Use o Spring Initializr para criar um novo projeto Spring Boot. Selecione Maven ou Gradle(O usado aqui foi Gradle) como ferramenta de build e adicione dependências como 'Spring Web' e 'Spring Data JPA'.
Configure o ambiente do projeto: Após o download, extraia o arquivo zip e abra o projeto no seu IDE preferido.
Spring Initializr
3. Adicione Dependências para Integração com Milvus e OpenAI
Dependendo de você estar usando Maven ou Gradle, adicione as dependências necessárias para integrar o Milvus e a OpenAI com o Spring AI.
Para 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
}
Conectando o Spring AI ao Milvus: Configuração Detalhada e Uso
No contexto do Spring AI, o Milvus serve como backend para armazenar e gerenciar dados vetoriais, permitindo a recuperação rápida e escalável de itens semelhantes com base na similaridade vetorial. Veja como você pode conectá-los.
1. Configure o Milvus e a OpenAI no Spring Boot
Adicione as seguintes propriedades ao seu application.properties ou application.yml para configurar a conexão com o Milvus e configurar embeddings da OpenAI:
Para 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
Substitua YOUR_API_KEY pela chave de API real obtida da OpenAI. Esta configuração fornece uma configuração básica para integrar o Milvus a uma aplicação Spring Boot usando Spring AI e OpenAI para embeddings. Ajuste as configurações e dependências conforme necessário com base nos seus requisitos e ambiente específicos.
2. Faça Autowire do VectorStore no Seu Serviço
No seu serviço Spring, faça autowire do VectorStore para interagir com o banco de dados Milvus. É assim que isso pode ser feito:
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. Usando o EmbeddingClient para Gerar Embeddings
Para gerar embeddings que podem ser armazenados no Milvus, use o EmbeddingClient fornecido pelo Spring AI. É assim que isso pode ser feito:
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;
}
}
Exemplos de Código Java: Implementando Armazenamento Vetorial
Armazenando e Recuperando Dados Vetoriais
Para utilizar efetivamente o Milvus para armazenamento vetorial em aplicações Spring AI, os desenvolvedores precisam entender como armazenar, recuperar e gerenciar dados vetoriais. Abaixo estão exemplos de código Java que demonstram essas funcionalidades.
Adicionando Documentos ao 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);
}
}
Pesquisando Documentos Semelhantes:
public List<Document> searchSimilarDocuments() {
return vectorStore.similaritySearch(
SearchRequest.query("Efficient data processing and retrieval")
.withTopK(3)
.withSimilarityThreshold(0.1)
);
}
Gerando Embeddings com OpenAI:
Embeddings são cruciais para buscas baseadas em vetores. Veja como você pode gerar embeddings usando o serviço da OpenAI dentro de uma aplicação 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);
}
}
Configuração e Personalização Avançadas
O Milvus oferece várias configurações avançadas para otimizar o armazenamento e a recuperação de vetores. Isso inclui estratégias de indexação personalizadas e opções de ajuste de desempenho.
Exemplo de Configuração Avançada no Milvus:
spring.ai.vectorstore.milvus.indexType=HNSW
spring.ai.vectorstore.milvus.metricType=EUCLIDEAN
Essas propriedades podem ser definidas no arquivo application.properties para usar diferentes estratégias de indexação, como Hierarchical Navigable Small World (HNSW), e diferentes tipos de métricas, como EUCLIDEAN, para o cálculo de distância.
Casos de Uso e Aplicações Práticas do Milvus no Spring AI
Sistemas de Recomendação:
O Milvus impulsiona sistemas de recomendação em vários setores ao armazenar embeddings de usuários e itens e realizar buscas por similaridade. Essa abordagem é particularmente eficaz em recomendações personalizadas de filmes, música, produtos e feeds de conteúdo. Por exemplo, um sistema de recomendação de filmes pode usar o Milvus para corresponder semanticamente as preferências dos usuários com vetores de filmes, sugerindo filmes que se alinham aos gostos individuais sem exigir consultas explícitas dos usuários. Mais sobre isso aqui.
Mecanismos de Busca de Conteúdo: Para aplicações que envolvem grandes conjuntos de dados de conteúdo textual não estruturado, o Milvus pode transformar texto em forma vetorial e realizar buscas eficientes por similaridade com várias metodologias. Essa capacidade é crucial para desenvolver mecanismos de busca sofisticados que vão além da correspondência de palavras-chave para entender o contexto semântico das consultas dos usuários, melhorando assim a relevância e a precisão dos resultados de busca.
Desafios e Soluções
- Escalabilidade de Dados
Lidar com grandes volumes de dados vetoriais pode ser desafiador. O Milvus resolve isso por meio de recursos como particionamento e sharding, que ajudam a gerenciar grandes conjuntos de dados distribuindo os dados por diferentes nós, melhorando assim o desempenho e a escalabilidade.
- Latência de Consulta
Otimizar parâmetros de índice e escalar o cluster Milvus reduz efetivamente a latência de consulta. O Milvus oferece suporte a vários tipos de índice, como HNSW, IVF e Product Quantization, que podem ser adaptados a casos de uso específicos para equilibrar velocidade e precisão.
Casos de Uso Avançados
Reconhecimento de Imagens e Vídeos
O Milvus é usado em aplicações de análise de imagens e vídeos de alto throughput, como sistemas de desduplicação de vídeos e buscas por similaridade de imagens. Por exemplo, plataformas como a Shopee utilizam o Milvus para aprimorar capacidades de recuperação de vídeo em tempo real e busca por correspondência de direitos autorais.
Chatbots Orientados por IA e Suporte ao Cliente
Integrar o Milvus com modelos de IA permite o desenvolvimento de chatbots baseados em RAG para entender e responder às consultas dos usuários com alta relevância e precisão. Empresas como PayPal e Farfetch usam o Milvus para impulsionar IA conversacional para suporte ao cliente e experiências de compra personalizadas.
Conclusão
Milvus aprimora significativamente as capacidades das aplicações Spring AI ao fornecer gerenciamento e recuperação eficientes de dados vetoriais. Sua versatilidade em diversos domínios — do comércio eletrônico e entretenimento à saúde e serviços financeiros — demonstra seu potencial para transformar setores ao possibilitar funcionalidades de aplicações mais inteligentes, responsivas e personalizadas. Os desenvolvedores são incentivados a aproveitar os recursos avançados e as opções de configuração flexíveis do Milvus para otimizar suas aplicações e explorar novas possibilidades em soluções orientadas por IA.
Continue lendo

Why We Built Vector Lakebase: Rethinking Unstructured Data Architecture for AI
Vector Lakebase: a unified, lake-native data foundation for AI workloads — and an answer to what happens after vector databases succeed.

How Zilliz Saw the Future of Vector Databases—and Built for Production
An inside look at how Zilliz built vector databases for real-world use, focusing on scalability, stability, and running them reliably at scale.

Announcing VDBBench 1.0: Open-Source VectorDB Benchmarking with Your Real-World Production Workloads
Discover VDBBench 1.0, an open-source tool for benchmarking vector databases with real-world production data, streaming ingestion, and concurrent workloads.


