Spring AI 系列(一):保姆级 RAG 实战指南——Docker 搭建 Milvus 向量数据库从 0 到 1


个人主页:夏天拐跑了西瓜
专栏传送门:《大模型应用开发》、《Java 实战开发》
学习方向:Java 后端|AI‑Agent 大模型应用开发爱好者
⭐人生格言:路虽远,行则将至


封面图
Spring AI 通过模块化架构支持 RAG,既可以让你自定义 RAG 流程,也可以使用 Advisor API 提供的开箱即用 RAG 流程,本章节给大家介绍使用 Advisor API 提供的开箱即用的 RAG 内容。

在 Retrieval-Augmented Generation (RAG) 中,我们常见的流程是:Query → Embedding → VectorStore 检索 → 附加上下文 → LLM 回答,一般 VectorStore 我们会选择向量数据库,在大模型领域常用的向量数据库是 Milvus,下面首先介绍 Milvus。

1. 向量数据库 Milvus(米尔乌斯)

Milvus 是一个开源的高性能向量数据库(Vector Database),专为存储、索引和检索高维向量数据而设计,它能够处理图像、音频、视频、自然语言等嵌入表示(embeddings),支持海量向量(万亿级)毫秒级相似搜索。

Milvus 是 RAG 系统中的核心基础设施之一,Milvus 在RAG过程中可以担当"VectorStore"的角色,能够精准语义检索,查询到相关文档。Milvus文档地址:https://milvus.io/docs/zh

2. Milvus Standalone 搭建

Milvus 支持三种方式搭建:

  • Milvus Lite:作为 Python 库本地嵌入(类似"向量版 SQLite"),支持百万级别向量存储,适合快速学习。
  • Milvus Standalone(单机版):Docker 中运行,所有组件(Milvus + etcd)打包在一台主机内,支持10亿向量存储,适合中小型生产环境。
  • Milvus Distributed(分布式集群):部署在 Kubernetes 环境,通过 Proxy、Query、Index 等节点分离,实现高可用与弹性伸缩,支持百亿向量存储,适合大规模、高可用或 K8s 部署。

这里我们搭建 Milvus Standalone 版本,所以需要预先准备一台 Linux 节点(默认已准备好),按照如下步骤在 Linux 节点中安装 Docker 并部署 Milvus。

2.1 在Linux中安装docker

这里在node2安装docker。获取docker repo文件

#从阿里源获取docker repo文件
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#从清华源获取docker repo文件
wget -O /etc/yum.repos.d/docker-ce.repo  https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

#从docker官方源获取docker repo文件
wget -O /etc/yum.repos.d/docker-ce.repo  https://download.docker.com/linux/centos/docker-ce.repo

查看docker可以安装的版本:

yum list docker-ce.x86_64 --showduplicates | sort -r

安装docker:这里指定docker版本为26.1.4版本:

yum -y install docker-ce-26.1.4-1.el7

设置docker 开机启动,并启动docker:

systemctl enable docker
systemctl start docker

查看docker版本

docker version

修改cgroup方式,并重启docker。

vim /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors":[
"https://docker.m.daocloud.io",
"https://docker.rainbond.cc",
"https://docker.lmirror.top"
]
}
#重启docker
systemctl restart docker

2.2 使用docker compose 安装Milvus

#创建目录并进入
mkdir -p /software/milvus && cd /software/milvus

#下载compose 配置,或者直接将资料中 docker-compose.yml上传至目录下
wget https://github.com/milvus-io/milvus/releases/download/v2.5.14/milvus-standalone-docker-compose.yml -O docker-compose.yml

#启动 Milvus
docker compose up -d

#停止Milvus
docker compose down

特别注意:通过如下命令将linux中docker的所有image打包到"all_milvus_images.tar"中:

docker save -o all_milvus_images.tar milvusdb/milvus:v2.5.14 quay.io/coreos/etcd:v3.5.18 minio/minio:RELEASE.2024-05-28T17-19-04Z

在目标linux节点上(已安装docker),使用如下命令将all_milvus_images.tar导入到目标计算机中:

docker load -i all_milvus_images.tar

2.3 访问Milvus WebUI

浏览器输入 http://node2:9091/webui/ 查看Milvus WebUI。

image.png

2.4 安装 attu可视化操作Milvus

Attu是一款专为Milvus向量数据库打造的开源数据库管理工具,提供了便捷的图形化界面,极大地简化了对Milvus数据库的操作与管理流程。

双击资料中"attu-Setup-2.5.12.exe"进行Attu安装,安装完成后进入Attu并连接Milvus:

在这里插入图片描述
在这里插入图片描述

3. Milvus 核心概念

Milvus核心概念有数据库、Collections、Schema,下面分别介绍。

3.1 数据库

在 Milvus 中,数据库是组织和管理数据的逻辑单元。为了提高数据安全性并实现多租户,你可以创建多个数据库,为不同的应用程序或租户从逻辑上隔离数据。例如,创建一个数据库用于存储用户 A 的数据,另一个数据库用于存储用户 B 的数据。与关系型数据库中所说的数据库一个概念。

3.2 Collections

在 Milvus 中,Collection 可以比作关系存储系统中的表。Collections 是 Milvus 中最大的数据单元,在 Milvus 中,所有数据都是按 Collections(集合)、shard(分片)、partition(分区)、segment(数据片段) 和 entity (数据实体,一行数据就是一个实体)组织的。

image.png

为了在写入数据时充分利用集群的并行计算能力,Milvus 中的 Collection 必须将数据写入操作分散到不同的节点上,默认情况下,一个 Collections 包含两个分片,根据你的数据集容量,你可以在一个 Collection 中拥有更多的分片。Milvus 使用主密钥散列方法进行分片。关于Milvus数据模型参考:https://milvus.io/zh/blog/deep-dive-1-milvus-architecture-overview.md#Shard

Collection 是一个二维表,具有固定的列和变化的行。每列代表一个字段,每行代表一个实体。下图显示了一个有 8 列和 6 个实体的 Collection。

3.3 Schema

Schema 定义了 Collections 的数据结构。在创建一个 Collection 之前,你需要设计出它的 Schema,定义如何组织 Collection 中的数据。一个 Collection Schema 有一个主键、最多四个向量字段和几个标量字段。下图说明了如何将文章映射到模式字段列表。

image.png

Milvus支持的更多类型参考:https://milvus.io/docs/zh/schema.md

3.4 数据一致性

Milvus 提供了四种一致性级别,允许用户在数据一致性和查询延迟之间做出平衡选择:

  • Strong:最强一致性,保证读取到最新数据,但查询延迟较高。
  • Bounded:有界一致性,默认级别,允许轻微延迟,满足大多数场景使用。
  • Session:会话一致性,保证在同一客户端会话中读取到自己写入的数据,跨会话数据可能不一致。
  • Eventually:最终一致性,相应查询最快,数据一致性最弱,适用于实时监控、日志展示等。

关于以上一致性的原理参考:https://milvus.io/docs/zh/tune_consistency.md#Set-Consistency-Level-upon-Creating-Collection。

更多推荐