如何在本地Weaviate中使用自定义Sentence-Transformers嵌入模型实现RAG?
本地部署Weaviate+自定义Sentence-Transformers模型的RAG完整流程
1. 安装必要依赖
确保已安装所需Python包:
pip install weaviate-client sentence-transformers
2. 初始化自定义嵌入模型
使用你提供的代码初始化模型:
from sentence_transformers import SentenceTransformer import weaviate # 初始化自定义嵌入模型 embeddings_model = SentenceTransformer('Alibaba-NLP/gte-large-en-v1.5', trust_remote_code=True)
3. 连接本地Weaviate并定义数据类
Weaviate需要先定义Schema(数据类),需匹配自定义模型的向量维度(gte-large-en-v1.5的向量维度为1024):
# 连接本地Weaviate服务器(8080端口) client = weaviate.Client("http://localhost:8080") # 定义数据类Schema class_schema = { "class": "Document", "vectorizer": "none", # 禁用Weaviate内置向量器,使用自定义模型 "vectorIndexConfig": { "distance": "cosine" # 与模型的余弦相似度计算逻辑匹配 }, "properties": [ { "name": "content", "dataType": ["text"] } ] } # 创建类(仅当类不存在时执行) if not client.schema.exists("Document"): client.schema.create_class(class_schema)
4. 嵌入文档并导入Weaviate
准备文档后,用自定义模型生成向量再批量导入:
# 示例文档列表 sample_docs = [ {"content": "Weaviate is a vector database built for scalable similarity search and retrieval."}, {"content": "Sentence-transformers offers pre-trained models to generate high-quality text embeddings."}, {"content": "RAG systems retrieve relevant documents first, then use generative AI to produce context-aware responses."}, {"content": "Local vector database deployment ensures data privacy and reduces network latency."} ] # 批量嵌入并导入Weaviate with client.batch as batch: batch.batch_size = 4 for doc in sample_docs: # 生成文档向量 doc_vector = embeddings_model.encode(doc["content"]) # 添加到Weaviate batch.add_data_object( data_object=doc, class_name="Document", vector=doc_vector.tolist() )
5. 编码查询并执行相似性检索
使用同一模型编码查询语句,再从Weaviate检索相似文档:
# 测试查询语句 query_text = "This is a test query" # 生成查询向量 query_vector = embeddings_model.encode(query_text) # 执行相似性检索,返回Top3结果 results = client.query.get( "Document", ["content"] ).with_near_vector({ "vector": query_vector.tolist() }).with_limit(3).do() # 打印检索结果 print("Top similar documents:") for doc in results["data"]["Get"]["Document"]: print(f"- {doc['content']}")
关键注意事项
- 确保本地Weaviate服务已启动并监听8080端口(可通过官方Docker镜像启动)
- 导入文档时,向量长度需与模型输出一致,Weaviate会自动适配无需手动指定维度
- 处理大量文档时,可调整
batch_size参数优化导入效率
内容的提问来源于stack exchange,提问作者figs_and_nuts
相关产品推荐
相关产品推荐

