基于阿里云向量检索 Milvus 版与 PAI 搭建高效的检索增强生成(RAG)系统

阿里云向量检索 Milvus 版现已无缝集成于阿里云 PAI 平台,一站式赋能用户构建高性能的检索增强生成(RAG)系统。您可以利用 Milvus 作为向量数据的实时存储与检索核心,高效结合 PAI 和 LangChain 技术栈,实现从理论到实践的快速转化,搭建起功能强大的 RAG 解决方案。

​免费试用​

背景信息

随着 AI 技术的飞速发展,生成式人工智能在文本生成、图像生成等领域展现出了令人瞩目的成就。然而,在广泛应用大语言模型(LLM)的过程中,一些固有局限性逐渐显现:

  • 领域知识局限:大语言模型通常基于大规模通用数据集训练而成,这意味着它们在处理专业垂直领域的具体应用时可能缺乏针对性和深度。
  • 信息更新滞后:由于模型训练所依赖的数据集具有静态特性,大模型无法实时获取和学习最新的信息与知识进展。
  • 模型误导性输出:受制于数据偏差、模型内在缺陷等因素,大语言模型有时会出现看似合理实则错误的输出,即所谓的“大模型幻觉”。

为克服这些挑战,并进一步强化大模型的功能性和准确性,检索增强生成技术 RAG(Retrieval-Augmented Generation)应运而生。这一技术通过整合外部知识库,能够显著减少大模型虚构的问题,并提升其获取及应用最新知识的能力,从而实现更个性化和精准化的 LLM 定制。

RAG 技术架构的核心为检索和生成。其中,检索部分采用了高效的向量检索引擎和向量数据库技术,例如基于开源库 Faiss、Annoy 以及 HNSW 算法优化构建的 Milvus 系统,极大地提升了对大规模数据进行快速检索和精确分析的能力。这样的设计使得RAG能够在必要时即时调用相关领域或最新信息,有效弥补了传统大语言模型的不足之处。

前提条件

使用限制

Milvus 实例和 PAI(EAS)须在相同地域下。

操作流程

步骤一:通过 PAI 部署 RAG 系统

1.进入模型在线服务 EAS

        a.登录 ​​PAI控制台​​。

        b.在左上角顶部菜单栏选择目标地域。

        c.在左侧导航栏选择模型部署>模型在线服务(EAS),在下拉框中选择目标工作空间后单击进入EAS

2.在 PAI-EAS 模型在线服务页面,单击部署服务

3.在部署服务页面,选择大模型RAG对话系统

4.在部署大模型RAG对话系统页面,配置以下关键参数,其余参数可使用默认配置,更多参数详情请参见​​大模型RAG对话系统​​。

参数

描述

基本信息

服务名称

您可以自定义。

模型来源

使用默认的开源公共模型

资源配置

模型类别

通常选择通义千问7B。例如,Qwen1.5-7b。

资源配置选择

按需选择GPU资源配置。例如,ml.gu7i.c16m30.1-gu30。

向量检索库设置

版本类型

选择Milvus

数据库文件夹名称

您在Milvus中自定义的Collection名称。

访问地址

Milvus实例的内网地址。您可以在Milvus实例的实例详情页面查看。

代理端口

Milvus实例的Proxy Port。您可以在Milvus实例的实例详情页面查看。

账号

配置为root。

密码

配置为创建Milvus实例时,您自定义的root用户的密码。

Collection删除

是否删除已存在的Collection。取值如下:

  • True:删除同名的Collection,再创建新的Collection。如果不存在同名Collection,则直接进行创建。
  • False:保留现有的同名Collection,新加入的数据将追加到该Collection中。

专有网络配置

VPC

创建Milvus实例选择时的VPC、交换机和安全组。您可以在Milvus实例的实例详情页面查看。

交换机

安全组名称

5.单机部署
服务状态变为运行中时,表示服务部署成功。

6.在模型在线服务(EAS)页面,单击查看Web应用,进入WebUI页面。

步骤二:在 WebUI 中使用 Milvus 向量检索

1.测试连通性。如下图所示,在 RAG 服务 WebUI 界面的 Settings 选项卡中,系统已自动识别并应用了部署服务时配置的向量检索库设置,并且该设置不支持修改。您可以单击 Connect Milvus,来验证 Milvus 连接是否正常。


连接正常后 Connection Info 显示 Connect Milvus success。

2.上传数据。如下图所示,您可以在 RAG 服务 WebUI 界面的 Upload 选项卡中,上传 TXT 或 HTML 类型的用户知识库文档。本文以​​​PAI.txt​​​例,当完成上传后,会显示​​Upload 1 files [ PAI.txt, ] Success! ​​​。


您还可以在 Milvus 实例的实例详情页,单击右上角的 Attu Manager,然后输入 Milvus 实例的用户名和密码,可以查看写入的数据和向量等信息。Attu 的相关操作,请参见 ​​Attu操作指南​​。

3.向量检索。如下图所示,您可以在 RAG 服务 WebUI 界面的 Chat 选项卡中,选择 RAG (Retrieval + LLM),然后进行向量检索等一系列实验。

  • 10
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于 Milvus 的多模态检索系统可以实现对多种类型数据的检索,例如图像、文本、语音等。下面是一个简单的演示: 1. 首先,需要安装 Milvus 和相应的 Python SDK: ```shell pip install pymilvus==2.0.0rc5 pip install opencv-python==4.5.1.48 pip install Pillow==8.2.0 pip install grpcio==1.32.0 pip install grpcio-tools==1.32.0 ``` 2. 接下来,我们需要准备一些数据。这里以图像为例,将一些图像文件存储在本地文件夹中。 3. 然后,我们需要将这些图像向量化,并将它们插入到 Milvus 中。这里使用 ResNet50 模型提取图像特征,并使用 Milvus Python SDK 将特征向量插入到 Milvus 中。 ```python import os import cv2 import numpy as np from PIL import Image from milvus import Milvus, IndexType, MetricType, Status # 连接 Milvus milvus = Milvus(host='localhost', port='19530') # 创建 collection collection_name = 'image_collection' if collection_name in milvus.list_collections(): milvus.drop_collection(collection_name) milvus.create_collection(collection_name, {'fields': [ {'name': 'id', 'type': 'int64', 'is_primary': True}, {'name': 'embedding', 'type': 'float', 'params': {'dim': 2048}} ], 'segment_row_limit': 4096, 'auto_id': False}) # 加载 ResNet50 模型 model = cv2.dnn.readNetFromTorch('resnet50.t7') model.setPreferableBackend(cv2.dnn.DNN_BACKEND_OPENCV) model.setPreferableTarget(cv2.dnn.DNN_TARGET_CPU) # 提取图像特征并插入到 Milvus 中 data_path = 'image_data' for i, file_name in enumerate(os.listdir(data_path)): file_path = os.path.join(data_path, file_name) img = cv2.imread(file_path) img = cv2.resize(img, (224, 224)) blob = cv2.dnn.blobFromImage(img, 1, (224, 224), (104, 117, 123)) model.setInput(blob) embedding = model.forward().flatten() status, ids = milvus.insert(collection_name=collection_name, records=[ {'id': i, 'embedding': embedding.tolist()} ]) print(f'Insert image {file_name} with id {ids[0]}') # 创建索引 milvus.create_index(collection_name, IndexType.IVF_FLAT, {'nlist': 128}) ``` 4. 现在,我们已经将图像向量化并插入到 Milvus 中了。接下来,我们可以使用 Milvus向量相似度搜索功能来实现多模态检索。这里以图像检索为例,给定一张查询图像,我们可以使用同样的方式提取其特征向量,并在 Milvus 中搜索与其相似的图像。 ```python # 加载查询图像 query_path = 'query_image.jpg' query_img = cv2.imread(query_path) query_img = cv2.resize(query_img, (224, 224)) query_blob = cv2.dnn.blobFromImage(query_img, 1, (224, 224), (104, 117, 123)) # 提取查询图像特征 model.setInput(query_blob) query_embedding = model.forward().flatten() # 在 Milvus 中搜索相似的图像 search_param = {'nprobe': 16} status, results = milvus.search(collection_name, query_embedding.tolist(), 10, search_params=search_param) print(f'Search results: {results}') ``` 以上就是一个简单的基于 Milvus 的多模态检索系统的演示。除了图像检索,我们也可以使用类似的方式实现文本、语音等多种类型数据的检索

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值