← 返回博客
跳至主要内容

Weaviate 1.35 发布

·1 分钟阅读
Ivan Despot

Weaviate v1.35 现在开源并可在 Weaviate Cloud 上使用。

此版本引入了强大的新的生命周期管理功能,即对象生存时间 (TTL),并改进了备份性能,支持 zstd 压缩。我们也很高兴地宣布 Flat Index RQ 量化正式发布,并且 Java v6 客户端正式发布

此外,v1.35 带来了 使用 Weaviate Embeddings 实现的多模态嵌入,使构建文档检索应用程序比以往更容易,以及运行时可配置的 OIDC 证书,以增强安全性灵活性和数据库操作模式

这些改进有助于使 Weaviate 更灵活、性能更高且更易于大规模运行。

以下是发布 ⭐️亮点⭐️!

Weaviate 1.35 is released

对象生存时间 (TTL)

Weaviate v1.35 引入 对象生存时间 (TTL) 作为技术预览版,可以自动删除在指定时间段后创建的对象。此强大的生命周期管理功能有助于您维护干净的数据存储,遵守保留策略并降低存储成本。

TTL 可以在集合级别以三种方式配置

相对于创建时间

将对象设置为在创建后固定持续时间后过期

import datetime
from weaviate.classes.config import Configure, Property, DataType

client.collections.create(
name="SessionLogs",
properties=[
Property(name="data", data_type=DataType.TEXT),
],
object_ttl_config=Configure.ObjectTTL.delete_by_creation_time(
time_to_live=datetime.timedelta(hours=24), # Expire after 24 hours
filter_expired_objects=True, # Exclude expired objects from queries
),
)

相对于上次更新时间

将对象设置为基于上次修改时间过期

client.collections.create(
name="CacheData",
properties=[
Property(name="data", data_type=DataType.TEXT),
],
object_ttl_config=Configure.ObjectTTL.delete_by_update_time(
time_to_live=datetime.timedelta(days=7), # Expire 7 days after last update
filter_expired_objects=True,
),
)

相对于 DATE 属性

将对象设置为相对于数据中的特定日期字段过期

client.collections.create(
name="Events",
properties=[
Property(name="event_date", data_type=DataType.DATE),
Property(name="title", data_type=DataType.TEXT),
],
object_ttl_config=Configure.ObjectTTL.delete_by_date_property(
property_name="event_date",
ttl_offset=datetime.timedelta(days=30) # Expire 30 days after event_date
),
)

主要功能

  • 灵活的过期策略 - 选择适合您用例的方法
  • 可选的查询过滤 - 在删除运行之前从结果中排除已过期的对象
  • 可配置的删除计划 - 控制何时发生后台清理
  • 多租户感知 - 尊重租户活动状态
技术预览

对象 TTL 当前是自托管 Weaviate 实例的技术预览功能。它尚未在 Weaviate Cloud 实例中可用。

用例
  • 会话管理 - 自动删除过期的用户会话
  • 缓存失效 - 自动删除陈旧的缓存数据
  • 合规性 - 强制执行数据保留策略
  • 事件存档 - 在保留期后删除旧事件数据

Java v6 客户端 - 正式发布

我们很高兴地宣布 Java v6 客户端现在正式发布!这是 Java 客户端的全新重写,提供了一种现代、惯用的 API,使 Java 开发人员与 Weaviate 合作更加直观和愉快。

Java v6 中的新功能

Java v6 客户端带来了

  • 流畅、构建器风格的 API - 更易读和可维护的代码
  • 完全的 gRPC 支持 - 更高效的数据操作
  • 更好的类型安全 - 在编译时捕获错误
  • 改进的集合管理 - 更轻松的配置和操作
  • 增强的查询构建器 - 更直观的搜索操作
  • 更好的错误处理 - 清晰、可操作的错误消息

示例用法

以下是如何开始使用 Java v6

WeaviateClient client = WeaviateClient.connectToWeaviateCloud(
weaviateUrl,
weaviateApiKey
);

// Create a collection with vector configuration
client.collections.create(
"Movie",
col -> col
.vectorConfig(VectorConfig.text2VecWeaviate())
.properties(
Property.text("title"),
Property.text("description"),
Property.text("genre")
)
);

// Insert data
List<Map<String, Object>> dataObjects = List.of(
Map.of(
"title", "The Matrix",
"description", "A computer hacker learns about the true nature of reality.",
"genre", "Science Fiction"
),
Map.of(
"title", "Spirited Away",
"description", "A young girl becomes trapped in a mysterious world of spirits.",
"genre", "Animation"
)
);

CollectionHandle<Map<String, Object>> movies = client.collections.use("Movie");
movies.data.insertMany(dataObjects.toArray(new Map[0]));

// Perform a vector search
var response = movies.query.nearText("sci-fi", q -> q.limit(2));

for (var obj : response.objects()) {
System.out.println(obj.properties());
}

client.close();

Flat Index RQ 量化 - 正式发布

带有 RQ 量化的 Flat Index,在 v1.34 中作为预览版引入,现在在 Weaviate v1.35正式发布

这种强大的组合可以提供

  • 更快的查询 - 较小的向量大小可提高查询性能
  • 内存效率 - 使用 8 位或 1 位 RQ 压缩高达 4 倍 - 32 倍
  • 非常适合多租户 - 非常适合许多小型租户,其中暴力搜索足够快
  • 生产就绪 - 经过彻底测试和优化,可用于实际工作负载

量化选项

现在,Flat Index 的 8 位 RQ1 位 RQ 均已 GA

from weaviate.classes.config import Configure

# 8-bit RQ for high recall
client.collections.create(
name="ProductCatalog",
vector_config=Configure.Vectors.text2vec_openai(),
vector_index_config=Configure.VectorIndex.flat(),
quantizer=Configure.VectorIndex.Quantizer.rq(
compression_level=8 # 8-bit quantization
)
)

# 1-bit RQ for maximum compression
client.collections.create(
name="LogEmbeddings",
vector_config=Configure.Vectors.text2vec_openai(),
vector_index_config=Configure.VectorIndex.flat(),
quantizer=Configure.VectorIndex.Quantizer.rq(
compression_level=1 # 1-bit quantization
)
)
量化内存减少召回率(重分值限制 100)用例
8 位 RQ4 倍~100%高精度要求
1 位 RQ32 倍~100%最大压缩,良好的精度

Flat Index RQ 量化与动态索引无缝协作,允许租户在增长时自动升级到 HNSW。

新集合的默认压缩

Weaviate v1.35 继续优化新集合的默认设置。虽然 RQ 压缩自 v1.33 以来一直可用于 HNSW 索引,但Flat 和动态索引现在也支持默认量化设置。

设置默认量化

# Set 8-bit RQ as default for all new collections
DEFAULT_QUANTIZATION: 'rq8'

# Options: none, rq8, rq1, bq, pq, sq

这可确保您的集合之间具有一致的压缩,同时仍然允许在需要时对每个集合进行覆盖。

增强的备份压缩

Weaviate v1.35 引入了 zstd 压缩支持,用于备份,与默认的 gzip 压缩相比,提供明显更好的压缩性能。

Zstandard (zstd) 是一种现代压缩算法,具有

  • 更好的压缩比 - 更小的备份文件
  • 更快的压缩速度 - 减少备份时间
  • 更快的解压缩速度 - 更快的还原操作
  • 可调节的压缩级别 - 平衡速度和压缩
信息

zstd 压缩已添加到以下 Weaviate 版本:v1.35.0v1.34.1v1.33.6v1.32.18

可用压缩选项

# Using zstd compression
client.backup.create(
backup_id="my-backup",
backend="s3",
include_collections=["MyCollection"],
compression_level="ZstdDefaultCompression" # or ZstdBestSpeed, ZstdBestCompression
)

# Traditional gzip compression (still available)
client.backup.create(
backup_id="my-backup",
backend="s3",
include_collections=["MyCollection"],
compression_level="DefaultCompression" # or BestSpeed, BestCompression
)

# Disable compression
client.backup.create(
backup_id="my-backup",
backend="s3",
include_collections=["MyCollection"],
compression_level="NoCompression"
)

压缩级别选项

对于 zstd(Weaviate v1.35+)

  • ZstdDefaultCompression - 平衡速度和压缩
  • ZstdBestSpeed - 最快的压缩
  • ZstdBestCompression - 最大压缩比

注意: zstd 压缩在 Weaviate v1.35.0v1.34.1v1.33.6v1.32.18 或更高版本中可用。

数据库操作模式

Weaviate v1.35 引入了 操作模式,允许您控制每个节点可以处理的类型的操作。这对于以下情况特别有用:

  • 负载均衡 - 分离读写流量
  • 维护操作 - 在提供读取的同时使节点离线进行写入
  • 扩展场景 - 为查询工作负载添加只读副本
  • 备份创建 - 在不影响写入性能的情况下创建备份

可用模式

每个 Weaviate 节点可以设置为四种操作模式之一

模式描述允许的操作
ReadWrite默认模式所有读写操作
WriteOnly写入优先仅写入操作
ReadOnly读取优先读取操作 + 备份创建
ScaleOut扩展模式与 ReadOnly 相同 + 复制 CUD 操作

配置

使用 OPERATIONAL_MODE 环境变量设置运行模式

# Set node to read-only mode
OPERATIONAL_MODE: 'ReadOnly'

您还可以使用 运行时配置 功能在运行时更改运行模式

# overrides.yaml
operational_mode: ReadOnly

此功能为节点行为提供细粒度控制,从而实现更复杂的部署架构。

Weaviate Embeddings - 多模态支持

Weaviate v1.35Weaviate Embeddings 扩展到支持 多模态文档嵌入,使构建强大的文档检索应用程序更加容易。

新的 multi2multivec-weaviate 模块使您能够

  • 嵌入文档图像 - 将文档页面转换为可搜索的向量
  • 使用文本查询进行搜索 - 使用自然语言查找相关的文档页面
  • 构建 RAG 应用程序 - 为问答系统检索特定页面
  • 简化文档处理 - 无需外部嵌入服务

主要用例:文档检索

此集成针对 基于图像的文档检索进行了优化。嵌入文档页面的图像,然后使用文本查询检索相关页面

from weaviate.classes.config import Configure, Property, DataType

# Create collection for document pages
client.collections.create(
"DocumentPages",
properties=[
Property(name="title", data_type=DataType.TEXT),
Property(name="doc_page", data_type=DataType.BLOB), # Store page images
],
vector_config=[
Configure.MultiVectors.multi2vec_weaviate(
name="document",
image_field="doc_page", # Specify which property contains images
model="ModernVBERT/colmodernvbert" # Document retrieval model
)
],
)

导入文档页面

import base64

# Convert image to base64
def url_to_base64(url):
image_response = requests.get(url)
return base64.b64encode(image_response.content).decode("utf-8")

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

with collection.batch.fixed_size(batch_size=10) as batch:
for src_obj in source_objects:
page_b64 = url_to_base64(src_obj["page_img_path"])
batch.add_object(
properties={
"title": src_obj["title"],
"doc_page": page_b64 # Add page image in base64
}
)

使用文本搜索文档

# Find relevant document pages using text queries
collection = client.collections.use("DocumentPages")

response = collection.query.near_text(
query="financial statements Q3 2024",
limit=5
)

for obj in response.objects:
print(f"Found: {obj.properties['title']}")

可用模型

目前,只有一个模型可用

  • ModernVBERT/colmodernvbert - 针对视觉文档检索任务进行微调的后期交互模型

该模型专为文档检索场景而设计,能够根据文本查询提供出色的性能来查找相关页面。

主要优势

  • 无缝集成 - 与您现有的 Weaviate Cloud 凭据配合使用
  • 无需外部服务 - 嵌入由 Weaviate 直接生成
  • 针对文档优化 - 专为文档检索构建的模型
  • 多模态搜索 - 图像数据上的文本查询
仅限云端

Weaviate Embeddings(包括多模态支持)仅在 Weaviate Cloud 实例上可用。它不适用于自托管部署。

运行时可配置的 OIDC 证书

Weaviate v1.35 通过使 OIDC 身份验证设置可运行时配置来增强安全性灵活性。这意味着您现在可以在不重新启动 Weaviate 实例的情况下更新 OIDC 证书和身份验证参数。

可配置的 OIDC 参数

以下 OIDC 设置现在可以在运行时更新

  • authentication_oidc_certificate - 更新 OIDC 证书
  • authentication_oidc_client_id - 更改客户端 ID
  • authentication_oidc_groups_claim - 修改组声明
  • authentication_oidc_issuer - 更新颁发者 URL
  • authentication_oidc_jwks_url - 更改 JWKS 端点
  • authentication_oidc_scopes - 修改范围
  • authentication_oidc_skip_client_id_check - 切换客户端 ID 检查
  • authentication_oidc_username_claim - 更新用户名声明

工作原理

使用运行时配置更新 OIDC 设置,无需重新启动

# overrides.yaml
authentication_oidc_certificate: |
-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAKL0UG+mRKmzMA0GCSqGSIb3DQEBCwUA...
-----END CERTIFICATE-----
authentication_oidc_issuer: 'https://auth.example.com'
authentication_oidc_client_id: 'weaviate-client'

Weaviate 将根据您配置的 RUNTIME_OVERRIDES_LOAD_INTERVAL(默认:2 分钟)自动重新加载这些设置。

优势

  • 零停机时间更新 - 在不中断服务的情况下更新身份验证
  • 证书轮换 - 无缝轮换 OIDC 证书
  • 动态配置 - 根据运营需求调整 OIDC 设置
  • 更快的故障排除 - 快速测试不同的 OIDC 配置

此功能是 Weaviate 更广泛的运行时配置管理系统的一部分,该系统允许各种设置在运行时更新。

多项性能改进和修复

一如既往,Weaviate v1.35 包含代码库中大量的性能改进和错误修复。以下是一些亮点

  • 模块和集成:增强了向量化器和排序器模块的支持,包括 VoyageAI v3.5、Cohere dimensions 和 BaseURL 设置、Google batch API 以及 text2vec/multi2vec 模块的批量处理。
  • 复制和扩展:具有可配置的文件块大小的复制扩展功能、改进的重试逻辑、更好的错误处理以及分布式部署的增强同步功能。
  • 内部 gRPC:内部 gRPC 服务器实现作为 REST 集群 API 的等效项,具有连接管理、维护模式拦截器、gzip 压缩以及改进的文件复制方法。
  • 性能和优化:性能改进包括减少锁争用、优化的段处理、改进的内存管理、增加批量工作程序的并发性以及更好的队列工作程序利用率。
  • 错误修复:各种错误修复,解决了互斥体行为、竞争条件、恐慌预防、租户加载问题、缓存问题以及与复制快照的兼容性问题。

这些改进加起来,使 Weaviate 实例更快、更稳定、更高效。

我们始终建议运行最新版本的 Weaviate,以受益于这些持续的改进。🚀

社区贡献

Weaviate 是一个开源项目,我们始终很高兴看到我们出色的社区的贡献。感谢所有为本次发布做出贡献的人!

如果您有兴趣为 Weaviate 贡献代码,请查看我们的 贡献指南,并浏览 GitHub 上的开放问题。寻找 good-first-issue 标签,找到很好的入门点!

相关资源

总结

Weaviate v1.35 带来了生命周期管理、运营灵活性和文档检索的强大新功能,同时将关键功能从预览版移至通用可用版。

主要亮点

  • 对象 TTL - 自动对象过期和删除
  • Java v6 客户端 GA - 现代、惯用的 Java 客户端
  • Flat Index RQ GA - 生产就绪的扁平索引量化
  • 增强的备份 - zstd 压缩,用于更快、更小的备份
  • 运行模式 - 对节点行为进行细粒度控制
  • 多模态嵌入 - 使用 Weaviate Embeddings 进行文档检索
  • 运行时 OIDC - 动态身份验证配置

准备好开始了吗?

该版本在 GitHub 上作为开源提供,并且已经可在 Weaviate Cloud 上的新沙盒中使用。

对于升级自托管版本的人员,请查看 迁移指南,了解特定版本的说明。

感谢您的阅读,祝您向量搜索愉快! 👋

准备开始构建了吗?

请查看 快速入门教程,或使用 Weaviate Cloud (WCD) 的免费试用版构建令人惊叹的应用程序。

不想错过另一篇博文?

注册我们的双周时事通讯以保持更新!


提交后,我同意 服务条款 隐私政策.