主题
Weaviate 向量数据库
Weaviate 是一款开源的向量数据库,支持多模态数据(文本、图像、视频等)。
为什么选择 Weaviate
- 开源(BSD 3-Clause)
- 支持多模态(文本、图像)
- 内置 Embedding 模块(无需外部调用)
- 支持 GraphQL 查询
- 支持自部署和云服务
安装(Docker)
bash
# docker-compose.yml
version: '3.4'
services:
weaviate:
image: semitechnologies/weaviate:latest
ports:
- "8080:8080"
environment:
QUERY_DEFAULTS_LIMIT: 25
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
DEFAULT_VECTORIZER_MODULE: 'text2vec-openai'
OPENAI_APIKEY: 'your-openai-key'Python SDK 使用
安装
bash
pip install weaviate-client连接和创建 Schema
python
import weaviate
# 连接
client = weaviate.Client("http://localhost:8080")
# 定义 Schema(类似数据库表结构)
class_obj = {
"class": "Document",
"description": "一篇文档",
"properties": [
{
"name": "title",
"dataType": ["text"]
},
{
"name": "content",
"dataType": ["text"]
}
],
"vectorizer": "text2vec-openai" # 自动用 OpenAI 向量化
}
client.schema.create_class(class_obj)插入数据
python
# Weaviate 会自动调用 OpenAI 进行向量化
client.data_object.create(
data_object={
"title": "RAG 技术介绍",
"content": "RAG 是检索增强生成..."
},
class_name="Document"
)搜索
python
# 语义搜索
result = (
client.query
.get("Document", ["title", "content"])
.with_near_text({"concepts": ["向量数据库"]})
.with_limit(5)
.do()
)
print(result)混合搜索(向量 + BM25)
python
result = (
client.query
.get("Document", ["title", "content"])
.with_hybrid(
query="向量数据库",
alpha=0.5 # 0=纯关键词,1=纯向量
)
.with_limit(5)
.do()
)与 LangChain 集成
python
from langchain.vectorstores import Weaviate
from langchain.embeddings import OpenAIEmbeddings
# 创建向量存储
vectorstore = Weaviate.from_texts(
texts=["文档内容1", "文档内容2"],
embedding=OpenAIEmbeddings(),
weaviate_client=client,
index_name="Document"
)
# 搜索
results = vectorstore.similarity_search("查询内容", k=5)Weaviate Cloud (WCD)
不想自部署,可以用官方云服务:
python
import weaviate
# 连接到 WCD
client = weaviate.Client(
url="https://your-cluster.weaviate.network",
auth_client_secret=weaviate.AuthApiKey(api_key="your-key")
)