Skip to content

Weaviate 向量数据库

Weaviate 是一款开源的向量数据库,支持多模态数据(文本、图像、视频等)。

为什么选择 Weaviate

  • 开源(BSD 3-Clause)
  • 支持多模态(文本、图像)
  • 内置 Embedding 模块(无需外部调用)
  • 支持 GraphQL 查询
  • 支持自部署和云服务

安装(Docker)

bash
# docker-compose.yml
version: '3.4'
services:
  weaviate:
    image: semitechnologies/weaviate:latest
    ports:
      - "8080:8080"
    environment:
      QUERY_DEFAULTS_LIMIT: 25
      AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
      PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
      DEFAULT_VECTORIZER_MODULE: 'text2vec-openai'
      OPENAI_APIKEY: 'your-openai-key'

Python SDK 使用

安装

bash
pip install weaviate-client

连接和创建 Schema

python
import weaviate

# 连接
client = weaviate.Client("http://localhost:8080")

# 定义 Schema(类似数据库表结构)
class_obj = {
    "class": "Document",
    "description": "一篇文档",
    "properties": [
        {
            "name": "title",
            "dataType": ["text"]
        },
        {
            "name": "content",
            "dataType": ["text"]
        }
    ],
    "vectorizer": "text2vec-openai"  # 自动用 OpenAI 向量化
}

client.schema.create_class(class_obj)

插入数据

python
# Weaviate 会自动调用 OpenAI 进行向量化
client.data_object.create(
    data_object={
        "title": "RAG 技术介绍",
        "content": "RAG 是检索增强生成..."
    },
    class_name="Document"
)

搜索

python
# 语义搜索
result = (
    client.query
    .get("Document", ["title", "content"])
    .with_near_text({"concepts": ["向量数据库"]})
    .with_limit(5)
    .do()
)

print(result)

混合搜索(向量 + BM25)

python
result = (
    client.query
    .get("Document", ["title", "content"])
    .with_hybrid(
        query="向量数据库",
        alpha=0.5  # 0=纯关键词,1=纯向量
    )
    .with_limit(5)
    .do()
)

与 LangChain 集成

python
from langchain.vectorstores import Weaviate
from langchain.embeddings import OpenAIEmbeddings

# 创建向量存储
vectorstore = Weaviate.from_texts(
    texts=["文档内容1", "文档内容2"],
    embedding=OpenAIEmbeddings(),
    weaviate_client=client,
    index_name="Document"
)

# 搜索
results = vectorstore.similarity_search("查询内容", k=5)

Weaviate Cloud (WCD)

不想自部署,可以用官方云服务:

python
import weaviate

# 连接到 WCD
client = weaviate.Client(
    url="https://your-cluster.weaviate.network",
    auth_client_secret=weaviate.AuthApiKey(api_key="your-key")
)

相关资源