从0到1搭建企业级RAG系统(一):环境准备与Milvus向量数据库部署

前言

最近在准备 AI 方向的实习,发现网上关于 RAG(检索增强生成)的项目教程虽然多,但大多是直接调用 API 的简单 Demo。真正从零开始、考虑工程落地并具备生产环境参考价值的完整项目记录,可谓少之又少。

拒绝纸上谈兵,我决定自己动手。从环境搭建、数据库选型、检索优化到监控部署,完整地走一遍生产级 RAG 系统的构建流程。

这篇文章是本系列的第一篇,主要记录基础环境准备Milvus 向量数据库的部署。我的开发环境是一台 Windows 笔记本,配置为 RTX 3060 Laptop (6GB显存) + WSL2 Ubuntu 22.04。希望这篇记录能帮助到同样在准备项目、巩固知识点的同学。


一、项目概述与技术选型

本项目的目标是构建一个高准确率、高性能、具备工程化能力的企业级 RAG 知识库系统。整体技术栈如下:

层级 组件 作用
编排框架 LangChain 核心 RAG 流程编排与组件粘合
大语言模型 Qwen-2.5 (本地量化版) 最终答案的归纳与生成
Embedding 模型 BGE-M3 / BGE-Small 文本向量化
向量数据库 Milvus 核心向量存储与高维相似度检索
缓存层 Redis 缓存热点查询,降低大模型开销
对象存储 MinIO 原始文档(PDF/Word等)与冷数据存储
Web框架 FastAPI 提供高性能 RESTful API
系统监控 Prometheus + Grafana 系统状态与 API 调用的可观测性
容器化 Docker + Docker Compose 保证环境一致性与一键部署

二、基础环境准备

2.1 硬件与系统环境

  • 主机系统:Windows 11

  • 显卡:NVIDIA GeForce RTX 3060 Laptop (6GB)

  • 子系统:WSL2 Ubuntu 22.04

  • Python 版本:3.10 或 3.11

💡 避坑提示(Python版本)

强烈建议使用 Python 3.10 或 3.11。AI 生态圈(如 PyTorch、LangChain 以及各种底层的 C++ 绑定库)对最新的 Python 版本兼容往往有延迟,追求过新的版本(如 3.12/3.13)容易在编译依赖时遇到令人头疼的报错。

2.2 安装 WSL2

如果你的 Windows 还没有安装 WSL2,请在 PowerShell(以管理员身份运行)中执行以下命令:

PowerShell

wsl --install -d Ubuntu-22.04

安装完成后重启电脑,进入 Ubuntu 子系统设置用户名和密码即可。

2.3 安装 Docker 并配置 GPU 支持

在 WSL2 Ubuntu 终端中执行以下命令,一键安装 Docker 并配置用户权限:

Bash

# 1. 下载并运行官方安装脚本
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# 2. 将当前用户加入 docker 组(免 sudo 执行 docker 命令)
sudo usermod -aG docker $USER
newgrp docker

验证 Docker 是否能成功调用 GPU:

Bash

docker run --rm --gpus all nvidia/cuda:12.1.0-base-ubuntu22.04 nvidia-smi

如果能正常打印出 RTX 3060 的显存和驱动信息,说明 GPU 穿透已配置成功!

🔥 踩坑提示(NVIDIA 驱动报错)

如果报错 could not select device driver,说明系统缺少 NVIDIA Container Toolkit,请执行以下命令补全:

Bash

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update && sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker

2.4 Python 虚拟环境准备

为了保持全局环境干净,我们为项目单独创建虚拟环境:

Bash

mkdir -p ~/projects/LiteRAG
cd ~/projects/LiteRAG
python3 -m venv venv
source venv/bin/activate

三、配置 Docker 国内镜像加速

在国内网络环境下,直接从 Docker Hub 拉取动辄几个 G 的大模型或数据库镜像非常容易超时。我们需要配置国内的镜像加速器。

编辑 Docker 配置文件:

Bash

sudo nano /etc/docker/daemon.json

写入以下内容(以下为目前相对稳定的镜像源,如果失效可自行在 GitHub 寻找最新源):

JSON

{
  "registry-mirrors": [
    "https://docker.xuanyuan.me",
    "https://docker.1ms.run",
    "https://docker.m.daocloud.io"
  ]
}

重启 Docker 使配置生效:

Bash

sudo systemctl restart docker

四、部署 Milvus 向量数据库

Milvus 是目前工业界最成熟的开源向量数据库之一,支持分布式、多种索引类型和高并发混合检索。

4.1 使用官方 docker-compose 部署

为了避免手动处理 etcdMinIO 这些底层依赖,我们直接使用官方提供的单机版 docker-compose.yml

Bash

cd ~/projects/LiteRAG
# 下载官方 docker-compose.yml(以 v2.4.23 为例)
wget https://github.com/milvus-io/milvus/releases/download/v2.4.23/milvus-standalone-docker-compose.yml -O docker-compose.yml

🔥 踩坑提示(镜像标签)

某些老教程会让你使用 milvusdb/milvus:v2.4.0-cpu 这类标签。注意,官方镜像现在的正确标签格式是不带 -cpu 后缀的,带后缀会直接报 manifest not found 错误。

4.2 启动服务

Bash

docker compose up -d

首次启动会拉取三个核心镜像:

  • milvusdb/milvus:v2.4.23(主服务,约 1.2GB)

  • quay.io/coreos/etcd:v3.5.18(元数据存储,约几十MB)

  • minio/minio:RELEASE...(对象存储,约 200MB)

耐心等待下载完成,容器会自动启动。

4.3 验证服务状态

运行命令查看容器状态:

Bash

docker compose ps

如果三个组件的 STATUS 列都显示 Up (healthy),则说明部署成功。

4.4 使用 Python 客户端验证连接

不仅容器要跑起来,代码能连上才是真理。安装 Milvus 的 Python SDK:

Bash

pip install pymilvus

进入 Python 交互环境(终端输入 python)进行连通性测试:

Python

from pymilvus import connections, utility

# 连接本地 Milvus 默认端口
connections.connect(host='localhost', port='19530')

print(f"✅ 连接成功!Milvus 版本: {utility.get_server_version()}")
print(f"📦 当前所有的集合: {utility.list_collections()}")

预期输出:

Plaintext

✅ 连接成功!Milvus 版本: v2.4.23
📦 当前所有的集合: []

💡 避坑提示(健康检查端点)

网上很多老旧教程教大家用 curl localhost:19530/health 来验证 Milvus 状态,但在 Milvus 2.4.x 版本中,该端点已经变更,强行请求会返回 404。最可靠的验证方式就是直接用 Python 客户端连一下,或者查看 Docker 的 (healthy) 标识。


五、目录结构初始化

为了后续开发的规范性,我们在这里提前把工程目录的骨架搭好。一个好的目录结构是项目成功的一半。

预期目录树概览:

Plaintext

LiteRAG/
├── app/
│   ├── api/v1/endpoints/  # 路由控制器 (Chat, Admin等)
│   ├── core/              # 核心业务逻辑 (LLM, RAG组件等)
│   ├── models/            # 数据库 ORM 模型
│   └── schemas/           # Pydantic 数据验证体
├── scripts/               # 独立执行脚本 (数据注入、评测等)
├── monitoring/            # 监控配置 (Grafana Dashboards等)
├── tests/                 # 单元测试
├── docs/                  # 项目文档
├── docker-compose.yml     # 刚刚下载的 Milvus 编排文件
└── requirements.txt       # 依赖清单

一键创建脚本:

在终端中执行以下命令,快速生成上述目录与空文件:

Bash

# 创建文件夹
mkdir -p app/{api/v1/endpoints,core/retrieval,models,schemas}
mkdir -p scripts tests monitoring/grafana_dashboards docs reports

# 创建核心 Python 文件
touch app/{__init__.py,main.py,config.py}
touch app/api/{__init__.py,deps.py}
touch app/api/v1/{__init__.py}
touch app/api/v1/endpoints/{__init__.py,chat.py,admin.py}
touch app/core/{__init__.py,embedding.py,reranker.py,llm.py,splitter.py}
touch app/core/retrieval/{__init__.py,milvus_client.py,hybrid_search.py,redis_cache.py}
touch app/schemas/{__init__.py,chat.py,admin.py}
touch scripts/{ingest.py,benchmark.py,cold_hot_demo.py}

# 创建项目配置文件
touch .env.example .gitignore requirements.txt README.md LICENSE

六、下一步计划

到此为止,我们已经完成了项目的基础环境搭建和向量数据库的成功部署,算是为万里长征迈出了坚实的第一步。

在下一篇文章中,我将记录以下内容的实战过程:

  1. 整合 Redis 与监控组件:部署 Redis 缓存池,并引入 Prometheus + Grafana 建立初步的监控面板。

  2. Embedding 模型的接入:下载并配置本地化的 BGE 模型。

  3. 数据入库实战:编写文档解析脚本,将切分后的文本向量化并灌入 Milvus 数据库中。

完整的项目代码后续我会同步更新到 GitHub,欢迎关注和 Star。


本文是【从0到1搭建企业级RAG系统】系列的第一篇,后续文章将陆续更新。如果有任何工程落地上的问题或建议,欢迎在评论区交流碰撞!

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐