Weaviate 实战:内置向量化的"全能型"数据库体验 🏋️
🔥本文是《向量数据库实战:选型、调优与落地》专栏第 10 篇
⏱️阅读时间:约 12 分钟
🎯 开篇:最"全能"的向量数据库
如果说 Milvus 是"功能最全",Qdrant 是"性能最猛",Chroma 是"最轻量"——
那Weaviate就是**最"全能"**的那个 🏋️
全能在哪?
┌─────────────────────────────────────────────────────────┐ │ Weaviate 的"全能"体现在哪 │ ├─────────────────────────────────────────────────────────┤ │ │ │ 1. 🔌 内置向量化模块 │ │ → 不需要自己调 Embedding API,直接传文本 │ │ → 支持 OpenAI、Cohere、HuggingFace 等 20+ 模型 │ │ │ │ 2. 🏗️ GraphQL API │ │ → 灵活的查询语法,一次获取多种数据 │ │ │ │ 3. 🔄 混合搜索 │ │ → 向量搜索 + BM25 关键词搜索 原生支持 │ │ │ │ 4. 📦 多模态支持 │ │ → 文本、图片、视频 统一管理 │ │ │ │ 5. 🔗 数据模块化 │ │ → 内置模块:文本向量化、图片向量化、问答生成等 │ │ │ └─────────────────────────────────────────────────────────┘🛠️ 快速启动
# Docker 启动(带内置向量化模块)dockerrun-d\-p8080:8080\-p50051:50051\-eQUERY_DEFAULTS_LIMIT=25\-eAUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true\-ePERSISTENCE_DATA_PATH=/var/lib/weaviate\-eENABLE_MODULES=text2vec-openai,generative-openai\-eOPENAI_APIKEY=sk-xxx\cr.weaviate.io/semitechnologies/weaviate:1.25.0端口说明:
| 端口 | 协议 | 用途 |
|---|---|---|
| 8080 | REST/GraphQL | HTTP 接口 |
| 50051 | gRPC | 高性能接口 |
# Python SDKpipinstallweaviate-client📝 完整实战
Step 1:连接 & 创建 Schema
importweaviate# 连接 Weaviateclient=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"},]# 批量插入withclient.batchasbatch:batch.batch_size=100forarticleinarticles: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()# 打印结果forarticleinresponse['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 🆚》
💬有问题欢迎评论区讨论,觉得有用请点赞收藏 👍
作者:高炉炼铁智能化技术研究者,专注钢铁冶金与人工智能 交叉领域。
👍 如果觉得有帮助,请点赞、收藏、转发!
版权归作者所有,未经许可请勿抄袭,套用,商用(或其它具有利益性行为)。
🔔 关注专栏,不错过后续精彩内容