基于 Milvus Lite 的 Spring AI RAG 向量库实践方案与示例

场景

Spring AI RAG 检索增强生成:概念、实战与完整代码:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/161055108

基于之前的 RAG 示例,下面系统讲解如何将内存向量库 SimpleVectorStore

替换为生产级的持久化向量数据库,并提供完整集成方案。

Spring AI 支持的向量数据库概览

Spring AI 通过统一抽象的 VectorStore 接口,支持多种向量数据库,仅需更改依赖和配置即可切换,业务代码无需变动。

数据库 特点 适用场景
PgVector 基于 PostgreSQL,S QL 生态成熟,运维简单 已有 PostgreSQL 的生产环境
Elasticsearch 全文搜索 + 向量搜索,混合检索能力强 需要文本+向量混合查询的场景
Milvus 专为向量设计的云原生数据库,海量数据性能优秀 亿级向量相似度搜索
Weaviate 开源向量数据库,支持 GraphQL 和多模态 需要灵活 Schema 和快速原型
Chroma 轻量级,面向开发者体验,Python/JS 生态成熟 中小规模应用,快速开发
Redis Stack 基于 Redis,低延迟,内存+持久化 高并发实时检索

下面使用Milvus的方式。

在 Windows 上安装 Milvus

Milvus 官方推荐使用 Docker 安装,这是最简单、兼容性最好的方式

在 Windows 上除了使用 Docker 部署 Milvus ,还可以使用如下方式。

使用 milvus 包(Milvus Lite)极速部署:

准备工作:安装 Python 和管理环境

首先要确保有一个干净的 Python 环境。

强烈推荐用 conda 来管理,可以避免包版本冲突。

安装 Miniconda:

去 Miniconda 官网下载 Windows 安装包,

安装时记得勾选"Add Miniconda3 to my PATH environment variable"。

访问官网:打开

https://www.anaconda.com/download/

找到 Miniconda:在页面中向下滚动,找到 "Miniconda Installers" 部分

选择版本:点击 Windows 图标下的安装包即可下载。通常选择 64-Bit 版本。

开始安装:

下载完成后,双击 .exe 文件,按照安装向导的提示完成安装。

建议在安装过程中勾选 "Add Miniconda3 to my system PATH environment variable",

这样可以方便后续在命令行中直接使用 conda 命令

创建虚拟环境:安装完成后,打开终端(PowerShell 或 CMD)执行:

复制代码
# 创建并激活一个名为 milvus_env 的环境,使用兼容稳定的 Python 3.10
conda create --name milvus_env python=3.10
conda activate milvus_env

核心安装:三步完成服务部署

第一步:

安装核心库:在激活的 milvus_env 环境中执行,以安装轻量版的 Milvus 服务器程序。

复制代码
pip install milvus

第二步:

创建数据目录:在你的电脑上新建一个空文件夹,用于存放 Milvus 的所有数据(如 D:\milvus_data)。

第三步:

启动 Milvus 服务:在终端中执行以下命令,指定数据目录启动服务

复制代码
milvus-server --data D:\milvus_data

看到类似 INFO:milvus_server:Server started 的日志输出,就表示服务已成功运行。

验证连接:安装客户端并测试

服务启动后,需要安装 Python 客户端 pymilvus 来验证连接。

安装客户端 SDK:新开一个终端窗口并激活 milvus_env 环境,执行:

复制代码
pip install pymilvus

运行测试脚本:

接着,创建一个 test_connection.py 文件,并将下方代码复制进去并运行。如果输出服务端版本信息,就代表一切就绪。

复制代码
from pymilvus import connections, utility

try:
    # 连接到本地运行的Milvus服务
    connections.connect(host='127.0.0.1', port='19530')
    print("成功连接到Milvus服务!")
   
    # 获取并打印服务端版本信息
    version = utility.get_server_version()
    print(f"Milvus服务端版本: {version}")
except Exception as e:
    print(f"连接Milvus服务失败: {e}")

测试效果:

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi

Spring AI 项目集成指南

添加依赖

在你的 pom.xml 中加入 Milvus 的 Starter。

复制代码
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-vector-store-milvus</artifactId>
</dependency>

完整pom

复制代码
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.4.5</version>
    </parent>

    <groupId>com.example</groupId>
    <artifactId>spring-ai-ollama-es</artifactId>
    <version>1.0</version>

    <properties>
        <java.version>17</java.version>
        <spring-ai.version>1.1.2</spring-ai.version>
    </properties>

    <!-- 新增:使用 Spring AI BOM 统一管理所有模块版本 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>${spring-ai.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Spring AI Ollama 核心 -->
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-starter-model-ollama</artifactId>
        </dependency>

        <!-- 【关键依赖】Spring AI Vector Store Advisor (提供 QuestionAnswerAdvisor) -->
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-advisors-vector-store</artifactId>
        </dependency>

        <!-- Tika 文档读取器(支持 PDF、Word、TXT 等多种格式) -->
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-tika-document-reader</artifactId>
        </dependency>

        <!-- 【核心】Milvus 向量存储 Starter -->
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-starter-vector-store-milvus</artifactId>
        </dependency>
    </dependencies>

应用配置

在 application.yml 中配置连接。milvus 包启动的服务同样在默认的 19530 端口工作。

复制代码
​
server:
  port: 886

spring:
  ai:
    ollama:
      base-url: http://localhost:11434
      chat:
        model: qwen2.5:7b-instruct
        options:
          temperature: 0.3           # RAG 场景建议使用较低温度,减少幻觉
      embedding:
        model: nomic-embed-text      # Embedding 模型(用于文档向量化)
        options:
          num-batch: 4               # 一次处理的文本数量
    vectorstore:
      milvus:
        client:
          host: localhost
          port: 19530
        database-name: default
        collection-name: spring_ai_docs     # 向量集合名
        index-type: IVF_FLAT
        metric-type: IP                  # 相似度计算方式
        embedding-dimension: 768            # 务必与 nomic-embed-text 输出维度一致
        initialize-schema: true             # 首次启动自动创建 Collection


logging:
  level:
    org.springframework.ai.vectorstore.milvus: DEBUG

​

Java 配置代码

由于我们已经通过 Starter 引入了 Milvus 的自动配置,无需手动创建 VectorStore Bean,直接注入即可。

VectorStoreConfig.java

负责在应用启动时加载文档并写入向量库。

复制代码
package com.badao.ai.config;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ai.document.Document;
import org.springframework.ai.document.DocumentReader;
import org.springframework.ai.reader.tika.TikaDocumentReader;
import org.springframework.ai.transformer.splitter.TokenTextSplitter;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;

import java.util.List;

@Configuration
public class VectorStoreConfig {

    private static final Logger logger = LoggerFactory.getLogger(VectorStoreConfig.class);

    @Value("classpath:knowledge-base/badao-internal.txt")
    private Resource knowledgeResource;

    @Bean
    public CommandLineRunner loadDocuments(VectorStore vectorStore) {
        return args -> {
            // 1. 使用 Tika 读取文档(自动检测文件类型)
            DocumentReader reader = new TikaDocumentReader(knowledgeResource);
            List<Document> documents = reader.get();

            logger.info("共读取到 {} 个文档", documents.size());

            // 2. 文本分块(TokenTextSplitter 按语义切分,更适合中文)
            TokenTextSplitter splitter = TokenTextSplitter.builder()
                    .withChunkSize(300)               // 每个块最多 300 token
                    .withMinChunkSizeChars(50)        // 最小块字符数,避免出现极短碎片(替代原来 minChunkSize 的功能)
                    .withMinChunkLengthToEmbed(5)     // 保留默认,过滤极短内容
                    .withKeepSeparator(true)          // 保留原文换行等分隔符
                    .build();
            List<Document> chunks = splitter.apply(documents);

            logger.info("文本切分为 {} 个片段", chunks.size());

            // 3. 写入向量数据库(自动调用 EmbeddingModel 向量化)
            vectorStore.add(chunks);

            logger.info("向量化完成,向量库初始化成功!");
        };
    }
}

RagConfig.java

负责创建绑定 RAG Advisor 的 ChatClient

复制代码
package com.badao.ai.config;

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.vectorstore.QuestionAnswerAdvisor;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.vectorstore.SearchRequest;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RagConfig {

    @Bean
    public ChatClient chatClient(ChatModel chatModel, VectorStore vectorStore) {
        return ChatClient.builder(chatModel)
                .defaultAdvisors(
                        QuestionAnswerAdvisor.builder(vectorStore)
                                .searchRequest(SearchRequest.builder()
                                        .similarityThreshold(0.7)      // 相似度阈值
                                        .topK(3)                       // 返回前 3 个最相关文档
                                        .build())
                                .build()
                )
                .build();
    }
}

RagService.java 与 RagController.java 保持不变,可直接沿用前述示例代码,无需任何改动。

运行测试

确保 Ollama 已启动,nomic-embed-text 和 qwen2.5:7b-instruct 模型已下载。

确保 Milvus Lite 服务已在终端保持运行状态。

启动 Spring Boot 应用,观察日志应输出"Milvus 向量库初始化成功"。

使用 curl 或 Postman 测试接口

方案优势与注意事项

轻量便捷:

无需 Docker,无需复杂的环境配置,几行命令即可在 Windows 上运行。

兼容性强:

API 与生产级 Milvus 完全一致,后续如需迁移至集群版,只需修改 application.yml 中的连接地址。

持久化存储:

通过 --data 指定的目录保存数据,应用重启后知识库依然存在,无需重复加载文档。

注意事项:

Milvus Lite 仅适用于开发和测试,不建议直接用于生产环境。若需生产部署,

可将 milvus 包替换为标准版 Milvus (Standalone/Cluster),无需修改代码。

相关推荐
ar01231 小时前
AR巡检平台:构筑智能巡检新模式的数字化引擎
人工智能·ar
语音之家1 小时前
【预讲会征集】ACL 2026 论文预讲会
人工智能·论文·acl
碳基硅坊1 小时前
电商场景下的商品自动识别与辅助上架
人工智能
熊猫钓鱼>_>2 小时前
强化学习与决策优化:从理论到工程落地的完整指南
人工智能·llm·强化学习·rl·马尔可夫·mdp·决策过程
-柚子皮-2 小时前
强化学习DPO算法
人工智能
tzc_fly2 小时前
AnisoAlign:各向异性模态对齐
人工智能·深度学习·机器学习
极客老王说Agent2 小时前
2026供应链智变:实在Agent供应链库存预测助手核心能力与配置深度教程
人工智能·机器学习·ai·chatgpt
刘一说2 小时前
AI热点资讯日报 - 2026年5月15日
人工智能