轻松掌握:Milvus向量数据库部署与RAG使用技巧
轻松掌握: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
如果还是失败,就更换一下国内源,多尝试几次
启动成功
检查Milvus服务是否正常启动:
docker ps
Milvus正常启动,如下图所示
(可选)授权端口号允许外网访问
如果是在云服务器上部署,需要授权端口号允许外网访问。阿里云服务器在安全组,入方向,授权端口 19530
允许访问
(可选)安装Milvus图形界面客户端Attu
Attu为 Milvus 专门开发的图形界面客户端,可以在 https://github.com/zilliztech/attu/releases 找到最新发布版本,找到可执行安装包下载到电脑安装即可使用。
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 Milvus
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
)
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)
上述代码中,有两处地方需要根据自己电脑环境调整
- embedding_model_name = ‘./本地文件夹/bce-embedding-base_v1’ 将本地文件夹改为自己电脑下载bce-embedding-base_v1文件夹路径
- connection_args={“host”: “服务器IP”, “port”: “19530”} 将服务器IP改为自己部署的服务器ID
调整后,运行代码:
python milvus_insert.py
运行成功如下图所示
如果安装了Attu软件,可以在Attu中看到已添加的向量数据,下图所示:
向量搜索
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])
上述代码中,有两处地方需要根据自己电脑环境调整
- embedding_model_name = ‘./本地文件夹/bce-embedding-base_v1’ 将本地文件夹改为自己电脑下载bce-embedding-base_v1文件夹路径
- connection_args={“host”: “服务器IP”, “port”: “19530”} 将服务器IP改为自己部署的服务器ID
调整后,运行代码
python milvus_rag.py
查询出相关信息
可以将查询到的信息,根据需求再做适当的处理
恭喜你!已经学会使用RAG,快去试试吧
更多推荐
所有评论(0)