轻松掌握:Milvus向量数据库部署与RAG使用技巧

2024-06-11 10:12

本文主要是介绍轻松掌握:Milvus向量数据库部署与RAG使用技巧,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Milvus简介

Milvus是一款开源的向量数据库,由 Zilliz 开发并维护,适合用于机器学习和人工智能领域。是一款专为处理向量查询而设计的数据库,Milvus 能够对万亿级向量进行索引。
Milvus官网:https://milvus.io/
Milvus中文文档:https://www.milvus-io.com/

Milvus部署

环境准备

  • Linux操作系统
  • Docker 19.03 或更高版本
  • Docker Compose 1.25.1 或更高版本

检查Docker是否安装成功

运行以下命令,检查Docker是否安装成功,安装成功显示版本信息

docker version

运行以下命令,检查Docker Compose是否安装成功,安装成功显示安装的版本信息

docker-compose --version

安装Docker

未安装Docker可以按照以下命令安装,以下命令为Ubuntu系统环境命令

更新系统包

sudo apt update
sudo apt upgrade -y

安装依赖包

安装一些必要的系统工具和依赖,以便使用HTTPS源进行软件包安装:

sudo apt install apt-transport-https ca-certificates curl software-properties-common

添加Docker官方GPG密钥

Docker的官方GPG密钥用于验证Docker软件包的来源。

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# root账号使用以下命令
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null

更新软件包列表并安装Docker

再次更新软件包列表,然后安装Docker CE(Community Edition):

sudo apt update
sudo apt-get install docker-ce docker-ce-cli containerd.io -y

启动Docker服务并设置开机启动

安装完成后,启动Docker服务并设置为开机启动:

sudo systemctl start docker
sudo systemctl enable docker

验证Docker安装

通过运行一个测试容器来验证Docker是否正确安装:

docker run hello-world

如果安装成功,您将看到一条欢迎消息,表明Docker已成功安装并运行了一个测试镜像。

以上步骤完成之后,就已经在Ubuntu Linux系统上成功安装了Docker。

(可选)配置Docker加速器

如果在中国大陆地区,为了加速Docker镜像的下载,可以考虑配置Docker的镜像加速器,如阿里云的镜像加速服务。

登录阿里云账号,找到容器镜像服务
镜像工具->镜像加速器,根据操作文档,配置镜像加速器

安装Docker Compose

未安装Docker Compose的可以按照以下命令安装

下载Docker Compose

使用curl命令下载Docker Compose的二进制文件。
有时候下载速度慢,耐心等待

# v2.16.0
sudo curl -L "https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose# v2.27.0 选择一个版本安装即可
sudo curl -L "https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

设置执行权限:

sudo chmod +x /usr/local/bin/docker-compose

创建软链接(可选,但推荐):

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

验证安装

docker-compose --version

如果安装成功,这条命令将输出Docker Compose的版本号。

卸载Docker Compose(可选)

如果需要卸载Docker Compose,可以简单地删除/usr/local/bin/docker-compose文件:

sudo rm /usr/local/bin/docker-compose
sudo rm /usr/bin/docker-compose  #删除创建的软连接

Milvus安装

创建Milvus工作目录

为Milvus创建一个目录来存储数据和日志。

mkdir milvus-workdir  # 创建一个新的工作目录  
cd milvus-workdir     # 进入工作目录  

下载Docker Compose配置文件

下载适合Milvus版本的Docker Compose配置文件,这里下载的是v2.4.1版本,也可以下载其他版本


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

启动Milvus服务

sudo docker-compose up -d

如果运行出现下面这个问题,可以通过设置国内源,解决这个问题。这个是国内网络问题,无法连接到 docker hub。

❗error pulling image configuration: download failed after attempts=6: dial tcp 23.101.24.70:443: connect: connection refused

设置国内源,源地址设置在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)

{"registry-mirrors": ["https://registry.docker-cn.com","https://dockerhub.azk8s.cn","https://docker.mirrors.ustc.edu.cn","https://6kx4zyno.mirror.aliyuncs.com","https://hub-mirror.c.163.com","https://reg-mirror.qiniu.com"]
}

重启Docker

sudo systemctl restart docker
或者
service docker restart

检查国内源地址设置是否生效

docker info

生效之后,再次运行启动命令

sudo docker-compose up -d

image.png
如果还是失败,就更换一下国内源,多尝试几次
image.png
启动成功
image.png

检查Milvus服务是否正常启动:

docker ps

Milvus正常启动,如下图所示
image.png

(可选)授权端口号允许外网访问

如果是在云服务器上部署,需要授权端口号允许外网访问。阿里云服务器在安全组,入方向,授权端口 19530 允许访问
image.png

(可选)安装Milvus图形界面客户端Attu

Attu为 Milvus 专门开发的图形界面客户端,可以在 https://github.com/zilliztech/attu/releases 找到最新发布版本,找到可执行安装包下载到电脑安装即可使用。
image.png

Milvus客户端使用

安装依赖

在客户端的Python环境中安装pymilvus库,可以通过运行以下命令来安装:
pymilvus安装版本要与Milvus版本相对应
https://milvus.io/api-reference/pymilvus/v2.4.x/About.md

pip install pymilvus# 建议安装指定版本2.4.1
pip install pymilvus==2.4.1

下载示例代码进行测试

使用Python运行Milvus:https://www.milvus-io.com/example_code
下载 hello_milvus.py 直接或使用以下命令

wget https://raw.githubusercontent.com/milvus-io/pymilvus/v2.4.1/examples/hello_milvus.py

将示例代码中链接Milvus数据库的localhost改为服务器IP地址

connections.connect(“default”, host=“localhost”, port=“19530”)
改为
connections.connect(“default”, host=“服务器IP”, port=“19530”)

运行 hello_milvus.py

python hello_milvus.py

运行成功,以下是返回的结果和查询延迟:

=== start connecting to Milvus     ===Does collection hello_milvus exist in Milvus: False=== Create collection `hello_milvus` ====== Start inserting entities       ===Number of entities in Milvus: 3001=== Start Creating index IVF_FLAT  ====== Start loading                  ====== Start searching based on vector similarity ===hit: id: 2998, distance: 0.0, entity: {'random': 0.9728033590489911}, random field: 0.9728033590489911
hit: id: 999, distance: 0.09934989362955093, entity: {'random': 0.9519034206569449}, random field: 0.9519034206569449
hit: id: 1310, distance: 0.10135537385940552, entity: {'random': 0.26669865443188623}, random field: 0.26669865443188623
hit: id: 2999, distance: 0.0, entity: {'random': 0.02316334456872482}, random field: 0.02316334456872482
hit: id: 2502, distance: 0.13083189725875854, entity: {'random': 0.9289998713260136}, random field: 0.9289998713260136
hit: id: 2669, distance: 0.1590736359357834, entity: {'random': 0.6080847854541138}, random field: 0.6080847854541138
search latency = 0.2060s=== Start querying with `random > 0.5` ===query result:
-{'embeddings': [0.8367804, 0.20963514, 0.6766955, 0.39746654, 0.8180806, 0.1201905, 0.9467144, 0.6947491], 'pk': '0', 'random': 0.6378742006852851}
search latency = 0.2434s
query pagination(limit=4):[{'random': 0.6378742006852851, 'pk': '0'}, {'random': 0.5763523024650556, 'pk': '100'}, {'random': 0.9425935891639464, 'pk': '1000'}, {'random': 0.7893211256191387, 'pk': '1001'}]
query pagination(offset=1, limit=3):[{'random': 0.5763523024650556, 'pk': '100'}, {'random': 0.9425935891639464, 'pk': '1000'}, {'random': 0.7893211256191387, 'pk': '1001'}]=== Start hybrid searching with `random > 0.5` ===hit: id: 2998, distance: 0.0, entity: {'random': 0.9728033590489911}, random field: 0.9728033590489911
hit: id: 999, distance: 0.09934989362955093, entity: {'random': 0.9519034206569449}, random field: 0.9519034206569449
hit: id: 1553, distance: 0.12913644313812256, entity: {'random': 0.7723335927084438}, random field: 0.7723335927084438
hit: id: 2502, distance: 0.13083189725875854, entity: {'random': 0.9289998713260136}, random field: 0.9289998713260136
hit: id: 2669, distance: 0.1590736359357834, entity: {'random': 0.6080847854541138}, random field: 0.6080847854541138
hit: id: 2628, distance: 0.1914074569940567, entity: {'random': 0.940077754658375}, random field: 0.940077754658375
search latency = 0.1999s=== Start deleting with expr `pk in ["0" , "1"]` ===query before delete by expr=`pk in ["0" , "1"]` -> result:
-{'random': 0.6378742006852851, 'embeddings': [0.8367804, 0.20963514, 0.6766955, 0.39746654, 0.8180806, 0.1201905, 0.9467144, 0.6947491], 'pk': '0'}
-{'random': 0.43925103574669633, 'embeddings': [0.27875876, 0.95355743, 0.976228, 0.54545516, 0.16776836, 0.82360446, 0.65080017, 0.21096307], 'pk': '1'}query after delete by expr=`pk in ["0" , "1"]` -> result: []=== Drop collection `hello_milvus` ===

恭喜!Milvus已在服务器部署成功,客户端可以正常使用

RAG

使用BCEmbedding编码构建向量索引

国内访问不了huggingface,可以将BCEmbedding下载到本地电脑,下载链接:
https://www.modelscope.cn/models/maidalun/bce-embedding-base_v1/summary

使用Milvus向量数据库相关文档:https://python.langchain.com/v0.2/docs/integrations/vectorstores/milvus/

安装相关依赖

%pip install --upgrade --quiet  langchain_milvus

milvus_insert.py 构建向量索引示例代码:

from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_core.documents import Document
from langchain_community.vectorstores import Milvusembedding_model_name = './本地文件夹/bce-embedding-base_v1'  # 修改为你的模型名称  
embedding_model_kwargs = {'device': 'cpu:0'}  
embedding_encode_kwargs = {'batch_size': 32, 'normalize_embeddings': True}  # 可以使用Hugging Face的模型
embed_model = HuggingFaceEmbeddings(  model_name=embedding_model_name,  model_kwargs=embedding_model_kwargs,  encode_kwargs=embedding_encode_kwargs  
)if __name__ == "__main__":# json数据,可以改为从文档中读取数据text_datas = [{"instruction": "请问中医如何治疗瘰疬?","input": "","output": "中医治疗瘰疬通常采用中药内服和外用结合的方法。具体治疗方案因人而异,以下是一些常用的治疗方法:\n\n1. 清热解毒:使用具有清热解毒功效的中药,如金银花、连翘、黄芩等,可帮助清除毒素和热邪,减轻瘰疬症状。\n\n2. 活血化瘀:使用具有活血化瘀功效的中药,如当归、川芎、红花等,可促进血液循环,加速瘰疬的愈合。\n\n3. 外用贴敷:使用中药贴敷患处,如石膏、黄连、苦参等,可起到消炎、止痛、祛肿的作用。\n\n4. 食疗调理:可选择清淡易消化的食物,如蔬菜、水果、粥等,避免辛辣刺激性食物,同时加强营养,增强身体抵抗力。\n\n需要注意的是,瘰疬属于慢性疾病,治疗过程需要耐心和坚持,同时需避免刺激患处,保持身体清洁,避免感染。最好在专业中医医师的指导下进行治疗。"},{"instruction": "我经常消瘦,最近感觉特别乏力,有什么中药方剂可以推荐一下?要求:1. 请考虑所有症状。2. 请根据中医知识输出一步步的推理过程。","input": "","output": "首先,根据您描述的症状,消瘦和乏力是比较常见的症状,可能与多种因素有关。为了准确地确定中药方剂的选择,我需要了解更多的细节信息。\n\n1. 您的年龄、性别和身高体重比例是什么?\n\n2. 您的饮食结构如何,有没有厌食、消化不良等症状?\n\n3. 您的睡眠质量如何?有没有失眠或多梦的现象?\n\n4. 您的情绪状态如何?有没有情绪低落、焦虑、烦躁等情况?\n\n5. 您是否有其他症状,如盗汗、头晕、心悸等?\n\n根据中医的理论,消瘦和乏力可能与脾胃虚弱、气血不足、肝肾不足等有关。因此,在选择中药方剂时,需要考虑调补脾胃、益气养血、补肝肾等因素。同时,也需要结合具体病情,选择相应的药材进行配方。\n\n建议您到中医诊所或医院进行详细的中医体检和诊断,以便准确确定病因,选择最适合您的中药方剂。"}]# 编辑数据docs = []for i in range(len(text_datas)):page_content = text_datas[i]['instruction'] + "----------" + text_datas[i]['output']# new_document = Document(page_content=page_content, metadata={"namespace": "Wind_cold_disease"}) # 考虑多用户,使用 namespace 作为分区键,添加分区new_document = Document(page_content=page_content)docs.append(new_document)vector_db = Milvus.from_documents(docs,embed_model,collection_name="ChineseMedicineKnowledge",connection_args={"host": "服务器IP", "port": "19530"},)print(vector_db)

上述代码中,有两处地方需要根据自己电脑环境调整

  1. embedding_model_name = ‘./本地文件夹/bce-embedding-base_v1’ 将本地文件夹改为自己电脑下载bce-embedding-base_v1文件夹路径
  2. connection_args={“host”: “服务器IP”, “port”: “19530”} 将服务器IP改为自己部署的服务器ID

调整后,运行代码:

python milvus_insert.py

运行成功如下图所示
image.png

如果安装了Attu软件,可以在Attu中看到已添加的向量数据,下图所示:
image.png
image.png

向量搜索

milvus_rag.py 向量搜索示例代码:

from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_community.vectorstores import Milvus  
from langchain_core.documents import Document
import re# bce-embedding的模型
embedding_model_name = './本地文件夹/bce-embedding-base_v1'  # 修改为你的模型名称  
embedding_model_kwargs = {'device': 'cpu:0'}  
embedding_encode_kwargs = {'batch_size': 32, 'normalize_embeddings': True}  # 使用Hugging Face的模型名称
embed_model = HuggingFaceEmbeddings(  model_name=embedding_model_name,  model_kwargs=embedding_model_kwargs,  encode_kwargs=embedding_encode_kwargs  
)vector_db = Milvus(embed_model,connection_args={"host": "服务器IP", "port": "19530"},collection_name='ChineseMedicineKnowledge',
)query = "请问中医如何治疗瘰疬?"
docs = vector_db.similarity_search(query)# # 遍历列表中的每个字典
for document in docs:# # 打印文档的内容  print("Page Content:")  print(document.page_content)  print("\n\n")split_string = re.split("----------", document.page_content)print("content:"+split_string[1])

上述代码中,有两处地方需要根据自己电脑环境调整

  1. embedding_model_name = ‘./本地文件夹/bce-embedding-base_v1’ 将本地文件夹改为自己电脑下载bce-embedding-base_v1文件夹路径
  2. connection_args={“host”: “服务器IP”, “port”: “19530”} 将服务器IP改为自己部署的服务器ID

调整后,运行代码

python milvus_rag.py

查询出相关信息
image.png
可以将查询到的信息,根据需求再做适当的处理

恭喜你!已经学会使用RAG,快去试试吧

这篇关于轻松掌握:Milvus向量数据库部署与RAG使用技巧的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1050882

相关文章

C语言中联合体union的使用

本文编辑整理自: http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=179471 一、前言 “联合体”(union)与“结构体”(struct)有一些相似之处。但两者有本质上的不同。在结构体中,各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间, 一个联合变量

【EverEdit】活用 EverEdit 小技巧

【EverEdit】活用 EverEdit 小技巧 (1)设置 EverEdit 对比文件文本内容 设置如下图所示: 首先要先打开要对比的文本文件,和对比文件相比,此时打开了至少两个文件: 选择文件比较: (2)如何设置 EverEdit 监视文件的变化 设置如下图所示:

Tolua使用笔记(上)

目录   1.准备工作 2.运行例子 01.HelloWorld:在C#中,创建和销毁Lua虚拟机 和 简单调用。 02.ScriptsFromFile:在C#中,对一个lua文件的执行调用 03.CallLuaFunction:在C#中,对lua函数的操作 04.AccessingLuaVariables:在C#中,对lua变量的操作 05.LuaCoroutine:在Lua中,

UnrealScriptIDE调试环境部署

先安装vs2010   再安装VSIsoShell.exe, 下载地址 https://pan.baidu.com/s/10kPNUuDGTbWXbz7Nos-1WA       fd3t   最后安装unside,下载地址 https://archive.codeplex.com/?p=uside  安装中间有一步选择Binary文件夹要选对路径。   安装好以后,启动 UDKDe

Vim使用基础篇

本文内容大部分来自 vimtutor,自带的教程的总结。在终端输入vimtutor 即可进入教程。 先总结一下,然后再分别介绍正常模式,插入模式,和可视模式三种模式下的命令。 目录 看完以后的汇总 1.正常模式(Normal模式) 1.移动光标 2.删除 3.【:】输入符 4.撤销 5.替换 6.重复命令【. ; ,】 7.复制粘贴 8.缩进 2.插入模式 INSERT

Lipowerline5.0 雷达电力应用软件下载使用

1.配网数据处理分析 针对配网线路点云数据,优化了分类算法,支持杆塔、导线、交跨线、建筑物、地面点和其他线路的自动分类;一键生成危险点报告和交跨报告;还能生成点云数据采集航线和自主巡检航线。 获取软件安装包联系邮箱:2895356150@qq.com,资源源于网络,本介绍用于学习使用,如有侵权请您联系删除! 2.新增快速版,简洁易上手 支持快速版和专业版切换使用,快速版界面简洁,保留主

如何免费的去使用connectedpapers?

免费使用connectedpapers 1. 打开谷歌浏览器2. 按住ctrl+shift+N,进入无痕模式3. 不需要登录(也就是访客模式)4. 两次用完,关闭无痕模式(继续重复步骤 2 - 4) 1. 打开谷歌浏览器 2. 按住ctrl+shift+N,进入无痕模式 输入网址:https://www.connectedpapers.com/ 3. 不需要登录(也就是

关于如何更好管理好数据库的一点思考

本文尝试从数据库设计理论、ER图简介、性能优化、避免过度设计及权限管理方面进行思考阐述。 一、数据库范式 以下通过详细的示例说明数据库范式的概念,将逐步规范化一个例子,逐级说明每个范式的要求和变换过程。 示例:学生课程登记系统 初始表格如下: 学生ID学生姓名课程ID课程名称教师教师办公室1张三101数学王老师101室2李四102英语李老师102室3王五101数学王老师101室4赵六103物理陈

数据库期末复习知识点

A卷 1. 选择题(30') 2. 判断范式(10') 判断到第三范式 3. 程序填空(20') 4. 分析填空(15') 5. 写SQL(25') 5'一题 恶性 B卷 1. 单选(30') 2. 填空 (20') 3. 程序填空(20') 4. 写SQL(30') 知识点 第一章 数据库管理系统(DBMS)  主要功能 数据定义功能 (DDL, 数据定义语

给数据库的表添加字段

周五有一个需求是这样的: 原来数据库有一个表B,现在需要添加一个字段C,我把代码中增删改查部分进行了修改, 比如insert中也添入了字段C。 但没有考虑到一个问题,数据库的兼容性。因为之前的版本已经投入使用了,再升级的话,需要进行兼容处理,当时脑子都蒙了,转不过来,后来同事解决了这个问题。 现在想想,思路就是,把数据库的表结构存入文件中,如xxx.sql 实时更新该文件: CREAT