You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在本地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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 03:05:09