模块与向量化 #
本章详细介绍 Weaviate 的模块系统和向量化功能。
模块系统概述 #
text
Weaviate 模块架构:
┌─────────────────────────────────────────────────────────────┐
│ Weaviate 核心 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 模块层 │ │
│ │ │ │
│ │ 向量化模块 生成模块 其他模块 │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │text2vec │ │generative│ │ qna │ │ │
│ │ │ -openai │ │ -openai │ │ -openai │ │ │
│ │ │ -cohere │ │ -cohere │ │ │ │ │
│ │ │ -palm │ │ -palm │ │reranker │ │ │
│ │ │ -hugging │ │ │ │ -cohere │ │ │
│ │ │ face │ │ │ │ │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
向量化模块 #
text2vec-openai #
python
import weaviate.classes as wvc
articles = client.collections.create(
name="Article",
vectorizer_config=wvc.config.Configure.Vectorizer.text2vec_openai(
model="text-embedding-3-small",
model_version="latest",
type="text",
vectorize_class_name=False,
base_url="https://api.openai.com/v1"
),
properties=[
wvc.config.Property(
name="title",
data_type=wvc.config.DataType.TEXT,
skip_vectorization=False
),
wvc.config.Property(
name="content",
data_type=wvc.config.DataType.TEXT,
skip_vectorization=False
),
wvc.config.Property(
name="category",
data_type=wvc.config.DataType.TEXT,
skip_vectorization=True
)
]
)
OpenAI 模型选择 #
text
OpenAI Embedding 模型:
text-embedding-3-small:
├── 维度: 1536 (可配置)
├── 性价比高
├── 适合大规模应用
└── 推荐用于大多数场景
text-embedding-3-large:
├── 维度: 3072 (可配置)
├── 更高精度
├── 成本较高
└── 推荐用于高精度需求
text-embedding-ada-002:
├── 维度: 1536
├── 旧版模型
└── 仍可使用
维度配置 #
python
articles = client.collections.create(
name="Article",
vectorizer_config=wvc.config.Configure.Vectorizer.text2vec_openai(
model="text-embedding-3-small",
dimensions=512
),
properties=[
wvc.config.Property(name="title", data_type=wvc.config.DataType.TEXT),
wvc.config.Property(name="content", data_type=wvc.config.DataType.TEXT)
]
)
text2vec-cohere #
python
articles = client.collections.create(
name="Article",
vectorizer_config=wvc.config.Configure.Vectorizer.text2vec_cohere(
model="embed-multilingual-v3.0",
truncate="END",
vectorize_class_name=False
),
properties=[
wvc.config.Property(name="title", data_type=wvc.config.DataType.TEXT),
wvc.config.Property(name="content", data_type=wvc.config.DataType.TEXT)
]
)
Cohere 模型选择 #
text
Cohere Embedding 模型:
embed-english-v3.0:
├── 维度: 1024
├── 英文优化
└── 适合英文内容
embed-multilingual-v3.0:
├── 维度: 1024
├── 多语言支持
└── 推荐用于中文
embed-english-light-v3.0:
├── 维度: 384
├── 轻量级英文
└── 适合快速检索
embed-multilingual-light-v3.0:
├── 维度: 384
├── 轻量级多语言
└── 适合大规模应用
text2vec-huggingface #
python
articles = client.collections.create(
name="Article",
vectorizer_config=wvc.config.Configure.Vectorizer.text2vec_huggingface(
model="sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2",
options={
"waitForModel": True,
"useGPU": False,
"useCache": True
}
),
properties=[
wvc.config.Property(name="title", data_type=wvc.config.DataType.TEXT),
wvc.config.Property(name="content", data_type=wvc.config.DataType.TEXT)
]
)
推荐的 HuggingFace 模型 #
text
推荐的 HuggingFace 模型:
多语言模型:
├── paraphrase-multilingual-MiniLM-L12-v2
│ └── 维度: 384,支持 50+ 语言
├── paraphrase-multilingual-mpnet-base-v2
│ └── 维度: 768,更高精度
└── distiluse-base-multilingual-cased-v1
└── 维度: 768,15 种语言
中文模型:
├── shibing624/text2vec-base-chinese
│ └── 维度: 768,中文优化
└── DMetaSoul/sbert-chinese-general-v2
└── 维度: 768,通用中文
英文模型:
├── all-MiniLM-L6-v2
│ └── 维度: 384,快速
└── all-mpnet-base-v2
└── 维度: 768,高精度
text2vec-palm #
python
articles = client.collections.create(
name="Article",
vectorizer_config=wvc.config.Configure.Vectorizer.text2vec_palm(
model_id="textembedding-gecko@latest",
project_id="your-project-id"
),
properties=[
wvc.config.Property(name="title", data_type=wvc.config.DataType.TEXT),
wvc.config.Property(name="content", data_type=wvc.config.DataType.TEXT)
]
)
img2vec-neural #
python
images = client.collections.create(
name="Image",
vectorizer_config=wvc.config.Configure.Vectorizer.img2vec_neural(
image_paths=["media"]
),
properties=[
wvc.config.Property(name="image", data_type=wvc.config.DataType.BLOB),
wvc.config.Property(name="description", data_type=wvc.config.DataType.TEXT)
]
)
multi2vec-clip #
python
multimodal = client.collections.create(
name="Multimodal",
vectorizer_config=wvc.config.Configure.Vectorizer.multi2vec_clip(
image_fields=["image"],
text_fields=["description"]
),
properties=[
wvc.config.Property(name="image", data_type=wvc.config.DataType.BLOB),
wvc.config.Property(name="description", data_type=wvc.config.DataType.TEXT)
]
)
生成模块 #
generative-openai #
python
articles = client.collections.create(
name="Article",
vectorizer_config=wvc.config.Configure.Vectorizer.text2vec_openai(),
generative_config=wvc.config.Configure.Generative.openai(
model="gpt-4",
max_tokens=1000,
temperature=0.7
),
properties=[
wvc.config.Property(name="title", data_type=wvc.config.DataType.TEXT),
wvc.config.Property(name="content", data_type=wvc.config.DataType.TEXT)
]
)
生成式搜索 #
python
articles = client.collections.get("Article")
response = articles.generate.near_text(
query="向量数据库",
limit=3,
grouped_task="总结这些文章的主要内容"
)
print(f"Summary: {response.generated}")
for obj in response.objects:
print(f"- {obj.properties['title']}")
单对象生成 #
python
response = articles.generate.near_text(
query="向量数据库",
limit=3,
single_prompt="为这篇文章写一个简短的摘要: {title} - {content}"
)
for obj in response.objects:
print(f"Title: {obj.properties['title']}")
print(f"Generated: {obj.generated}")
generative-cohere #
python
articles = client.collections.create(
name="Article",
vectorizer_config=wvc.config.Configure.Vectorizer.text2vec_cohere(),
generative_config=wvc.config.Configure.Generative.cohere(
model="command",
max_tokens=1000,
temperature=0.7
),
properties=[
wvc.config.Property(name="title", data_type=wvc.config.DataType.TEXT),
wvc.config.Property(name="content", data_type=wvc.config.DataType.TEXT)
]
)
重排序模块 #
reranker-cohere #
python
articles = client.collections.create(
name="Article",
vectorizer_config=wvc.config.Configure.Vectorizer.text2vec_openai(),
reranker_config=wvc.config.Configure.Reranker.cohere(
model="rerank-multilingual"
),
properties=[
wvc.config.Property(name="title", data_type=wvc.config.DataType.TEXT),
wvc.config.Property(name="content", data_type=wvc.config.DataType.TEXT)
]
)
使用重排序 #
python
articles = client.collections.get("Article")
response = articles.query.near_text(
query="向量数据库教程",
limit=10,
rerank=True
)
for obj in response.objects:
print(f"- {obj.properties['title']}")
print(f" Rerank score: {obj.metadata.rerank_score}")
问答模块 #
qna-openai #
python
documents = client.collections.create(
name="Document",
vectorizer_config=wvc.config.Configure.Vectorizer.text2vec_openai(),
properties=[
wvc.config.Property(name="title", data_type=wvc.config.DataType.TEXT),
wvc.config.Property(name="content", data_type=wvc.config.DataType.TEXT)
]
)
documents.data.insert({
"title": "Weaviate 简介",
"content": "Weaviate 是一个云原生向量数据库,支持语义搜索和 RAG 应用。它使用 Go 语言编写,支持 GraphQL 查询。"
})
问答查询 #
python
documents = client.collections.get("Document")
response = documents.generate.near_text(
query="Weaviate 是什么",
limit=1,
grouped_task="回答问题: Weaviate 使用什么语言编写?"
)
print(f"Answer: {response.generated}")
模块配置 #
Docker Compose 配置 #
yaml
version: '3.8'
services:
weaviate:
image: cr.weaviate.io/semitechnologies/weaviate:1.25.0
ports:
- "8080:8080"
- "50051:50051"
environment:
QUERY_DEFAULTS_LIMIT: 25
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
DEFAULT_VECTORIZER_MODULE: 'text2vec-openai'
ENABLE_MODULES: 'text2vec-openai,text2vec-cohere,generative-openai,reranker-cohere'
OPENAI_APIKEY: 'your-openai-api-key'
COHERE_APIKEY: 'your-cohere-api-key'
CLUSTER_HOSTNAME: 'node1'
volumes:
- weaviate_data:/var/lib/weaviate
volumes:
weaviate_data:
查看可用模块 #
python
meta = client.get_meta()
print("Available modules:")
for module_name, module_info in meta.get("modules", {}).items():
print(f" - {module_name}")
运行时配置 #
python
articles = client.collections.create(
name="Article",
vectorizer_config=wvc.config.Configure.Vectorizer.text2vec_openai(
model="text-embedding-3-small"
),
module_config={
"text2vec-openai": {
"model": "text-embedding-3-small",
"modelVersion": "latest",
"type": "text"
}
},
properties=[
wvc.config.Property(name="title", data_type=wvc.config.DataType.TEXT),
wvc.config.Property(name="content", data_type=wvc.config.DataType.TEXT)
]
)
模块最佳实践 #
向量化模块选择 #
text
向量化模块选择指南:
OpenAI text-embedding-3-small:
├── 适合: 大多数应用
├── 优点: 性价比高,效果好
└── 缺点: 需要付费 API
Cohere embed-multilingual:
├── 适合: 多语言应用
├── 优点: 多语言支持好
└── 缺点: 需要付费 API
HuggingFace:
├── 适合: 自托管、成本敏感
├── 优点: 免费,可自托管
└── 缺点: 需要自己部署
自定义向量:
├── 适合: 特殊需求
├── 优点: 完全控制
└── 缺点: 需要自己管理
性能优化 #
text
模块性能优化:
1. 跳过不需要向量化的属性
└── skip_vectorization=True
2. 使用合适的模型
└── 平衡精度和成本
3. 批量操作
└── 使用 batch 插入
4. 缓存配置
└── 启用模型缓存
5. 异步处理
└── 大规模数据异步导入
小结 #
本章介绍了 Weaviate 的模块系统:
- 向量化模块(OpenAI、Cohere、HuggingFace、PaLM)
- 生成模块(OpenAI、Cohere)
- 重排序模块(Cohere)
- 问答模块
- 模块配置和最佳实践
下一步 #
继续学习 索引与性能,了解如何优化 Weaviate 的性能!
最后更新:2026-04-04