跳至主要内容
前往文档
⌘U
Weaviate 数据库

使用 Weaviate 的 APIs 和工具开发 AI 应用

部署

部署、配置和维护 Weaviate 数据库

Weaviate Agents

使用 Weaviate 构建和部署智能代理

Weaviate Cloud

在云端管理和扩展 Weaviate

更多资源

集成
贡献者指南
活动 & 工作坊
Weaviate Academy

需要帮助?

Weaviate Logo询问 AI 助手⌘K
社区论坛

使用 Weaviate 的 NVIDIA 多模态嵌入

v1.28.5v1.29.0 中添加

Weaviate 与 NVIDIA 的 API 集成使您可以直接从 Weaviate 访问其模型的功能。

配置 Weaviate 向量索引 以使用 NVIDIA 嵌入模型,Weaviate 将使用指定的模型和您的 NVIDIA NIM API 密钥生成各种操作的嵌入。此功能称为向量化器

数据导入 时,Weaviate 生成多模态对象嵌入并将其保存到索引中。对于 向量混合 搜索操作,Weaviate 将文本查询转换为嵌入。 多模态搜索操作 也受支持。

Embedding integration illustration

要求

Weaviate 配置

您的 Weaviate 实例必须配置为使用 NVIDIA 向量化器集成 (multi2vec-nvidia) 模块。

对于 Weaviate Cloud (WCD) 用户

此集成在 Weaviate Cloud (WCD) 实例上默认启用。

对于自托管用户

API 凭证

您必须向 Weaviate 提供有效的 NVIDIA NIM API 密钥才能进行此集成。请访问 NVIDIA 注册并获取 API 密钥。

使用以下方法之一向 Weaviate 提供 API 密钥

  • 设置可供 Weaviate 使用的 NVIDIA_APIKEY 环境变量。
  • 在运行时提供 API 密钥,如下所示。
py docs  API 文档
更多信息文档中的代码片段反映了最新的客户端库和 Weaviate 数据库版本。请查看 发行说明 以获取特定版本。

如果某个片段无法工作或您有任何反馈,请打开一个 GitHub issue
import weaviate
from weaviate.classes.init import Auth
import os

# Recommended: save sensitive data as environment variables
nvidia_key = os.getenv("NVIDIA_APIKEY")
headers = {
"X-NVIDIA-Api-Key": nvidia_key,
}

client = weaviate.connect_to_weaviate_cloud(
cluster_url=weaviate_url, # `weaviate_url`: your Weaviate URL
auth_credentials=Auth.api_key(weaviate_key), # `weaviate_key`: your Weaviate API key
headers=headers
)

# Work with Weaviate

client.close()

配置向量化器

按照以下步骤配置 Weaviate 索引 以使用 NVIDIA 嵌入模型

py docs  API 文档
更多信息文档中的代码片段反映了最新的客户端库和 Weaviate 数据库版本。请查看 发行说明 以获取特定版本。

如果某个片段无法工作或您有任何反馈,请打开一个 GitHub issue
from weaviate.classes.config import Configure, DataType, Multi2VecField, Property

client.collections.create(
"DemoCollection",
properties=[
Property(name="title", data_type=DataType.TEXT),
Property(name="poster", data_type=DataType.BLOB),
],
vector_config=[
Configure.Vectors.multi2vec_nvidia(
name="title_vector",
# Define the fields to be used for the vectorization - using image_fields, text_fields
image_fields=[
Multi2VecField(name="poster", weight=0.9)
],
text_fields=[
Multi2VecField(name="title", weight=0.1)
],
)
],
# Additional parameters not shown
)

选择一个模型

您可以为向量化器指定一个 可用模型,如以下配置示例所示。

py docs  API 文档
更多信息文档中的代码片段反映了最新的客户端库和 Weaviate 数据库版本。请查看 发行说明 以获取特定版本。

如果某个片段无法工作或您有任何反馈,请打开一个 GitHub issue
from weaviate.classes.config import Configure, DataType, Multi2VecField, Property

client.collections.create(
"DemoCollection",
properties=[
Property(name="title", data_type=DataType.TEXT),
Property(name="poster", data_type=DataType.BLOB),
],
vector_config=[
Configure.Vectors.multi2vec_nvidia(
name="title_vector",
model="nvidia/nvclip",
# Define the fields to be used for the vectorization - using image_fields, text_fields
image_fields=[
Multi2VecField(name="poster", weight=0.9)
],
text_fields=[
Multi2VecField(name="title", weight=0.1)
],
)
],
# Additional parameters not shown
)

您可以 指定 Weaviate 使用的 可用模型。如果没有指定模型,则使用 默认模型

向量化行为

Weaviate 遵循集合配置和一组预定义的规则来向量化对象。


除非在集合定义中另有说明,否则默认行为是


  • 仅向量化使用 texttext[] 数据类型的属性(除非 跳过
  • 在连接值之前,按字母顺序 (a-z) 对属性进行排序
  • 如果 vectorizePropertyNametrue (默认值为 false),则将属性名称前缀添加到每个属性值
  • 用空格连接(前缀)属性值
  • 前缀类名(除非 vectorizeClassNamefalse
  • 将生成的字符串转换为小写

向量化器参数

以下示例演示如何配置 NVIDIA 特定的选项。

py docs  API 文档
更多信息文档中的代码片段反映了最新的客户端库和 Weaviate 数据库版本。请查看 发行说明 以获取特定版本。

如果某个片段无法工作或您有任何反馈,请打开一个 GitHub issue
from weaviate.classes.config import Configure, DataType, Multi2VecField, Property

client.collections.create(
"DemoCollection",
properties=[
Property(name="title", data_type=DataType.TEXT),
Property(name="poster", data_type=DataType.BLOB),
],
vector_config=[
Configure.Vectors.multi2vec_nvidia(
name="title_vector",
# Define the fields to be used for the vectorization - using image_fields, text_fields
image_fields=[
Multi2VecField(name="poster", weight=0.9)
],
text_fields=[
Multi2VecField(name="title", weight=0.1)
],
# Further options
# model="nvidia/nvclip",
)
],
# Additional parameters not shown
)

有关模型参数的更多详细信息,请参阅 NVIDIA NIM API 文档

数据导入

配置向量化器后,导入数据 到 Weaviate。Weaviate 将使用指定的模型为文本对象生成嵌入。

py docs  API 文档
更多信息文档中的代码片段反映了最新的客户端库和 Weaviate 数据库版本。请查看 发行说明 以获取特定版本。

如果某个片段无法工作或您有任何反馈,请打开一个 GitHub issue
collection = client.collections.use("DemoCollection")

with collection.batch.fixed_size(batch_size=200) as batch:
for src_obj in source_objects:
poster_b64 = url_to_base64(src_obj["poster_path"])
weaviate_obj = {
"title": src_obj["title"],
"poster": poster_b64 # Add the image in base64 encoding
}

# The model provider integration will automatically vectorize the object
batch.add_object(
properties=weaviate_obj,
# vector=vector # Optionally provide a pre-obtained vector
)
重用现有向量

如果您已经有兼容的模型向量可用,您可以将其直接提供给 Weaviate。这在您已经使用相同的模型生成了嵌入并希望在 Weaviate 中使用它们(例如,从另一个系统迁移数据)时很有用。

搜索

配置向量化器后,Weaviate 将使用指定的 NVIDIA 模型执行向量和混合搜索操作。

Embedding integration at search illustration

当您执行 向量搜索 时,Weaviate 将文本查询转换为嵌入,使用指定的模型,并返回数据库中最相似的对象。

以下查询返回数据库中 n 个最相似的对象,由 limit 设置。

py docs  API 文档
更多信息文档中的代码片段反映了最新的客户端库和 Weaviate 数据库版本。请查看 发行说明 以获取特定版本。

如果某个片段无法工作或您有任何反馈,请打开一个 GitHub issue
collection = client.collections.use("DemoCollection")

response = collection.query.near_text(
query="A holiday film", # The model provider integration will automatically vectorize the query
limit=2
)

for obj in response.objects:
print(obj.properties["title"])
什么是混合搜索?

混合搜索执行向量搜索和关键字 (BM25) 搜索,然后 组合结果 以返回数据库中最佳匹配的对象。

当您执行 混合搜索 时,Weaviate 将文本查询转换为嵌入,使用指定的模型,并返回数据库中得分最高的对象。

以下查询返回数据库中 n 个得分最高的对象,由 limit 设置。

py docs  API 文档
更多信息文档中的代码片段反映了最新的客户端库和 Weaviate 数据库版本。请查看 发行说明 以获取特定版本。

如果某个片段无法工作或您有任何反馈,请打开一个 GitHub issue
collection = client.collections.use("DemoCollection")

response = collection.query.hybrid(
query="A holiday film", # The model provider integration will automatically vectorize the query
limit=2
)

for obj in response.objects:
print(obj.properties["title"])

当您执行媒体搜索(例如 近图像搜索)时,Weaviate 将查询转换为嵌入,使用指定的模型,并返回数据库中最相似的对象。

要执行近媒体搜索(例如近图像搜索),请将媒体查询转换为 base64 字符串并将其传递给搜索查询。

以下查询返回数据库中与输入图像最相似的 n 个对象,由 limit 设置。

py docs  API 文档
更多信息文档中的代码片段反映了最新的客户端库和 Weaviate 数据库版本。请查看 发行说明 以获取特定版本。

如果某个片段无法工作或您有任何反馈,请打开一个 GitHub issue
def url_to_base64(url):
import requests
import base64

image_response = requests.get(url)
content = image_response.content
return base64.b64encode(content).decode("utf-8")


collection = client.collections.use("DemoCollection")

query_b64 = url_to_base64(src_img_path)

response = collection.query.near_image(
near_image=query_b64,
limit=2,
return_properties=["title", "release_date", "tmdb_id", "poster"] # To include the poster property in the response (`blob` properties are not returned by default)
)

for obj in response.objects:
print(obj.properties["title"])

参考

可用模型

您可以将 NVIDIA NIM APIs 上的任何多模态嵌入模型 与 Weaviate 一起使用

默认模型是 nvidia/nvclip

更多资源

其他集成

代码示例

配置完集成后,Weaviate 中的数据管理和搜索操作与任何其他集合的工作方式相同。请参阅以下非模型特定的示例

外部资源

问题和反馈

如果您有任何问题或反馈,请在 用户论坛 中告诉我们。