
我们搜索和关联数据的方式正在发生变化。现在,你搜索“舒适的阅读角落”时,得到的搜索结果不再是包含“舒适”和“角落”,而是会显示壁炉旁软椅的图片。这种方法专注于语义搜索,即寻找数据的含义,而不是依赖于僵化的关键词搜索。这是一个至关重要的过渡阶段,因为非结构化数据(图像、文本、视频)已经呈爆炸式增长,而传统数据库对于 AI 的需求水平来说已经越来越不切实际。
这正是 Weaviate 的切入点,它使自己成为矢量数据库领域的领导者。凭借其独特的功能和能力,Weaviate 正在改变企业使用基于 AI 的洞察和数据的方式。在本文中,我们将通过代码示例和实际应用来探讨 Weaviate 为何能够改变行业格局。

Weaviate是什么?
Weaviate 是一个开源向量数据库,专门用于存储和处理以向量表示的高维数据,例如文本、图像或视频。Weaviate 允许企业轻松进行语义搜索、创建推荐引擎并构建 AI 模型。
Weaviate 专注于智能数据检索,而非依赖传统的基于每行存储的列来检索精确数据的数据库。它使用基于机器学习的向量嵌入,根据语义查找数据点之间的关系,而不是搜索精确的数据匹配。
Weaviate 提供了一种构建运行 AI 模型的应用程序的简便方法,这些模型需要快速高效地处理海量数据才能构建模型。Weaviate 中向量嵌入的存储和检索功能使其成为处理非结构化数据的公司的理想选择。
Weaviate的核心原则和架构

Weaviate 的核心理念是处理高维数据,并利用高效可扩展的向量搜索。让我们来看看其架构背后的构建模块和原则:
- AI 原生和模块化:Weaviate 旨在从一开始就将机器学习模型集成到架构中,为其提供一流的支持,能够开箱即用地生成各种数据类型的嵌入(向量)。模块化设计提供了多种可能性,确保您可以在 Weaviate 之上构建系统,添加任何自定义功能,或连接/调用外部系统。
- 分布式系统:该数据库设计为能够水平扩展。Weaviate 是分布式且无领导的,这意味着没有单点故障。跨节点的高可用性冗余意味着,如果发生故障,数据将从多个连接的节点复制并生成。它具有最终一致性,因此适用于云原生以及其他环境。
- 基于图:Weaviate 模型是一种基于图的数据模型。对象(向量)通过它们之间的关系连接起来,这使得存储和查询具有复杂关系的数据变得非常简单,这在推荐系统等应用中至关重要。
- 向量存储:Weaviate 旨在将您的数据存储为向量(对象的数值表示)。这对于支持 AI 的搜索、推荐引擎以及所有其他与人工智能/机器学习相关的用例而言都是理想的选择。
Weaviate入门:动手指南
无论您是构建语义搜索引擎、聊天机器人还是推荐系统,本快速入门都将向您展示如何连接到 Weaviate、提取向量化内容并提供智能搜索功能,最终通过 OpenAI 模型的检索增强生成 (RAG) 生成上下文感知的答案。
先决条件
确保已安装最新版本的 Python。如果没有,请使用以下命令安装:
sudo apt update sudo apt install python3 python3-pip -y
创建并激活虚拟环境:
python3 -m venv weaviate-env Source weaviate-env/bin/activate
使用上述代码后,您的 shell 提示符将以新的环境变量为前缀,例如 weaviate-env,表示您的环境已启用。
步骤 1:部署Weaviate
部署 Weaviate 有两种方法:
选项 1:使用 Weaviate 云服务
部署 Weaviate 的一种方法是使用其云服务:
- 首先,访问 https://console.weaviate.cloud/。
- 然后,注册并选择 OpenAI 模块创建一个集群。
另请记下您的 WEAVIATE_URL(类似于 https://xyz.weaviate.network)和 WEAVIATE_API_KEY。
选项 2:使用 Docker Compose 本地运行
创建 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: './data' DEFAULT_VECTORIZER_MODULE: 'text2vec-openai' ENABLE_MODULES: 'text2vec-openai,generative-openai' OPENAI_APIKEY: 'your-openai-key-here'
使用 OpenAI 模块和匿名访问配置 Weaviate 容器。
使用以下命令启动它:
docker-compose up -d
这将以分离模式(在后台运行)启动 Weaviate 服务器。
步骤 2:安装Python依赖项
要安装程序所需的所有依赖项,请在操作系统的命令行中运行以下命令:
pip install weaviate-client openai
这将安装 Weaviate Python 客户端和 OpenAI 库。
步骤 3:设置环境变量
export WEAVIATE_URL="https://<your-instance>.weaviate.network" export WEAVIATE_API_KEY="<your-weaviate-key>" export OPENAI_API_KEY="<your-openai-key>"
对于本地部署,无需 WEAVIATE_API_KEY(无需授权)。
步骤 4:连接到Weaviate
import os
import weaviate
from weaviate.classes.init import Auth
client = weaviate.connect_to_weaviate_cloud(
cluster_url=os.getenv("WEAVIATE_URL"),
auth_credentials=Auth.api_key(os.getenv("WEAVIATE_API_KEY")),
headers={"X-OpenAI-Api-Key": os.getenv("OPENAI_API_KEY")}
)
assert client.is_ready(), " Weaviate not ready"
print(" Connected to Weaviate")
上述代码使用凭证连接您的 Weaviate 云实例,并确认服务器已启动且可访问。
对于本地实例,请使用:
client = weaviate.Client("http://localhost:8080")
这将连接到本地 Weaviate 实例。
步骤 5:使用嵌入和生成支持定义模式
schema = {
"classes": [
{
"class": "Question",
"description": "QA dataset",
"properties": [
{"name": "question", "dataType": ["text"]},
{"name": "answer", "dataType": ["text"]},
{"name": "category", "dataType": ["string"]}
],
"vectorizer": "text2vec-openai",
"generative": {"module": "generative-openai"}
}
]
}
定义一个名为 Question 的模式,它具有属性以及基于 OpenAI 的向量和生成模块。
client.schema.delete_all() # Clear previous schema (if any)
client.schema.create(schema)
print(" Schema defined")
输出:
![]()
上述语句将架构上传至 Weaviate 并确认上传成功。
步骤 6:批量插入示例数据
data = [
{"question":"Only mammal in Proboscidea order?","answer":"Elephant","category":"ANIMALS"},
{"question":"Organ that stores glycogen?","answer":"Liver","category":"SCIENCE"}
]
创建一个小型 QA 数据集:
with client.batch as batch: batch.batch_size = 20 for obj in data: batch.add_data_object(obj, "Question")
以批处理模式插入数据以提高效率:
print(f"Indexed {len(data)} items")
输出:
![]()
确认已编入索引的项目数量。
步骤 7:使用nearText进行语义搜索
res = (
client.query.get("Question", ["question", "answer", "_additional {certainty}"])
.with_near_text({"concepts": ["largest elephant"], "certainty": 0.7})
.with_limit(2)
.do()
)
使用文本向量对“最大的大象”等概念进行语义搜索。仅返回确定性≥0.7且最多2个结果。
print(" Semantic search results:")
for item in res["data"]["Get"]["Question"]:
q, a, c = item["question"], item["answer"], item["_additional"]["certainty"]
print(f"- Q: {q} → A: {a} (certainty {c:.2f})")
输出:

显示结果及确定性分数。
步骤 8:检索增强生成 (RAG)
rag = (
client.query.get("Question", ["question", "answer"])
.with_near_text({"concepts": ["animal that weighs a ton"]})
.with_limit(1)
.with_generate(single_result=True)
.do()
)
进行语义搜索并要求 Weaviate 使用 OpenAI(通过生成)生成响应。
generated = rag["data"]["Get"]["Question"][0]["generate"]["singleResult"]
print(" RAG answer:", generated)
输出:
![]()
根据 Weaviate DB 中最接近的匹配打印生成的答案。
Weaviate的主要功能

Weaviate 拥有诸多特殊功能,使其在大多数基于向量的数据管理任务中拥有灵活而强大的优势。
- 向量搜索:Weaviate 可以将数据存储和查询为向量嵌入,从而进行语义搜索;由于它基于语义而非简单的关键词匹配来查找相似的数据点,因此提高了准确性。
- 混合搜索:通过将向量搜索和传统的基于关键词的搜索相结合,Weaviate 可以提供更具针对性和情境化的结果,同时为各种用例提供更大的灵活性。
- 可扩展的基础架构:Weaviate 能够使用单节点和分布式部署模型运行;它可以水平扩展以支持超大型数据集,并确保性能不受影响。
- AI 原生架构:Weaviate 旨在与机器学习模型协同工作,支持直接生成嵌入,无需借助其他平台或外部工具。
- 开源:作为开源平台,Weaviate 允许一定程度的定制、集成,甚至允许用户在其持续开发过程中做出贡献。
- 可扩展性:Weaviate 通过模块和插件支持可扩展性,使用户能够从各种机器学习模型和外部数据源进行集成。
Weaviate与竞争对手对比
下表重点介绍了 Weaviate 与矢量数据库领域部分竞争对手的主要差异化优势。
| 特性 | Weaviate | Pinecone | Milvus | Qdrant |
|---|---|---|---|---|
| 开源 | 是 | 否 | 是 | 是 |
| 混合搜索 | 是(向量 + 关键词搜索) | 否 | 是(向量 + 元数据搜索) | 是(向量 + 元数据搜索) |
| 分布式架构 | 是 | 是 | 是 | 是 |
| 预置 AI 模型支持 | 是(内置 ML 模型集成) | 否 | 否 | 否 |
| 云原生集成 | 是 | 是 | 是 | 是 |
| 数据复制 | 是 | 否 | 是 | 是 |
如上表所示,Weaviate 是唯一提供混合搜索的矢量数据库,能够同时进行矢量搜索和基于关键词的搜索。因此,搜索选项更加丰富。Weaviate 是开源的,而 Pinecone 是专有的。Weaviate 的开源优势和透明库为用户提供了丰富的定制选项。
尤其值得一提的是,Weaviate 将机器学习技术集成到数据库中,使其解决方案与竞争对手的解决方案显著区分开来。
小结
Weaviate 是一款领先的矢量数据库,拥有革命性的 AI 原生架构,旨在处理高维数据,同时融入机器学习模型。Weaviate 的混合数据和搜索功能以及其开源特性,为各行各业的 AI 应用提供了强大的解决方案。Weaviate 的可扩展性和高性能使其能够继续成为非结构化数据的领先解决方案。从推荐引擎、聊天机器人到语义搜索引擎,Weaviate 充分释放其先进功能的潜力,帮助开发者增强其 AI 应用。对 AI 解决方案的需求必将持续增长;因此,Weaviate 在矢量数据库领域的重要性将日益凸显,并通过其处理复杂数据集的能力从根本上影响该领域的未来。


评论留言