AI 和 Milvus:将 Milvus 用作 Spring AI 向量存储
介绍
在当今世界,快速处理和分析大量数据的能力可以显著增强应用程序的功能。这在人工智能和机器学习领域尤其如此,数据通常以高维向量形式存在。将像 Milvus 这样的向量数据库集成到 Spring AI 应用程序中,通过提供高效的数据处理和检索能力来满足这一需求。这种集成允许开发人员快速准确地执行复杂查询和相似性搜索,从而促进更好的用户体验和更智能的应用程序行为。
Milvus 在向量数据库领域因其为可扩展性和性能而设计的健壮特性而脱颖而出,这些特性在管理向量数据方面至关重要。作为一个开源平台,它为希望利用高级应用程序搜索能力的企业和开发人员提供了一种灵活且成本效益的解决方案。Milvus 支持多种索引策略,这对于优化大型、非结构化文档的搜索性能至关重要。这使得它成为涉及图像和视频识别、文本分析以及任何需要相似性搜索的领域的优秀选择。
将 Milvus 与 Spring Boot 应用程序集成的设置和配置
- 使用 Docker Compose 设置 Milvus 2. 要将 Milvus 与 Spring AI 在 Spring Boot 应用程序中集成,首先使用 Docker Compose 设置 Milvus 实例。这种方法简单明了,适合开发环境。
流程:
下载 Docker Compose YAML 文件:使用以下命令下载 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 推荐使用,具有更好的性能和兼容性。您可以在命令运行完成后在 Docker Desktop(Windows)上检查 VectorDB 的存在
对于 Linux,您可以运行此命令: docker ps
- 创建 Spring Boot 项目
- 生成项目:使用 Spring Initializr 创建一个新的 Spring Boot 项目。选择 Maven 或 Gradle(这里使用的是 Gradle)作为构建工具,并添加诸如“Spring Web”和“Spring Data JPA”的依赖项。 3.设置项目环境:下载后,解压缩 zip 文件,并在您喜欢的 IDE 中打开项目。 [图片]Spring Initializr 4.添加 Milvus 和 OpenAI 集成的依赖项
- 根据您是使用 Maven 还是 Gradle,添加必要的依赖项以将 Milvus 和 OpenAI 与 Spring AI 集成。 对于 Gradle (build.gradle): 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' // 其他依赖项 }
将 Spring AI 与 Milvus 连接:详细配置和使用
在 Spring AI 的背景下,Milvus 作为存储和管理向量数据的后端,允许基于向量相似性快速、可扩展地检索相似项目。以下是如何将它们连接在一起的方法。
- 在 Spring Boot 中配置 Milvus 和 OpenAI
- 将以下属性添加到您的 application.properties 或 application.yml 中,以配置与 Milvus 的连接并设置 OpenAI 嵌入:
对于 application.properties: properties
spring.application.name=demospring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfigurationspring.ai.vectorstore.milvus.client.host=localhostspring.ai.vectorstore.milvus.client.port=19530spring.ai.vectorstore.milvus.client.username=rootspring.ai.vectorstore.milvus.client.password=milvusspring.ai.vectorstore.milvus.databaseName=defaultspring.ai.vectorstore.milvus.collectionName=vector_store_1spring.ai.vectorstore.milvus.embeddingDimension=1536spring.ai.vectorstore.milvus.indexType=IVF_FLATspring.ai.vectorstore.milvus.metricType=COSINEspring.ai.openai.api-key=YOUR_API_KEYspring.ai.openai.embedding.options.model=text-embedding-ada-002
将 YOUR_API_KEY 替换为您从 OpenAI 获取的实际 API 密钥。此设置为使用 Spring AI 和 OpenAI 进行嵌入,将 Milvus 与 Spring Boot 应用程序集成提供了基本配置。根据您特定的要求和环境,调整配置和依赖项。
- 在服务中自动装配 VectorStore
- 在您的 Spring 服务中,自动装配 VectorStore 以与 Milvus 数据库交互。以下是如何实现:
java package com.example.demo;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import org.springframework.ai.vectorstore.VectorStore;@Servicepublic class VectorStoreService { @Autowired private VectorStore vectorStore;}
使用 EmbeddingClient 生成嵌入
要生成可以存储在 Milvus 中的嵌入,使用 Spring AI 提供的 EmbeddingClient。以下是如何实现:
java 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;@RestControllerpublic class EmbeddingController { private final EmbeddingClient embeddingClient; @Autowired public EmbeddingController(EmbeddingClient embeddingClient) { this.embeddingClient = embeddingClient; }}
Java 代码示例:实现向量存储
存储和检索向量数据
为了在 Spring AI 应用程序中有效地利用 Milvus 进行向量存储,开发人员需要了解如何存储、检索和管理向量数据。以下是演示这些功能的 Java 代码示例。
向 Milvus 添加文档:
java
@Servicepublic class VectorStoreService { @Autowired private VectorStore vectorStore; public void addDocuments() { List
使用 OpenAI 生成嵌入:
嵌入对于基于向量的搜索至关重要。以下是如何在 Spring AI 应用程序中使用 OpenAI 的服务生成嵌入:
java @RestControllerpublic 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 中的高级配置示例:
properties spring.ai.vectorstore.milvus.indexType=HNSWspring.ai.vectorstore.milvus.metricType=EUCLIDEAN
这些属性可以在 application.properties 文件中设置,以使用不同的索引策略,如分层可导航小世界(HNSW)和不同的度量类型,如用于距离计算的 EUCLIDEAN。
Milvus 在 Spring AI 中的用例和实际应用
推荐系统: Milvus 通过存储用户和项目嵌入并向量并执行相似性搜索,为各个行业的推荐系统提供动力。这种方法在为电影、音乐、产品和内容源提供个性化推荐时特别有效。例如,电影推荐系统可以使用 Milvus 来语义匹配用户偏好和电影向量,推荐与个人口味相符的电影,而不需要明确的用户查询。更多信息请点击这里。
内容搜索引擎: 对于涉及大量非结构化文本内容数据集的应用,Milvus 可以将文本转换为向量形式,并使用各种方法执行高效的相似性搜索。这种能力对于开发高级搜索引擎至关重要,这些搜索引擎超越了关键词匹配,以理解用户查询的语义上下文,从而提高搜索结果的相关性和准确性。
挑战和解决方案
数据可扩展性 处理大量向量数据可能具有挑战性。Milvus 通过分区和分片等功能来解决这个问题,这些功能通过将数据分布在不同的节点上来管理大型数据集,从而提高性能和可扩展性。
查询延迟 优化索引参数和有效扩展 Milvus 集群可以减少查询延迟。Milvus 支持各种索引类型,如 HNSW、IVF 和乘积量化,这些可以根据特定用例进行定制,以平衡速度和准确性。
高级用例
图像和视频识别 Milvus 被用于高吞吐量的图像和视频分析应用,如视频去重系统和图像相似性搜索。例如,像 Shopee 这样的平台利用 Milvus 增强实时视频回忆和版权匹配搜索能力。
AI 驱动的聊天机器人和客户支持 将 Milvus 与 AI 模型集成,使得开发基于 RAG 的聊天机器人成为可能,这些机器人能够以高相关性和准确性理解和响应用户查询。像 PayPal 和 Farfetch 这样的公司使用 Milvus 为客户支持和个性化购物体验提供会话式 AI。
结论 Milvus 通过提供高效的向量数据管理和检索,显著增强了 Spring AI 应用程序的能力。它在各个领域的多功能性——从电子商务和娱乐到医疗保健和金融服务——展示了其通过实现更智能、响应更快、更个性化的应用程序功能来转变行业的潜力。鼓励开发人员利用 Milvus 的高级功能和灵活的配置选项来优化他们的应用程序,并探索 AI 驱动解决方案的新可能性。
keepReading

如何在 Jupyter Notebook 用一行代码启动 Milvus?
探索 Milvus 数据存储系统:如何评估和优化 Milvus 存储性能
Milvus 是一款支持水平扩展和具备出色性能的开源向量数据库。Milvus 的核心是其强大的存储系统,是数据持久化和存储的关键基础。该系统包括几个关键组成部分:元数据存储(meta storage)、消息存储(log broker)和对象存储(object storage)。

月活11亿的Reddit ,怎么做向量数据库选型:Pgvector、Redis、Milvus、Qdrant
现如今,借助向量检索能力,实现基于语义相似度的智能搜索,已经是所有电商、推荐、社区平台技术架构的重要一环。




