Spring AI 系列(一):保姆级 RAG 实战指南——Docker 搭建 Milvus 向量数据库从 0 到 1
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/zh2. 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-yinstalldocker-ce-26.1.4-1.el7设置docker 开机启动并启动dockersystemctlenabledockersystemctl startdocker查看docker版本dockerversion修改cgroup方式并重启docker。vim/etc/docker/daemon.json{exec-opts:[native.cgroupdriversystemd],registry-mirrors:[https://docker.m.daocloud.io,https://docker.rainbond.cc,https://docker.lmirror.top]}#重启dockersystemctl restartdocker2.2 使用docker compose 安装Milvus#创建目录并进入mkdir-p/software/milvuscd/software/milvus#下载compose 配置,或者直接将资料中 docker-compose.yml上传至目录下wgethttps://github.com/milvus-io/milvus/releases/download/v2.5.14/milvus-standalone-docker-compose.yml-Odocker-compose.yml#启动 Milvusdockercompose up-d#停止Milvusdockercompose down特别注意通过如下命令将linux中docker的所有image打包到all_milvus_images.tar中dockersave-oall_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导入到目标计算机中dockerload-iall_milvus_images.tar2.3 访问Milvus WebUI浏览器输入 http://node2:9091/webui/ 查看Milvus WebUI。2.4 安装 attu可视化操作MilvusAttu是一款专为Milvus向量数据库打造的开源数据库管理工具提供了便捷的图形化界面极大地简化了对Milvus数据库的操作与管理流程。双击资料中attu-Setup-2.5.12.exe进行Attu安装安装完成后进入Attu并连接Milvus3. Milvus 核心概念Milvus核心概念有数据库、Collections、Schema下面分别介绍。3.1 数据库在 Milvus 中数据库是组织和管理数据的逻辑单元。为了提高数据安全性并实现多租户你可以创建多个数据库为不同的应用程序或租户从逻辑上隔离数据。例如创建一个数据库用于存储用户 A 的数据另一个数据库用于存储用户 B 的数据。与关系型数据库中所说的数据库一个概念。3.2 Collections在 Milvus 中Collection 可以比作关系存储系统中的表。Collections 是 Milvus 中最大的数据单元在 Milvus 中所有数据都是按 Collections集合、shard分片、partition分区、segment数据片段 和 entity 数据实体一行数据就是一个实体组织的。为了在写入数据时充分利用集群的并行计算能力Milvus 中的 Collection 必须将数据写入操作分散到不同的节点上默认情况下一个 Collections 包含两个分片根据你的数据集容量你可以在一个 Collection 中拥有更多的分片。Milvus 使用主密钥散列方法进行分片。关于Milvus数据模型参考https://milvus.io/zh/blog/deep-dive-1-milvus-architecture-overview.md#ShardCollection 是一个二维表具有固定的列和变化的行。每列代表一个字段每行代表一个实体。下图显示了一个有 8 列和 6 个实体的 Collection。3.3 SchemaSchema 定义了 Collections 的数据结构。在创建一个 Collection 之前你需要设计出它的 Schema定义如何组织 Collection 中的数据。一个 Collection Schema 有一个主键、最多四个向量字段和几个标量字段。下图说明了如何将文章映射到模式字段列表。Milvus支持的更多类型参考https://milvus.io/docs/zh/schema.md3.4 数据一致性Milvus 提供了四种一致性级别允许用户在数据一致性和查询延迟之间做出平衡选择Strong最强一致性保证读取到最新数据但查询延迟较高。Bounded有界一致性默认级别允许轻微延迟满足大多数场景使用。Session会话一致性保证在同一客户端会话中读取到自己写入的数据跨会话数据可能不一致。Eventually最终一致性相应查询最快数据一致性最弱适用于实时监控、日志展示等。关于以上一致性的原理参考https://milvus.io/docs/zh/tune_consistency.md#Set-Consistency-Level-upon-Creating-Collection。