近,检索增强生成(RAG)技术在 AI 界引起了广泛关注。作为一种将知识库与生成模型结合的新型架构,RAG 大大提升了 AI 应用的实际表现。而在构建 RAG 系统时,Milvus 作为业界领先的开源向量数据库,扮演着关键角色。本文将通过在 Dify 平台上使用 Milvus,带领大家构建一个高效的 RAG 系统,探索向量数据库的实际应用场景。

一、Milvus 基本原理介绍

1.1 为什么要用向量数据库?

在 AI 应用场景下,比如图像识别、自然语言处理等,数据往往是非结构化的。传统的关系型数据库很难处理这些高维度的非结构化数据。因此,向量数据库应运而生,专门设计用于存储和管理这种数据,并可以实现高效的相似度检索。 向量数据库通过将复杂的数据(如图片、文本)转化为向量的形式进行存储,每个向量代表数据中的不同特征,方便快速检索相似内容。比如在推荐系统中,可以通过用户行为向量,检索出相似用户的行为进行个性化推荐。

1.2 为什么要用 Milvus?

Milvus 是目前领先的开源向量数据库之一,设计之初就针对大规模非结构化数据的存储与检索进行了优化。它具备如下优势:

  • 高性能:Milvus 基于诸如 FAISS、Annoy 和 HNSW 等先进的向量搜索库,能够处理亿级甚至更大规模的向量数据,适合需要高效检索的应用场景。
  • 可扩展性:Milvus 采用了存储和计算分离的架构,支持水平扩展,能够灵活适应从小型应用到大型分布式系统的需求。
  • 广泛的应用场景:Milvus 可以应用于各种 AI 场景,如图像、视频检索,文本检索,推荐系统等,具有广泛的行业适用性。 通过使用 Milvus,我们能够大大提升在大规模向量检索场景下的处理效率,从而让 AI 应用变得更加智能、高效。

1.3 Milvus 架构概述

Milvus 建立在流行的矢量搜索库(包括 Faiss、HNSW、DiskANN、SCANN 等)之上,旨在对包含数百万、数十亿甚至数万亿矢量的密集矢量数据集进行相似性搜索。 Milvus 采用共享存储架构,存储和计算分离,计算节点可水平扩展。 Milvus 遵循数据平面和控制平面分解的原则,包括:接入层、协调器服务、工作节点和存储。在扩展或灾难恢复方面,这些层是相互独立的。

1.4 Milvus 的应用场景

Milvus 的应用场景非常广泛,包括但不限于:

  • 图像和视频检索:使用 Milvus 存储图像和视频的向量数据,以便进行高效检索。

  • 文本检索:存储文本的向量数据,利用这些数据进行快速检索。

  • 推荐系统:存储用户和物品的向量数据,通过向量相似度进行个性化推荐。

  • 自然语言处理:存储文本的向量数据,支持各种自然语言处理任务。

二、Dify 平台的介绍

Dify 是一款开源的大语言模型 (LLM) 应用开发平台,结合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者能够快速搭建生产级的生成式 AI 应用。即使是非技术人员,也能参与到 AI 应用的定义和数据运营过程中。

三、Milvus 与 Dify 平台的部署实践

在部署过程中,Milvus 提供了三种部署模式,适用于不同的使用场景。接下来,我将介绍这三种模式,并通过简单的示范,帮助你快速上手。

模式一:Milvus Lite

Milvus Lite 是一个轻量级的 Python 库,可以轻松集成到应用程序中。它非常适合在 Jupyter Notebook 中进行快速原型设计,或者在资源有限的边缘设备上运行。 3.1.1 设置 Milvus Lite

pip install -U pymilvus

复制代码

3.1.2 连接 Miluvs Lite

pymilvus中,指定本地文件名作为 MilvusClient 的 uri 参数将使用 Milvus Lite。

运行下面代码后,将在当前文件夹中生成一个名为 milvus_demo.db 的数据库文件。

from pymilvus import MilvusClient

复制代码

模式二:Milvus Standalone

3.2.1 首先,我们需要获取 Milvus 的部署文件,只需在终端运行以下命令

wget https://github.com/milvus-io/milvus/releases/download/v2.4.5/milvus-standalone-docker-compose.yml -O docker-compose.yml

复制代码

3.2.2 然后执行以下命令,Milvus 就可以启动啦!

sudo docker compose up -d

复制代码

3.2.3 等一会儿,就会看到 Milvus 已经在后台运行

docker ps -a 

复制代码

Milvus 分布式模式部署指南

对于需要处理大规模数据集,如亿级别向量检索的场景,Milvus 分布式版本是理想的选择。它支持在 Kubernetes 集群中部署,非常适合云原生架构下的大规模应用。

快速部署步骤

  1. 配置 Kubernetes 集群
  • 确保你的 Kubernetes 集群已经配置好,并且可以正常工作。
  1. 使用 Helm 或 Operator 部署 Milvus
  • 利用 Helm 或 Milvus Operator 来部署 Milvus 分布式版本,以简化部署流程。

在 Dify 上使用 Milvus 的实战指南

前提条件:请确保你的系统中已经安装了 docker 和 docker-compose。 步骤

  1. 克隆 Dify 项目到本地
  • 将 Dify 项目克隆到你的本地开发环境中,以便进行后续操作。

  • 使用命令 git clone [Dify项目链接] 来克隆项目。 注意事项

  • 在进行部署和操作之前,请仔细阅读 Milvus 官方文档,以确保你了解所有必要的配置和最佳实践。

git clone https://github.com/langgenius/dify.git

复制代码

拷贝 env 并修改指定使用 Milvus

cp .env.example .env

复制代码

执行 docker-compose 启动 dify

docker-compose -f docker-compose.yaml up -d 

复制代码

访问 dify 平台并登录

使用 Milvus 构建 RAG

说明:部署前已准备好模型,此文档中对如何部署本地模型不做赘述

准备数据集创建知识库上传测试文档

验证向量检索是否成功

可以看到 dify 日志里显示是成功的

Milvus 数据库中也有数据了

尝试验证 RAG 效果