
在RAG技术中需要使用到向量数据库向量数据库Milvus的安装使用安装方式Docker部署推荐安装Docker和Docker Compose。下载Milvus的Docker Compose配置文件wget https://github.com/milvus-io/milvus/releases/download/v2.6.9/milvus-standalone-docker-compose.yml -O docker-compose.yml启动Milvus服务docker-compose up -d验证服务是否运行docker-compose ps基本使用连接Milvus使用PyMilvus SDK连接Milvus服务from pymilvus import connectionsconnections.connect(aliasdefault, hostlocalhost, port19530)创建集合集合是存储向量的基本单位from pymilvus import CollectionSchema, FieldSchema, DataTypefields [FieldSchema(nameid, dtypeDataType.INT64, is_primaryTrue),FieldSchema(nameembedding, dtypeDataType.FLOAT_VECTOR, dim768)]schema CollectionSchema(fieldsfields)collection Collection(example_collection, schema)插入数据import numpy as npvectors np.random.rand(10, 768).astype(np.float32)collection.insert([[i for i in range(10)], vectors])collection.index() # 创建索引向量搜索query_vector np.random.rand(1, 768).astype(np.float32)results collection.search(dataquery_vector,anns_fieldembedding,param{metric_type: L2, params: {nprobe: 10}},limit3)print(results[0].ids) # 输出相似向量的ID在Milvus向量数据库中插入文档数据需要结合文本嵌入模型如BERT、Sentence-BERT等将文档转换为向量再通过Milvus的SDK将向量和元数据如文档ID、标题等插入到集合中。以下是详细步骤和示例代码安装依赖库pip install pymilvus sentence-transformers # 示例使用sentence-transformers生成嵌入启动Milvus服务使用Docker部署推荐docker run -d --name milvus-standalone -p 19530:19530 -p 9091:9091 milvusdb/milvus:latest插入文档数据的完整流程1. 定义文档数据结构假设有一组文档每个文档包含ID、标题和内容documents [{id: 1, title: Milvus简介, content: Milvus是一款开源的向量数据库支持高效相似性搜索。},{id: 2, title: RAG技术, content: RAG检索增强生成结合了检索和生成模型提升问答准确性。},{id: 3, title: 向量数据库选型, content: Milvus适合大规模向量检索Chroma适合快速原型开发。}]2. 生成文档嵌入向量使用sentence-transformers将文档内容转换为向量维度为768from sentence_transformers import SentenceTransformermodel SentenceTransformer(paraphrase-multilingual-MiniLM-L12-v2) # 支持多语言embeddings model.encode([doc[content] for doc in documents]) # 生成向量列表3. 创建Milvus集合集合需定义字段id主键字段唯一标识文档。embedding浮点向量字段存储嵌入向量。可选元数据字段如title存储文档标题或其他属性from pymilvus import connections, CollectionSchema, FieldSchema, DataType, Collection# 连接Milvusconnections.connect(default, hostlocalhost, port19530)# 定义字段fields [FieldSchema(nameid, dtypeDataType.INT64, is_primaryTrue),FieldSchema(nameembedding, dtypeDataType.FLOAT_VECTOR, dim768), # 向量维度需与生成的一致FieldSchema(nametitle, dtypeDataType.VARCHAR, max_length200) # 可选元数据字段]# 创建集合schema CollectionSchema(fieldsfields)collection Collection(document_collection, schema)4. 插入数据将文档ID、向量和元数据插入集合# 提取数据ids [doc[id] for doc in documents]titles [doc[title] for doc in documents]# 插入数据需按字段顺序对应collection.insert([ids, embeddings, titles])# 创建索引可选但推荐以提高搜索效率collection.create_index(embedding, {metric_type: IP, params: {nlist: 128}})collection.load() # 加载集合到内存验证数据插入查询集合中的数据# 查询所有文档的ID和标题results collection.query(exprid in [1, 2, 3], # 查询条件output_fields[id, title] # 返回字段)print(results)# 输出示例# [{id: 1, title: Milvus简介}, {id: 2, title: RAG技术}, {id: 3, title: 向量数据库选型}]完整代码示例from pymilvus import connections, CollectionSchema, FieldSchema, DataType, Collectionfrom sentence_transformers import SentenceTransformer# 1. 准备文档数据documents [{id: 1, title: Milvus简介, content: Milvus是一款开源的向量数据库支持高效相似性搜索。},{id: 2, title: RAG技术, content: RAG检索增强生成结合了检索和生成模型提升问答准确性。},{id: 3, title: 向量数据库选型, content: Milvus适合大规模向量检索Chroma适合快速原型开发。}]# 2. 生成嵌入向量model SentenceTransformer(paraphrase-multilingual-MiniLM-L12-v2)embeddings model.encode([doc[content] for doc in documents])# 3. 连接Milvus并创建集合connections.connect(default, hostlocalhost, port19530)fields [FieldSchema(nameid, dtypeDataType.INT64, is_primaryTrue),FieldSchema(nameembedding, dtypeDataType.FLOAT_VECTOR, dim768),FieldSchema(nametitle, dtypeDataType.VARCHAR, max_length200)]schema CollectionSchema(fieldsfields)collection Collection(document_collection, schema)# 4. 插入数据ids [doc[id] for doc in documents]titles [doc[title] for doc in documents]collection.insert([ids, embeddings, titles])# 5. 创建索引并加载collection.create_index(embedding, {metric_type: IP, params: {nlist: 128}})collection.load()print(文档数据插入成功)