|
1. Milvus简介 Milvus是一款开源的向量数据库,由 Zilliz 开发并维护,适合用于机器学习和人工智能领域。是一款专为处理向量查询而设计的数据库,Milvus 能够对万亿级向量进行索引。 Milvus官网:https://milvus.io/ Milvus中文文档:https://www.milvus-io.com/ 2. Milvus部署2.1. 环境准备2.1.1. 检查Docker是否安装成功运行以下命令,检查Docker是否安装成功,安装成功显示版本信息 dockerversion 运行以下命令,检查Docker Compose是否安装成功,安装成功显示安装的版本信息 docker-compose--version 2.2. 安装Docker未安装Docker可以按照以下命令安装,以下命令为Ubuntu系统环境命令 2.2.1. 更新系统包sudo apt update sudo apt upgrade -y
2.2.2. 安装依赖包安装一些必要的系统工具和依赖,以便使用HTTPS源进行软件包安装: sudoaptinstallapt-transport-httpsca-certificatescurlsoftware-properties-common 2.2.3. 添加Docker官方GPG密钥Docker的官方GPG密钥用于验证Docker软件包的来源。 curl-fsSLhttps://download.docker.com/linux/ubuntu/gpg|sudogpg--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
2.2.4. 更新软件包列表并安装Docker再次更新软件包列表,然后安装Docker CE(Community Edition): sudo apt update sudo apt-get install docker-ce docker-ce-cli containerd.io -y
2.2.5. 启动Docker服务并设置开机启动安装完成后,启动Docker服务并设置为开机启动: sudo systemctl start docker sudo systemctl enable docker
2.2.6. 验证Docker安装通过运行一个测试容器来验证Docker是否正确安装: dockerrunhello-world 如果安装成功,您将看到一条欢迎消息,表明Docker已成功安装并运行了一个测试镜像。 以上步骤完成之后,就已经在Ubuntu Linux系统上成功安装了Docker。
2.2.7. (可选)配置Docker加速器如果在中国大陆地区,为了加速Docker镜像的下载,可以考虑配置Docker的镜像加速器,如阿里云的镜像加速服务。 登录阿里云账号,找到容器镜像服务 镜像工具->镜像加速器,根据操作文档,配置镜像加速器 
2.3. 安装Docker Compose未安装Docker Compose的可以按照以下命令安装 2.3.1. 下载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
2.3.2. 设置执行权限:sudochmod+x/usr/local/bin/docker-compose 2.3.3. 创建软链接(可选,但推荐):sudoln-s/usr/local/bin/docker-compose/usr/bin/docker-compose 2.3.4. 验证安装docker-compose--version 如果安装成功,这条命令将输出Docker Compose的版本号。 2.3.5. 卸载Docker Compose(可选)如果需要卸载Docker Compose,可以简单地删除/usr/local/bin/docker-compose文件: sudo rm /usr/local/bin/docker-compose sudo rm /usr/bin/docker-compose#删除创建的软连接
2.4. Milvus安装2.4.1. 创建Milvus工作目录为Milvus创建一个目录来存储数据和日志。 mkdir milvus-workdir# 创建一个新的工作目录 cd milvus-workdir # 进入工作目录
2.4.2. 下载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
2.4.3. 启动Milvus服务sudodocker-composeup-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
检查国内源地址设置是否生效 dockerinfo 生效之后,再次运行启动命令 sudodocker-composeup-d 
如果还是失败,就更换一下国内源,多尝试几次 
启动成功 
2.4.4. 检查Milvus服务是否正常启动:dockerps Milvus正常启动,如下图所示 
2.4.5. (可选)授权端口号允许外网访问如果是在云服务器上部署,需要授权端口号允许外网访问。阿里云服务器在安全组,入方向,授权端口 19530 允许访问 
2.4.6. (可选)安装Milvus图形界面客户端AttuAttu为 Milvus 专门开发的图形界面客户端,可以在 https://github.com/zilliztech/attu/releases 找到最新发布版本,找到可执行安装包下载到电脑安装即可使用。 
3. Milvus客户端使用3.1. 安装依赖在客户端的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
3.2. 下载示例代码进行测试使用Python运行Milvus:https://www.milvus-io.com/example_code 下载 hello_milvus.py 直接或使用以下命令 wgethttps://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 pythonhello_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已在服务器部署成功,客户端可以正常使用 4. RAG4.1. 使用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/ 安装相关依赖 %pipinstall--upgrade--quietlangchain_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)
上述代码中,有两处地方需要根据自己电脑环境调整 1. embedding_model_name = './本地文件夹/bce-embedding-base_v1' 将本地文件夹改为自己电脑下载bce-embedding-base_v1文件夹路径 connection_args={"host": "服务器IP", "port": "19530"} 将服务器IP改为自己部署的服务器ID
调整后,运行代码: pythonmilvus_insert.py 运行成功如下图所示 
如果安装了Attu软件,可以在Attu中看到已添加的向量数据,下图所示: 

4.2. 向量搜索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(" age 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文件夹路径 connection_args={"host": "服务器IP", "port": "19530"} 将服务器IP改为自己部署的服务器ID
调整后,运行代码 pythonmilvus_rag.py 查询出相关信息 
可以将查询到的信息,根据需求再做适当的处理
|