Weaviate 简介 #

什么是向量数据库? #

向量数据库是一种专门用于存储、索引和查询高维向量数据的数据库系统。在 AI 和机器学习时代,向量数据库扮演着至关重要的角色。

向量的本质 #

text
向量是将现实世界的数据转换为数值表示:

文本 → Embedding → [0.1, 0.2, -0.3, 0.4, ...]
图像 → CNN → [0.5, -0.1, 0.8, 0.2, ...]
音频 → Encoder → [0.3, 0.7, -0.2, 0.9, ...]

每个向量都是高维空间中的一个点
相似的内容在向量空间中距离更近

为什么需要向量数据库? #

text
传统数据库 vs 向量数据库

传统数据库:
├── 精确匹配(WHERE name = 'apple')
├── 范围查询(WHERE price > 100)
└── 无法理解语义相似性

向量数据库:
├── 相似性搜索(找到最相似的向量)
├── 语义理解('苹果' 和 'iPhone' 相似)
└── 多模态检索(文本搜图、图搜图)

Weaviate 概述 #

Weaviate 是一个开源的云原生向量数据库,由 Weaviate B.V. 公司开发维护。它使用 Go 语言编写,专为生产环境设计,具有独特的模块化架构。

发展历程 #

text
时间线:

2019 年
└── Weaviate 项目启动

2020 年
├── 发布首个开源版本
└── 引入模块化架构

2021 年
├── 推出 Weaviate Cloud 云服务
└── GraphQL 接口完善

2022 年
├── 支持多种向量化模块
└── 企业级特性增强

2023 年
├── RAG 应用场景成熟
└── 多模态支持完善

2024 年
├── 性能大幅提升
└── 生态持续扩展

核心特性 #

特性 描述
模块化 内置多种向量化模块,开箱即用
开源 BSD 3-Clause 许可证
云原生 Kubernetes 友好
GraphQL 灵活强大的查询接口
知识图谱 支持对象间的语义关系
实时 支持实时数据更新和查询

架构设计 #

整体架构 #

text
┌─────────────────────────────────────────────────────────────┐
│                        Client Layer                          │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │  REST API   │  │   GraphQL   │  │    SDK      │         │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
├─────────────────────────────────────────────────────────────┤
│                        Module Layer                          │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │  Vectorizer │  │  Generative │  │   Reranker  │         │
│  │  Modules    │  │   Modules   │  │   Modules   │         │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
├─────────────────────────────────────────────────────────────┤
│                        Core Layer                            │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │   Schema    │  │   Search    │  │   Storage   │         │
│  │   Manager   │  │   Engine    │  │   Engine    │         │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
├─────────────────────────────────────────────────────────────┤
│                        Index Layer                           │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │  HNSW Index │  │  Inverted   │  │   Geo       │         │
│  │             │  │   Index     │  │   Index     │         │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
└─────────────────────────────────────────────────────────────┘

核心组件 #

1. Schema(模式) #

text
Schema 定义数据结构:

Schema: "Article"
├── properties: 字段定义
│   ├── title: text
│   ├── content: text
│   └── author: reference
├── vectorizer: 向量化配置
└── moduleConfig: 模块配置

2. Object(对象) #

text
Object 是单个数据记录:

Object:
├── id: UUID 唯一标识符
├── properties: {"title": "...", "content": "..."}
├── vector: [0.1, 0.2, ...] (向量)
└── references: 关联对象

3. Module(模块) #

text
Module 提供扩展能力:

Module Types:
├── Vectorizer: 向量化模块
│   ├── text2vec-openai
│   ├── text2vec-cohere
│   └── text2vec-huggingface
├── Generative: 生成模块
│   └── generative-openai
└── Reranker: 重排序模块
    └── reranker-cohere

模块化架构 #

Weaviate 最独特的特性是其模块化架构,允许将向量化能力内置到数据库中。

向量化模块 #

text
内置向量化模块:

文本向量化:
├── text2vec-openai: OpenAI Embeddings
├── text2vec-cohere: Cohere Embeddings
├── text2vec-huggingface: HuggingFace 模型
├── text2vec-palm: Google PaLM Embeddings
└── text2vec-contextionary: Weaviate 内置

图像向量化:
├── img2vec-neural: 神经网络图像编码
└── multi2vec-clip: CLIP 多模态编码

多模态:
└── multi2vec-clip: 文本+图像统一向量

生成模块 #

text
生成模块用于 RAG:

├── generative-openai: OpenAI GPT
├── generative-cohere: Cohere Generate
├── generative-palm: Google PaLM
└── generative-anyscale: Anyscale

模块工作流程 #

text
数据写入流程:

用户数据 → Vectorizer Module → 向量 + 数据 → Weaviate 存储

查询流程:

用户查询 → Vectorizer Module → 查询向量 → Weaviate 搜索 → 结果

GraphQL 查询 #

Weaviate 使用 GraphQL 作为主要查询语言,提供强大的查询能力。

基本查询 #

graphql
{
  Get {
    Article(
      nearText: {query: "向量数据库"}
      limit: 5
    ) {
      title
      content
      _additional {
        certainty
        distance
      }
    }
  }
}

聚合查询 #

graphql
{
  Aggregate {
    Article {
      meta {
        count
      }
      grouping {
        groupBy {
          path: ["category"]
        }
        meta {
          count
        }
      }
    }
  }
}

过滤查询 #

graphql
{
  Get {
    Article(
      where: {
        operator: And,
        operands: [
          {path: ["category"], operator: Equal, valueText: "技术"},
          {path: ["views"], operator: GreaterThan, valueInt: 1000}
        ]
      }
    ) {
      title
      category
    }
  }
}

距离度量 #

Weaviate 支持多种向量距离度量方式:

1. 余弦相似度(Cosine) #

text
最常用的度量方式,关注向量方向:

cos(a, b) = (a · b) / (|a| × |b|)

适用场景:
├── 文本嵌入
├── 语义相似性
└── 归一化向量

2. 点积(Dot Product) #

text
直接计算向量点积:

dot(a, b) = Σ(ai × bi)

适用场景:
├── 推荐系统
├── 归一化向量
└── 性能优先场景

3. L2 距离(欧几里得) #

text
计算向量间的直线距离:

l2(a, b) = √Σ(ai - bi)²

适用场景:
├── 图像特征
├── 物理距离
└── 未归一化向量

与其他系统对比 #

Weaviate vs Qdrant #

特性 Weaviate Qdrant
内置向量化
GraphQL
知识图谱
过滤能力
性能 更高
部署复杂度 中等

Weaviate vs Milvus #

特性 Weaviate Milvus
部署复杂度
内置向量化
查询接口 GraphQL REST/gRPC
社区活跃度
企业特性 完善 完善

Weaviate vs Pinecone #

特性 Weaviate Pinecone
开源
自托管
内置向量化
价格 免费/按需付费 按量计费
学习曲线 中等

应用场景详解 #

1. RAG(检索增强生成) #

text
RAG 工作流程:

用户问题
    ↓
Vectorizer Module(向量化)
    ↓
向量查询 → Weaviate
    ↓
相关文档
    ↓
Generative Module(LLM 生成)
    ↓
最终回答

2. 语义搜索 #

text
语义搜索流程:

查询文本 → Vectorizer → 向量搜索 → 排序结果

优势:
├── 理解同义词
├── 跨语言搜索
└── 概念关联

3. 知识图谱 #

text
知识图谱架构:

对象A ──引用──→ 对象B
  │              │
  └──引用──→ 对象C

Weaviate 支持对象间的交叉引用
实现语义知识图谱

性能特点 #

查询性能 #

text
典型查询延迟:

数据规模: 100 万向量
维度: 1536 (OpenAI)
召回率: 95%

查询延迟: < 50ms (P99)
吞吐量: > 1,000 QPS

内存效率 #

text
内存占用估算:

100 万向量 × 1536 维 × 4 字节 = 6 GB
HNSW 索引开销 ≈ 30%
总内存 ≈ 8 GB

生态系统 #

官方 SDK #

text
Python:
pip install weaviate-client

JavaScript/TypeScript:
npm install weaviate-ts-client

Go:
go get github.com/weaviate/weaviate-go-client

Java:
implementation 'io.weaviate:client'

集成框架 #

text
LangChain 集成:
├── 向量存储后端
├── 文档检索器
└── RAG 链

LlamaIndex 集成:
├── 索引存储
├── 查询引擎
└── 混合检索

Haystack 集成:
├── 文档存储
├── 嵌入后端
└── 检索管道

小结 #

Weaviate 是一个功能强大、架构独特的向量数据库:

  • 模块化:内置向量化,开箱即用
  • GraphQL:灵活强大的查询能力
  • 知识图谱:支持对象间语义关系
  • 云原生:Kubernetes 友好,易于部署

下一步 #

了解了 Weaviate 的基本概念后,接下来学习 安装与配置,开始你的 Weaviate 之旅!

最后更新:2026-04-04