Weaviate 是一个开源、云原生、模块化、实时的向量搜索引擎,支持存储数据对象与向量嵌入,并基于相似度进行查询。在本教程中,我们将带您了解 Weaviate 及其核心概念,学习如何进行安装配置、创建架构(schema)、导入数据,并通过 Weaviate 的 GraphQL 接口查询数据。我们还将介绍如何在 Python 中使用 Weaviate,并分享有关架构设计、数据导入与查询优化的最佳实践与技巧。
什么是 Weaviate?
Weaviate 是一款同时存储对象与向量的向量数据库,可用于进行向量搜索。它具备模块化、云原生与实时能力,便于扩展机器学习模型。Weaviate 提供可选模块,覆盖文本、图像及其他媒体类型,您可根据具体任务与数据类型选择使用。也可以同时启用多个模块,以适配多样化的数据。
理解嵌入(Embeddings)
非结构化数据(如文本、图像与音频)缺少预定义格式,传统数据库与方法难以有效处理。
为使这些数据能用于 AI 与机器学习应用,需要通过嵌入将其转换为数值向量。
嵌入就像一种“专用词典”,可以把高维数据转化为紧凑的数值表示,便于 AI 模型高效处理。
它们对于降低数据维度、克服传统编码方法的局限至关重要,使 AI 能够理解数据中的复杂关系与上下文。
文本嵌入模型 - 图片来源
理解向量数据库
传统数据库将数据存储在表中,并通过 SQL 查询。然而,SQL 并不适合检索文本或图像等非结构化数据。相比之下,向量数据库 将数据存储为向量,并可通过相似度度量进行查询。
这使其非常适用于语义搜索、问答与生成式搜索等任务。向量来源于机器学习的嵌入模型,本质上是原始对象(如文本、图像、音频、视频等)的数值表示。
设想这样一个场景:使用语言模型来分析与分类大量文本文档。每份文档都可被转换为一个高维向量,以封装其语义要点。
若将这些向量存入传统数据库,在执行相似度搜索或聚类等任务时效率可能并不理想。
这正是向量数据库的用武之地。它针对向量存储与高速向量运算进行了优化,例如查找最近邻或计算向量间的余弦相似度。
图片来源
Pinecone 是另一款广受欢迎的向量数据库,是 Weaviate 的优秀替代方案。若想进一步了解 Pinecone,请查看《Pinecone 向量数据库精通教程》 。
如何搭建 Weaviate
搭建 Weaviate 可使用 Docker Compose 或手动安装。推荐使用 Docker Compose,因为它能简化安装流程。完成安装后,您可以通过运行一个简单的查询来验证安装是否成功。
对于 Docker Compose,请从 Weaviate 下载此yaml 文件 。有了该文件后,直接运行:
docker compose up - d技术支持
使用 Weaviate 的其他方式包括:
在 Python 中使用 Weaviate,您可以通过 pip 安装 weaviate 的 Python 客户端。
!pip install - U weaviate- client技术支持
Weaviate 的核心概念
数据对象
在 Weaviate 中,每个数据项都隶属于一个称为“Class(类)”的分组,并具有若干称为“Properties(属性)”的特征。这些数据项(以 JSON 文档表示)构成基于类的集合。
每个数据项都由一个向量(来自机器学习嵌入模型)表示。每个基于类的集合包含相同类的对象,这些对象由一个通用的 schema 定义。
模块
Weaviate 以灵活的方式构建,允许您添加可选功能,如向量化数据或创建备份等。
在没有这些附加组件的情况下,Weaviate 的基础版本就是一个专为向量数据设计的数据库。
图片来源
存储
Weaviate 是一个可靠的数据库,具备即时持久化能力,并能应对软件与硬件故障。
当您基于向量执行搜索时,Weaviate 返回的是完整的数据项(在其他数据库中有时称为“文档”),而不仅仅是一个诸如 ID 的标识符。
如果同时进行常规与向量化搜索,过滤器会在向量搜索之前应用,确保您获得与请求数量严格匹配的结果。这不同于先搜索后过滤的方式,后者返回的结果数量可能会变化。
即使在读取数据库时,您也可以自由更新或删除数据及其向量。
GraphQL
您可以通过 Weaviate 的 API 进行交互,其中包括 RESTful API 与 GraphQL API。各编程语言的客户端库均兼容这些 API 功能。
GraphQL 是一种用于 API 的查询语言,允许您精确请求所需的数据。相较于传统如 REST 的方式,它提供了更高效、更灵活的数据库交互方法。
选择 GraphQL 接口的原因包括:
它支持通过交叉引用连接 Weaviate 中的数据,使图查询语言(如 GraphQL)在此场景下极具效果。
GraphQL 消除了数据过取(over-fetching)或欠取(under-fetching)的问题,仅返回您请求的特定信息,从而提升性能。
它简化流程,并且更不易出错。
在 Weaviate 中创建类
每个 Weaviate 对象都属于一个类。您可以手动创建类,或使用 Weaviate 的 Auto-schema 自动创建。手动创建类时,您对数据模型拥有更高的掌控力。
使用 Python 客户端库创建类:
class_name = "Item description"
class_object = { "class" : class_name}
client. schema. create_class( class_object) 技术支持
通常您还会指定其他配置,更贴近实战的示例如 Weaviate.io 所示:
{
"class" : "Article" ,
"vectorizer" : "text2vec-cohere" ,
"vectorIndexConfig" : {
"distance" : "cosine" ,
} ,
"moduleConfig" : {
"generative-openai" : { }
} ,
"properties" : [
{
"name" : "title" ,
"dataType" : [ "text" ]
} ,
{
"name" : "chunk" ,
"dataType" : [ "text" ]
} ,
{
"name" : "chunk_no" ,
"dataType" : [ "int" ]
} ,
{
"name" : "url" ,
"dataType" : [ "text" ] ,
"tokenization" : "field"
} ,
] ,
}
技术支持
请注意,向量化模型 text2vec-cohere 与距离度量 cosine 已被定义。属性以字典列表的形式进行定义。
在 Weaviate 中创建对象
对象隶属于某个类。对象可以省略类中已有的属性,也可以新增属性。下面是向 Article 类添加对象的示例。
uuid = client. data_object. create( {
'question' : 'question here ...' ,
'answer' : 'answer here ...'
} , 'Article' ) 技术支持
您也可以为每个对象显式指定一个向量。如果未定义向量,Weaviate 会使用其默认向量化器。
uuid = client. data_object. create(
data_object= {
'question' : 'question here ...' ,
'answer' : 'answer here ...' ,
} ,
class_name= 'Article' ,
vector= [ 0.12345 ] * 1536 技术支持
使用 Python 客户端在 Weaviate 中创建并使用向量数据库的端到端示例
以下示例展示了如何创建类并通过 Weaviate 的 Python 客户端向类中添加对象。在此之前,您需要先通过 pip 安装 Python 客户端。
!pip install - U weaviate- client技术支持
要使用 Weaviate,您需要一个可用的 Weaviate 实例。可以通过两种方式实现:其一是在 Weaviate云服务 上使用全托管的托管实例;或使用嵌入式 Weaviate,在您的应用后台运行实例。
import weaviate
from weaviate. embedded import EmbeddedOptions
import json
import os
client = weaviate. Client(
embedded_options= EmbeddedOptions( ) ,
additional_headers = {
"X-OpenAI-Api-Key" : "YOUR_OPENAI_KEY"
}
)
技术支持
创建类非常直接:
class_obj = {
"class" : "Question" ,
"vectorizer" : "text2vec-openai" ,
"moduleConfig" : {
"text2vec-openai" : { } ,
"generative-openai" : { }
}
}
client. schema. create_class( class_obj)
技术支持
如果将向量化器设置为 None,则需要您自行以列表形式提供向量。
现在我们可以通过批量导入(batch import)方式,向刚创建的 Question 类添加对象。我们将使用 JSON 格式的 Jeopardy 问答 数据。其内容如下所示:
数据来源 (致谢:Weaviate 官方)
import requests
url = 'https://raw.githubusercontent.com/weaviate-tutorials/quickstart/main/data/jeopardy_tiny.json'
resp = requests. get( url)
data = json. loads( resp. text)
with client. batch(
batch_size= 100
) as batch:
for i, d in enumerate ( data) :
print ( f"importing question: { i+ 1 } " )
properties = {
"answer" : d[ "Answer" ] ,
"question" : d[ "Question" ] ,
"category" : d[ "Category" ] ,
}
client. batch. add_data_object(
properties,
"Question" ,
)
技术支持
该示例参考自 Weaviate 的文档 。
Weaviate 的最佳实践与提示
下面我们来看看如何更高效地使用 Weaviate 的一些实用建议。无论您是在设计 schema、导入数据,还是优化查询,这些最佳实践都将帮助您充分发挥 Weaviate 的能力。
Schema 设计
将 schema 设计得灵活且可扩展 。这样可以在无需修改 schema 的情况下添加新属性或调整现有属性。
为每个实体与动作使用唯一标识符 。这将使查询更容易,并避免重复。
使用语义类型定义实体与动作的属性 。这将使查询更便捷,并确保整个 schema 的一致性。
数据导入
使用批量导入功能高效添加数据 。这允许您一次性导入大量数据,避免性能问题。
使用 RESTful API 进行数据添加 。这有助于实现导入流程自动化,并与其他工具集成。
使用受支持的数据格式,如 JSON 或 CSV 。这可确保数据正确导入并避免错误。
查询优化
使用 Weaviate 的 GraphQL 接口查询数据 。这能帮助您执行复杂查询,并基于特定条件筛选数据。
使用分页限制每次查询返回的数据量 。这将提升性能并减轻服务器负载。
使用缓存存储常用数据 。这将提升性能并减少查询次数。
ChromaDB 是数据科学社区中另一款流行的开源向量数据库。借助 Chroma DB,您可以轻松管理文本文档、将文本转换为嵌入,并执行相似度搜索。若想了解更多,请查看《Chroma DB 教程》 。
结语
本 Weaviate 教程为您全面介绍并指导如何使用 Weaviate——一款开源、云原生、实时的向量搜索引擎。本文覆盖广泛主题,从 Weaviate 的基本概念与其与传统数据库的差异,到安装配置与高效使用的细节。
Weaviate 在通过向量嵌入处理非结构化数据方面表现出色,是机器学习与 AI 应用的强大工具。其模块化架构提供了灵活性,允许您根据具体需求选择可选模块。文章还阐释了嵌入的重要性,说明其如何将高维数据转化为 AI 模型易于处理的格式。
如果您希望继续学习 Weaviate,欢迎观看我们的网络研讨会:使用 Python 与 Weaviate 构建数据科学向量数据库 。
Weaviate 是一个开源、云原生、模块化、实时的向量搜索引擎,支持存储数据对象与向量嵌入,并基于相似度进行查询。在本教程中,我们将带您了解 Weaviate 及其核心概念,学习如何进行安装配置、创建架构(schema)、导入数据,并通过 Weaviate 的 GraphQL 接口查询数据。我们还将介绍如何在 Python 中使用 Weaviate,并分享有关架构设计、数据导入与查询优化的最佳实践与技巧。
什么是 Weaviate?
Weaviate 是一款同时存储对象与向量的向量数据库,可用于进行向量搜索。它具备模块化、云原生与实时能力,便于扩展机器学习模型。Weaviate 提供可选模块,覆盖文本、图像及其他媒体类型,您可根据具体任务与数据类型选择使用。也可以同时启用多个模块,以适配多样化的数据。
理解嵌入(Embeddings)
非结构化数据(如文本、图像与音频)缺少预定义格式,传统数据库与方法难以有效处理。
为使这些数据能用于 AI 与机器学习应用,需要通过嵌入将其转换为数值向量。
嵌入就像一种“专用词典”,可以把高维数据转化为紧凑的数值表示,便于 AI 模型高效处理。
它们对于降低数据维度、克服传统编码方法的局限至关重要,使 AI 能够理解数据中的复杂关系与上下文。
文本嵌入模型 - 图片来源
理解向量数据库
传统数据库将数据存储在表中,并通过 SQL 查询。然而,SQL 并不适合检索文本或图像等非结构化数据。相比之下,向量数据库将数据存储为向量,并可通过相似度度量进行查询。
这使其非常适用于语义搜索、问答与生成式搜索等任务。向量来源于机器学习的嵌入模型,本质上是原始对象(如文本、图像、音频、视频等)的数值表示。
设想这样一个场景:使用语言模型来分析与分类大量文本文档。每份文档都可被转换为一个高维向量,以封装其语义要点。
若将这些向量存入传统数据库,在执行相似度搜索或聚类等任务时效率可能并不理想。
这正是向量数据库的用武之地。它针对向量存储与高速向量运算进行了优化,例如查找最近邻或计算向量间的余弦相似度。
图片来源
Pinecone 是另一款广受欢迎的向量数据库,是 Weaviate 的优秀替代方案。若想进一步了解 Pinecone,请查看《Pinecone 向量数据库精通教程》。
如何搭建 Weaviate
搭建 Weaviate 可使用 Docker Compose 或手动安装。推荐使用 Docker Compose,因为它能简化安装流程。完成安装后,您可以通过运行一个简单的查询来验证安装是否成功。
对于 Docker Compose,请从 Weaviate 下载此yaml 文件。有了该文件后,直接运行:
使用 Weaviate 的其他方式包括:
在 Python 中使用 Weaviate,您可以通过 pip 安装 weaviate 的 Python 客户端。
Weaviate 的核心概念
数据对象
在 Weaviate 中,每个数据项都隶属于一个称为“Class(类)”的分组,并具有若干称为“Properties(属性)”的特征。这些数据项(以 JSON 文档表示)构成基于类的集合。
每个数据项都由一个向量(来自机器学习嵌入模型)表示。每个基于类的集合包含相同类的对象,这些对象由一个通用的 schema 定义。
模块
Weaviate 以灵活的方式构建,允许您添加可选功能,如向量化数据或创建备份等。
在没有这些附加组件的情况下,Weaviate 的基础版本就是一个专为向量数据设计的数据库。
图片来源
存储
Weaviate 是一个可靠的数据库,具备即时持久化能力,并能应对软件与硬件故障。
当您基于向量执行搜索时,Weaviate 返回的是完整的数据项(在其他数据库中有时称为“文档”),而不仅仅是一个诸如 ID 的标识符。
如果同时进行常规与向量化搜索,过滤器会在向量搜索之前应用,确保您获得与请求数量严格匹配的结果。这不同于先搜索后过滤的方式,后者返回的结果数量可能会变化。
即使在读取数据库时,您也可以自由更新或删除数据及其向量。
GraphQL
您可以通过 Weaviate 的 API 进行交互,其中包括 RESTful API 与 GraphQL API。各编程语言的客户端库均兼容这些 API 功能。
GraphQL 是一种用于 API 的查询语言,允许您精确请求所需的数据。相较于传统如 REST 的方式,它提供了更高效、更灵活的数据库交互方法。
选择 GraphQL 接口的原因包括:
在 Weaviate 中创建类
每个 Weaviate 对象都属于一个类。您可以手动创建类,或使用 Weaviate 的
Auto-schema自动创建。手动创建类时,您对数据模型拥有更高的掌控力。使用 Python 客户端库创建类:
通常您还会指定其他配置,更贴近实战的示例如 Weaviate.io 所示:
请注意,向量化模型
text2vec-cohere与距离度量cosine已被定义。属性以字典列表的形式进行定义。在 Weaviate 中创建对象
对象隶属于某个类。对象可以省略类中已有的属性,也可以新增属性。下面是向
Article类添加对象的示例。您也可以为每个对象显式指定一个向量。如果未定义向量,Weaviate 会使用其默认向量化器。
使用 Python 客户端在 Weaviate 中创建并使用向量数据库的端到端示例
以下示例展示了如何创建类并通过 Weaviate 的 Python 客户端向类中添加对象。在此之前,您需要先通过 pip 安装 Python 客户端。
要使用 Weaviate,您需要一个可用的 Weaviate 实例。可以通过两种方式实现:其一是在 Weaviate云服务上使用全托管的托管实例;或使用嵌入式 Weaviate,在您的应用后台运行实例。
创建类非常直接:
如果将向量化器设置为
None,则需要您自行以列表形式提供向量。现在我们可以通过批量导入(batch import)方式,向刚创建的
Question类添加对象。我们将使用 JSON 格式的 Jeopardy 问答 数据。其内容如下所示:数据来源(致谢:Weaviate 官方)
该示例参考自 Weaviate 的文档。
Weaviate 的最佳实践与提示
下面我们来看看如何更高效地使用 Weaviate 的一些实用建议。无论您是在设计 schema、导入数据,还是优化查询,这些最佳实践都将帮助您充分发挥 Weaviate 的能力。
Schema 设计
数据导入
查询优化
ChromaDB 是数据科学社区中另一款流行的开源向量数据库。借助 Chroma DB,您可以轻松管理文本文档、将文本转换为嵌入,并执行相似度搜索。若想了解更多,请查看《Chroma DB 教程》。
结语
本 Weaviate 教程为您全面介绍并指导如何使用 Weaviate——一款开源、云原生、实时的向量搜索引擎。本文覆盖广泛主题,从 Weaviate 的基本概念与其与传统数据库的差异,到安装配置与高效使用的细节。
Weaviate 在通过向量嵌入处理非结构化数据方面表现出色,是机器学习与 AI 应用的强大工具。其模块化架构提供了灵活性,允许您根据具体需求选择可选模块。文章还阐释了嵌入的重要性,说明其如何将高维数据转化为 AI 模型易于处理的格式。
如果您希望继续学习 Weaviate,欢迎观看我们的网络研讨会:使用 Python 与 Weaviate 构建数据科学向量数据库。