Weaviate 实战:内置向量化的"全能型"数据库体验 🏋️
🔥 本文是《向量数据库实战:选型、调优与落地》专栏第 10 篇
⏱️ 阅读时间:约 12 分钟
🎯 开篇:最"全能"的向量数据库
如果说 Milvus 是"功能最全",Qdrant 是"性能最猛",Chroma 是"最轻量"——
那 Weaviate 就是**最"全能"**的那个 🏋️
全能在哪?
┌─────────────────────────────────────────────────────────┐
│ Weaviate 的"全能"体现在哪 │
├─────────────────────────────────────────────────────────┤
│ │
│ 1. 🔌 内置向量化模块 │
│ → 不需要自己调 Embedding API,直接传文本 │
│ → 支持 OpenAI、Cohere、HuggingFace 等 20+ 模型 │
│ │
│ 2. 🏗️ GraphQL API │
│ → 灵活的查询语法,一次获取多种数据 │
│ │
│ 3. 🔄 混合搜索 │
│ → 向量搜索 + BM25 关键词搜索 原生支持 │
│ │
│ 4. 📦 多模态支持 │
│ → 文本、图片、视频 统一管理 │
│ │
│ 5. 🔗 数据模块化 │
│ → 内置模块:文本向量化、图片向量化、问答生成等 │
│ │
└─────────────────────────────────────────────────────────┘
🛠️ 快速启动
# Docker 启动(带内置向量化模块)
docker run -d \
-p 8080:8080 \
-p 50051:50051 \
-e QUERY_DEFAULTS_LIMIT=25 \
-e AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true \
-e PERSISTENCE_DATA_PATH=/var/lib/weaviate \
-e ENABLE_MODULES=text2vec-openai,generative-openai \
-e OPENAI_APIKEY=sk-xxx \
cr.weaviate.io/semitechnologies/weaviate:1.25.0
端口说明:
| 端口 | 协议 | 用途 |
|---|---|---|
| 8080 | REST/GraphQL | HTTP 接口 |
| 50051 | gRPC | 高性能接口 |
# Python SDK
pip install weaviate-client
📝 完整实战
Step 1:连接 & 创建 Schema
import weaviate
# 连接 Weaviate
client = weaviate.Client("http://localhost:8080")
# 创建 Schema(Class)
schema = {
"class": "Article",
"description": "技术文章集合",
"vectorizer": "text2vec-openai", # 内置向量化!
"moduleConfig": {
"text2vec-openai": {
"model": "text-embedding-3-small",
"modelVersion": "2024-01-25"
}
},
"properties": [
{
"name": "title",
"dataType": ["text"],
"description": "文章标题"
},
{
"name": "content",
"dataType": ["text"],
"description": "文章内容"
},
{
"name": "category",
"dataType": ["string"],
"description": "分类"
},
{
"name": "publish_date",
"dataType": ["date"],
"description": "发布日期"
}
]
}
client.schema.create_class(schema)
Step 2:插入数据(直接传文本!)
# 直接传文本,Weaviate 自动调用 OpenAI 生成向量!
articles = [
{
"title": "向量数据库入门",
"content": "向量数据库是专门用于存储和检索高维向量的数据库系统...",
"category": "database",
"publish_date": "2025-01-15"
},
{
"title": "HNSW 算法详解",
"content": "HNSW 是一种基于分层图结构的近似最近邻搜索算法...",
"category": "algorithm",
"publish_date": "2025-02-20"
},
{
"title": "RAG 技术实战",
"content": "RAG 通过检索增强生成来提升大语言模型的回答质量...",
"category": "ai",
"publish_date": "2025-03-10"
},
]
# 批量插入
with client.batch as batch:
batch.batch_size = 100
for article in articles:
client.batch.add_data_object(
data_object=article,
class_name="Article"
)
print("数据插入成功!")
Step 3:语义搜索
# 语义搜索(直接传文本!)
response = client.query.get(
"Article",
["title", "content", "category"]
).with_near_text({
"concepts": ["如何存储和检索向量数据"],
"certainty": 0.7 # 最低相似度阈值
}).with_limit(3).do()
# 打印结果
for article in response['data']['Get']['Article']:
print(f"📄 {article['title']} [{article['category']}]")
Step 4:混合搜索(向量 + 关键词)
# 混合搜索:向量语义 + BM25 关键词
response = client.query.get(
"Article",
["title", "content"]
).with_hybrid(
query="向量数据库 HNSW",
alpha=0.5 # 0=纯关键词,1=纯向量,0.5=混合
).with_limit(5).do()
📊 Weaviate 内置模块一览
| 模块 | 功能 | 支持的模型 |
|---|---|---|
| text2vec-openai | 文本向量化 | text-embedding-3-small/large |
| text2vec-cohere | 文本向量化 | embed-v4 |
| text2vec-huggingface | 文本向量化 | 所有 HF 模型 |
| text2vec-transformers | 本地文本向量化 | 本地部署 |
| multi2vec-clip | 图文多模态 | CLIP 模型 |
| generative-openai | 生成式回答 | GPT-4o 等 |
| qna-transformers | 问答 | 本地问答模型 |
📊 Weaviate vs 其他数据库
| 功能 | Weaviate | Milvus | Qdrant | Chroma |
|---|---|---|---|---|
| 内置向量化 | ✅ 最强 | ❌ | ❌ | ✅ 基础 |
| 混合搜索 | ✅ 原生 | ✅ | ✅ | ❌ |
| GraphQL | ✅ | ❌ | ❌ | ❌ |
| 多模态 | ✅ | ❌ | ❌ | ❌ |
| 分布式 | ✅ | ✅ | 基础 | ❌ |
| 上手难度 | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | ⭐ |
| 性能 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
💡 Weaviate 适合谁?
| 场景 | 推荐度 | 理由 |
|---|---|---|
| 不想自己管理 Embedding | ⭐⭐⭐⭐⭐ | 内置向量化最成熟 |
| 需要混合搜索 | ⭐⭐⭐⭐⭐ | 原生支持,配置简单 |
| 多模态应用 | ⭐⭐⭐⭐⭐ | 唯一原生支持多模态的 |
| 超大规模(>1亿) | ⭐⭐⭐ | Milvus 更合适 |
| 极致性能要求 | ⭐⭐⭐ | Qdrant/FAISS 更强 |
🔑 本篇核心要点回顾
| 要点 | 说明 |
|---|---|
| Weaviate 定位 | 最"全能"的向量数据库 |
| 核心优势 | 内置向量化、混合搜索、多模态 |
| GraphQL API | 灵活查询,一次获取多种数据 |
| 适合场景 | 不想管 Embedding、需要混合搜索、多模态 |
| 不适合 | 超大规模、极致性能场景 |
📌 下篇预告:《六大向量数据库横评:Milvus vs Qdrant vs Chroma vs FAISS vs Weaviate vs Pinecone 🆚》
💬 有问题欢迎评论区讨论,觉得有用请点赞收藏 👍
作者:高炉炼铁智能化技术研究者,专注钢铁冶金与人工智能 交叉领域。
👍 如果觉得有帮助,请点赞、收藏、转发!
版权归作者所有,未经许可请勿抄袭,套用,商用(或其它具有利益性行为)。
🔔 关注专栏,不错过后续精彩内容

3859

被折叠的 条评论
为什么被折叠?



