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