向量数据库实战:选型、调优与落地~系列文章10:Weaviate 实战:内置向量化的“全能型“数据库体验

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

端口说明

端口协议用途
8080REST/GraphQLHTTP 接口
50051gRPC高性能接口
# 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 其他数据库

功能WeaviateMilvusQdrantChroma
内置向量化✅ 最强✅ 基础
混合搜索✅ 原生
GraphQL
多模态
分布式基础
上手难度⭐⭐⭐⭐⭐⭐⭐⭐
性能⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

💡 Weaviate 适合谁?

场景推荐度理由
不想自己管理 Embedding⭐⭐⭐⭐⭐内置向量化最成熟
需要混合搜索⭐⭐⭐⭐⭐原生支持,配置简单
多模态应用⭐⭐⭐⭐⭐唯一原生支持多模态的
超大规模(>1亿)⭐⭐⭐Milvus 更合适
极致性能要求⭐⭐⭐Qdrant/FAISS 更强

🔑 本篇核心要点回顾

要点说明
Weaviate 定位最"全能"的向量数据库
核心优势内置向量化、混合搜索、多模态
GraphQL API灵活查询,一次获取多种数据
适合场景不想管 Embedding、需要混合搜索、多模态
不适合超大规模、极致性能场景

📌 下篇预告:《六大向量数据库横评:Milvus vs Qdrant vs Chroma vs FAISS vs Weaviate vs Pinecone 🆚》

💬 有问题欢迎评论区讨论,觉得有用请点赞收藏 👍

作者:高炉炼铁智能化技术研究者,专注钢铁冶金与人工智能 交叉领域。

👍 如果觉得有帮助,请点赞、收藏、转发!
版权归作者所有,未经许可请勿抄袭,套用,商用(或其它具有利益性行为)
🔔 关注专栏,不错过后续精彩内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

段一凡-华北理工大学

感谢鼓励,继续努力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值