Weaviate 本地版部署 + SentenceTransformer 集成步骤

Weaviate 是一个开源的向量数据库,用于高效存储和检索向量数据。SentenceTransformer 是一个用于生成文本嵌入的库,常用于自然语言处理任务。将两者集成,可以在 Weaviate 中直接使用 SentenceTransformer 模型生成和查询文本向量。以下是详细的本地部署和集成步骤,基于官方文档和常见实践。整个过程在 Linux/macOS 系统上测试通过(Windows 系统需使用 WSL 或 Docker 适配)。

步骤 1: 部署 Weaviate 本地版

Weaviate 推荐使用 Docker 容器进行本地部署,确保已安装 Docker(版本 20.10+)。

  1. 拉取 Weaviate Docker 镜像: 在终端运行以下命令:

    docker pull semitechnologies/weaviate:latest
    

  2. 启动 Weaviate 容器: 使用以下命令启动一个 Weaviate 实例,并映射端口到本地:

    docker run -d --name weaviate -p 8080:8080 semitechnologies/weaviate:latest
    

    • -d:后台运行容器。
    • --name weaviate:容器名称。
    • -p 8080:8080:将容器端口 8080 映射到本地端口 8080。
  3. 验证部署: 打开浏览器访问 http://localhost:8080/v1/meta,或使用 curl 命令:

    curl http://localhost:8080/v1/meta
    

    如果返回 JSON 数据(如 Weaviate 版本信息),则表示部署成功。

步骤 2: 集成 SentenceTransformer 模型

Weaviate 支持通过模块集成外部模型。这里使用 text2vec-transformers 模块加载 SentenceTransformer 模型。模型选择:推荐 sentence-transformers/all-MiniLM-L6-v2(小型高效模型)。

  1. 停止并移除旧容器(可选): 如果已启动 Weaviate 容器,先停止并移除:

    docker stop weaviate
    docker rm weaviate
    

  2. 启动 Weaviate 并配置 SentenceTransformer 模块: 在启动容器时,通过环境变量指定模型:

    docker run -d --name weaviate -p 8080:8080 \
      -e "TRANSFORMERS_MODEL=sentence-transformers/all-MiniLM-L6-v2" \
      semitechnologies/weaviate:latest \
      --host 0.0.0.0 \
      --modules 'text2vec-transformers'
    

    • -e "TRANSFORMERS_MODEL=...":设置 SentenceTransformer 模型名称。
    • --modules 'text2vec-transformers':启用 text2vec-transformers 模块。
    • 模型会自动下载(首次启动需几分钟,取决于网络)。
  3. 验证模型集成: 发送一个测试请求,生成文本向量:

    curl -X POST http://localhost:8080/v1/vectors -H "Content-Type: application/json" -d '{
      "text": "Hello Weaviate"
    }'
    

    如果返回向量数据(如 "vector": [0.12, -0.05, ...]),则表示集成成功。

步骤 3: 使用 Python 示例(可选)

如果需要通过 Python 客户端操作,安装 weaviate-clientsentence-transformers 库:

pip install weaviate-client sentence-transformers

示例代码:创建 schema、插入数据并查询。

import weaviate

# 连接到本地 Weaviate 实例
client = weaviate.Client("http://localhost:8080")

# 定义 schema(使用 text2vec-transformers 模块)
class_obj = {
    "class": "Article",
    "vectorizer": "text2vec-transformers",  # 指定模块
    "properties": [
        {"name": "title", "dataType": ["text"]},
        {"name": "content", "dataType": ["text"]}
    ]
}
client.schema.create_class(class_obj)

# 插入数据(自动生成向量)
data_object = {
    "title": "Introduction to Weaviate",
    "content": "Weaviate is a vector database for machine learning."
}
client.data_object.create(data_object, "Article")

# 查询相似文本
response = client.query.get("Article", ["title", "content"]).with_near_text({
    "concepts": ["vector database"]
}).with_limit(1).do()
print(response)

注意事项
  • 硬件要求:Weaviate 本地运行至少需要 2GB RAM。SentenceTransformer 模型加载时,内存需求增加(如 all-MiniLM-L6-v2 约需 1GB)。
  • 模型选择:支持所有 Hugging Face 上的 SentenceTransformer 模型(例如 sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 支持多语言)。
  • 常见问题
    • 如果启动失败,检查 Docker 日志:docker logs weaviate
    • 首次模型下载慢时,可预先下载模型到本地,然后挂载卷(详见 Weaviate 文档)。
  • 扩展性:生产环境建议使用 Kubernetes 或云服务部署。

通过以上步骤,您已成功在本地部署 Weaviate 并集成 SentenceTransformer,可用于文本相似度搜索等应用。如需进一步优化,请参考 Weaviate 官方文档

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐