核心功能
Weaviate 是 Go 编写的开源向量数据库,把对象和向量存在同一个库里,检索能直接叠加结构化字段过滤。它内置 vectorizer 与 generative 模块,导入时自动向量化,查询时可直接产出 RAG 结果。适合想少写胶水代码的团队;相比纯向量存取的同类,它更像自带模型集成的检索层。
功能亮点
导入自动向量化
集合配好 text2vec 模块后直接 ingest 原始文本,无需自己调模型
一次调用出 RAG
generate.near_text 传 grouped_task,检索与生成一次返回
一致性可调
读写都能选 ONE、QUORUM 或 ALL,默认 QUORUM 按 n/2+1 计算
原生多租户
租户可设为 active、inactive 或 offloaded 以释放闲置资源
适用场景
• 企业知识库问答,文档导入后由 text2vec 模块自动向量化并用 near_text 做语义召回
• 多租户 SaaS 的检索后端,按租户隔离数据并把闲置租户设为 offloaded 释放资源
• 电商语义搜索,向量召回结果再按品类、库存等结构化属性二次过滤
安装配置
bash
Docker(默认配置单容器): docker run -p 8080:8080 -p 50051:50051 cr.weaviate.io/semitechnologies/weaviate:1.38.8 Docker Compose(官方 quickstart 的 Weaviate + Ollama 组合,需先把官方给出的 docker-compose.yml 保存到项目目录): docker compose up -d docker compose exec ollama ollama pull nomic-embed-text docker compose exec ollama ollama pull llama3.2 Python 客户端: pip install -U "weaviate-client[agents]" 说明:8080 是 HTTP 端口,50051 是 gRPC 端口。镜像标签会随版本更新,请以官方安装页当前给出的 tag 为准。Weaviate 默认开启遥测数据收集,可按官方文档关闭。
使用方法
python
建集合并导入数据(导入时由 Ollama 模块完成向量化):
import weaviate
from weaviate.classes.config import Configure
with weaviate.connect_to_local() as client:
movies = client.collections.create(
name="Movie",
vector_config=Configure.Vectors.text2vec_ollama(
api_endpoint="http://ollama:11434",
model="nomic-embed-text",
),
)
data_objects = [
{"title": "The Matrix", "description": "A computer hacker learns about the true nature of reality.", "genre": "Science Fiction"},
{"title": "Spirited Away", "description": "A young girl becomes trapped in a mysterious world of spirits.", "genre": "Animation"},
]
movies = client.collections.use("Movie")
movies.data.ingest(data_objects)
语义检索(nearText):
import weaviate
import json
with weaviate.connect_to_local() as client:
movies = client.collections.use("Movie")
response = movies.query.near_text(
query="sci-fi",
limit=2
)
for obj in response.objects:
print(json.dumps(obj.properties, indent=2))
检索加生成(RAG):
import weaviate
from weaviate.classes.generate import GenerativeConfig
with weaviate.connect_to_local() as client:
movies = client.collections.use("Movie")
response = movies.generate.near_text(
query="sci-fi",
limit=1,
grouped_task="Write a tweet with emojis about this movie.",
generative_provider=GenerativeConfig.ollama(
api_endpoint="http://ollama:11434",
model="llama3.2",
),
)
print(response.generative.text)关键指标
尚未核验对标产品,此处只列本工具自身指标,不做对比结论。
指标Weaviate
价格免费
开源是
上手难度进阶
相关工具
优点
- 对象与向量存在同一数据库,官方描述其定位就是把向量检索与结构化过滤结合
- 读写一致性可逐请求在 ONE / QUORUM / ALL 之间调整,集群元数据另用 Raft 保证强一致
- 内置 text2vec、generative 等模块,导入自动向量化、查询直接出 RAG 结果,省掉外部向量化服务
- 官方维护 Python、JavaScript/TypeScript、Go、Java、C# 五种客户端,服务同时开放 HTTP 与 gRPC
缺点
- 读一致性级别只影响返回对象的版本,官方明确即使设为 ALL 也不会查询多个副本再合并结果列表
- 副本修复只在读取时触发(repair-on-read),节点处于不一致状态时用 ONE 级别读可能拿到过期数据
- 多租户下租户状态变更与数据操作各自独立执行,设为 inactive 或 offloaded 后数据仍可能有一段时间可查
- 默认开启遥测数据收集,需要按文档手动 opt-out