【AI大模型应用开发】【项目实战】18.RAG智慧问答项目-(六)基于Milvus库的问答系统之向量存储

发布时间:2026/10/22 2:39:18
【AI大模型应用开发】【项目实战】18.RAG智慧问答项目-(六)基于Milvus库的问答系统之向量存储 一.向量存储目标1.理解向量存储在RAG系统中的功能和重要性2.学会创建和管理向量数据库3.掌握如何将文本转化为向量并存入数据库4.理解混合检索与重排序的实现原理1.模块功能概述vector_store.py是EduRAG系统的核心模块之一,封装了与Milvus向量数据库的交互逻辑,它负责将文档转化为向量存储到数据库中,并提供高效的混合检索功能,通过结合BGE-M3嵌入模型和重排序机制,该模块确保系统能够快速检索到与用户查询最相关的文档VectorStore类提供了以下主要功能:初始化与集合管理:创建或加载Milvus向量数据库集合文档向量化与存储:将分块后的文档转换为向量并存储混合检索与重排序:结合稠密和稀疏向量进行检索,并通过重排序优化结果""" 实文档向量的存储功能 分为以下3个模块: 初始化与集合管理:创建或加载Milvus向量数据库集合 初始化方法:初始化VectorStore类的实例,设置基本参数并调用集合创建或加载方法 创建或加载集合方法:检查并创建或加载Milvus集合,定义字段结构和索引参数 文档向量化与存储:将分块后的文档转换为向量并存储 添加文档方法:将分块后的文档转换为向量并存储到Milvus集合 混合检索与重排序:结合稠密和稀疏向量进行检索,并通过重排序优化结果 """功能1: 向量写入功能2:查询以下将逐一讲解每个方法的实现细节导入必备工具包:# 导入 BGE-M3 嵌入函数,用于生成文档和查询的向量表示 from milvus_model.hybrid import BGEM3EmbeddingFunction # 导入 Milvus 相关类,用于操作向量数据库 from pymilvus import MilvusClient, DataType, AnnSearchRequest, WeightedRanker # 导入 Document 类,用于创建文档对象 from langchain_core.documents import Document # 导入 CrossEncoder,用于重排序和 NLI 判断 from sentence_transformers import CrossEncoder # 导入 hashlib 模块,用于生成唯一 ID 的哈希值 import hashlib from base.config import config from base.logger import logger import sys2.初始化方法(1).功能__init__方法初始化VectorStore类的实例,设置基本参数并调用集合创建或加载方法(2).代码示例思路:""" 需求:初始化VectorStore 思路步骤: 1. 构造milvus连接相关的参数: host、port、db、collection_name 2. 构造嵌入模型 3. 构造rerank模型 4. 创建或加载milvus集合,保证milvus表存在 """代码:""" 实文档向量的存储功能 分为以下3个模块: 初始化与集合管理:创建或加载Milvus向量数据库集合。 初始化方法:初始化VectorStore类的实例,设置基本参数并调用集合创建或加载方法 创建或加载集合方法:检查并创建或加载Milvus集合,定义字段结构和索引参数 文档向量化与存储:将分块后的文档转换为向量并存储。 添加文档方法:将分块后的文档转换为向量并存储到Milvus集合 混合检索与重排序:结合稠密和稀疏向量进行检索,并通过重排序优化结果。 """ # core/vector_store.py import datetime from attr.validators import max_len # 导入 BGE-M3 嵌入函数,用于生成文档和查询的向量表示 from milvus_model.hybrid import BGEM3EmbeddingFunction # 导入 Milvus 相关类,用于操作向量数据库 from pymilvus import MilvusClient, DataType, AnnSearchRequest, WeightedRanker # 导入 Document 类,用于创建文档对象 from langchain_core.documents import Document # 导入 CrossEncoder,用于重排序和 NLI 判断 from sentence_transformers import CrossEncoder # 导入 hashlib 模块,用于生成唯一 ID 的哈希值 import hashlib from base.config import single_config as config from base.logger import single_logger as logger import sys import os import torch # 定义 VectorStore 类,封装向量存储和检索功能 class VectorStore: """ 需求:初始化VectorStore 思路步骤: 1. 构造milvus连接相关的参数: host、port、db、collection_name 2. 构造嵌入模型 3. 构造rerank模型 4. 创建或加载milvus集合,保证milvus表存在 """ # 初始化方法,设置向量存储的基本参数 def __init__(self, milvus_host=config.MILVUS_HOST , milvus_port=config.MILVUS_PORT , milvus_database_name=config.MILVUS_DATABASE_NAME , milvus_collection_name=config.MILVUS_COLLECTION_NAME , dim=1024 ): # 1. 构造milvus连接相关的参数: host、port、db、collection_name. # 设置 Milvus 主机地址 self.milvus_host = milvus_host # 设置 Milvus 端口号 self.milvus_port = milvus_port # 设置 Milvus 数据库名称 self.milvus_database_name = milvus_database_name # 设置 Milvus 集合名称 self.milvus_collection_name = milvus_collection_name self.dim = dim # 等价于MilvusClient(地址) client.use_database(数据库名) self.milvus_client = MilvusClient(uri=f'http://{self.milvus_host}:{self.milvus_port}', db_name=self.milvus_database_name) # 创建或加载milvus集合,保证milvus表存在 self._create_or_load_collection() # 2. 构造嵌入模型 # 初始化 BGE-M3 嵌入函数,使用 CPU 设备,不启用 FP16 embedding_model_path = os.path.join(config.MODELS_DIR, 'bge-m3') # 构造bge-m3模型,通过路径加载的方式把模型加载到内存中 self.embedding_model = BGEM3EmbeddingFunction( # BGEM3EmbeddingFunction 是Milvus的包 # 传入模型名: 自动下载; 传入路径:直接加载 model_name_or_path=embedding_model_path, # f16: 半精度浮点数 这里取false相当于使用fp32 # TODO 是否开启半精度 use_fp16=False, # 推理(预测)设备 # TODO 专业卡:A100, H100, A800. 消费卡:RTX4090, RTX5090 device='cuda' if torch.cuda.is_available() else 'cpu' ) logger.info(f'加载embedding模型成功!') # 3. 构造rerank模型 # bge-reranker-large模型: 用于接收query + context, 输出分数, 但是排序需要手动排序 rerank_model_path = os.path.join(config.MODELS_DIR, 'bge-reranker-large') # 初始化 BGE-Reranker 模型,用于重排序检索结果 # TODO device代表设备: mps:m1系列的mac/ cpu: cpu / cuda: nvidia的gpu。和操作系统无关 # CrossEncoder: 交叉编码器, query 和context来做对比 self.rerank_model = CrossEncoder(rerank_model_path, device='cuda' if torch.cuda.is_available() else 'cpu') logger.info(f'加载rerank模型成功')(3).实现步骤1.参数设置:使用Config中的默认值初始化集合名称、主机、端口和数据库名称2.模型初始化:reranker:加载BGE-Reranker模型,用于后续重排序embedding_model:初始化BGE-M3嵌入模型,禁用FP16,使用CPU运行dim:获取稠密向量的维度3.客户端连接:创建MilvusClient实例,连接到指定主机和数据库4.集合管理:

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询