- Discord (#migrations 频道)
- Github (此处)
- 邮件列表 立即订阅
- 更改的描述及其理由。
- 一个可运行的 CLI 迁移工具。
- 使用该工具的视频演示。
迁移日志
v1.0.0 - 2025年3月1日
在此版本中,我们使用 Rust 重写了 Chroma 的大部分代码。整体性能得到了显著提升。 破坏性变更 Chroma 不再提供内置的身份验证实现。list_collections 现在恢复为返回 Collection 对象。 Chroma 进程内变更 如果您通过以下方式使用 Chroma,本节内容适用于您:chroma_server_nofilechroma_server_thread_pool_sizechroma_memory_limit_byteschroma_segment_cache_policy
chroma run) 运行 Chroma 服务器,本节内容适用于您。 之前您可能通过环境变量提供给服务器的设置,例如 CHROMA_SERVER_CORS_ALLOW_ORIGINS 或 CHROMA_OTEL_COLLECTION_ENDPOINT,现在需通过配置文件提供。例如:CHROMA_SERVER_CORS_ALLOW_ORIGINS),现在需通过配置文件提供。请参阅 Docker 文档了解更多信息。 容器中的默认数据存储位置已从 /chroma/chroma 更改为 /data。例如,如果您之前启动容器的方式是:v0.6.0 - 2024年12月30日
此前,list_collections 返回 Collection 对象列表。如果您的某些集合是使用自定义嵌入函数(即非默认函数)创建的,这可能会导致错误。因此,从现在起 list_collections 将仅返回集合名称。 例如,如果您使用 OpenAIEmbeddingFunction 创建了所有集合,以下是正确使用 list_collections 和 get_collection 的方式:list_collections 可以返回正确配置的 Collection 对象,您也不再需要在 get_collection 中提供对应的嵌入函数。 此外,我们已停止支持 Python 3.8。v0.5.17 - 2024年10月30日
我们不再支持在元数据过滤、ID 过滤等操作中发送空列表或空字典。例如:v0.5.12 - 2024年10月8日
where 子句中的运算符 $ne(不等于)和 $nin(不在...中)已更新:
- 以前:它们仅匹配包含指定键的记录。
- 现在:它们也会匹配根本不包含指定键的记录。
$ne 和 $nin 现在分别匹配 $eq(等于)和 $in(在...中)所匹配记录的补集(完全相反的集合)。 where_document 子句中的 $not_contains 运算符也已更新:- 以前:它仅匹配具有文档字段的记录。
- 现在:它也会匹配根本没有文档字段的记录。
$not_contains 现在匹配与 $contains 所匹配集合完全相反的记录集。 RateLimitingProvider 现已弃用,由 RateLimitEnforcer 取代。这个新接口允许您使用限流逻辑封装服务器调用。默认的 SimpleRateLimitEnforcer 实现允许所有请求,但您可以创建自定义实现来实现更高级的限流策略。v0.5.11 - 2024年9月26日
collection.get() 返回的结果现在按内部 ID 排序。此前,结果按用户提供的 ID 排序,尽管这一行为并未在文档中明确说明。我们决定做出此更改,因为在托管版 Chroma 中使用用户提供的 ID 可能不利于性能,且我们希望在本地 Chroma 中推广此更改以保持行为一致。通常情况下,Chroma 中较新的文档具有较大的内部 ID。 随之而来的行为变化涉及 limit 和 offset,它们依赖于返回结果的顺序。例如,如果您有一个名为 coll 的集合,按顺序插入了 ID 为 ["3", "2", "1", "0"] 的文档,以前 coll.get(limit=2, offset=2)["ids"] 会返回 ["2", "3"],而现在将返回 ["1", "0"]。 我们还修改了 client.get_or_create 的行为。以前,如果集合已存在并提供了 metadata 参数,现有集合的元数据将被新值覆盖。现在已更改:如果集合已存在,get_or_create 将仅返回具有指定名称的现有集合,任何额外参数(包括 metadata)都将被忽略。 最后,从 collection.get()、collection.query() 和 collection.peek() 返回的嵌入向量现在表示为二维 NumPy 数组,而非 Python 列表。添加嵌入向量时,您仍可以使用 Python 列表或 NumPy 数组。如果您的请求返回多个嵌入向量,结果将是一个包含二维 NumPy 数组的 Python 列表。此项更改是我们努力通过使用 NumPy 数组作为嵌入向量内部表示来提升本地 Chroma 性能的一部分。v0.5.6 - 2024年9月16日
Chroma 内部使用预写日志(WAL)。在 v0.5.6 之前的所有版本中,此日志从未被清理。这导致数据目录远大于实际需要,且删除集合后目录大小并未按预期减少。 在 v0.5.6 中,预写日志会自动清理。但是,对于现有数据库,此功能默认不开启。升级后,您应运行一次chroma utils vacuum 以减小数据库体积并启用持续清理。详见 CLI 参考。 此操作无需定期运行,也不需要在 v0.5.6 或更高版本创建的新数据库上运行。v0.5.1 - 2024年6月7日
在 Python 客户端中,max_batch_size 属性已被移除。虽然之前未在文档中说明,但如果您正在使用它,现在应改用 get_max_batch_size()。 该方法在首次运行时会发起 HTTP 请求。我们将其改为方法形式,是为了更明确地表示这可能是一个阻塞操作。身份验证系统大修 - 2024年4月20日
如果您未使用 Chroma 的内置身份验证系统,则无需执行任何操作。 此版本大修并简化了我们的身份验证(Authentication)和授权(Authorization)系统。如果您正在使用 Chroma 的内置身份验证系统,则需要更新您的配置以及编写的任何用于实现自定义身份验证或授权提供程序的代码。此项更改主要是为了解决 Chroma 的一些技术债务并使未来的更改更加容易,同时也更改并简化了用户配置。如果您没有使用 Chroma 的内置身份验证系统,则无需执行任何操作。 此前,Chroma 的身份验证和授权依赖于许多具有多种配置选项的对象,包括:chroma_server_auth_providerchroma_server_auth_configuration_providerchroma_server_auth_credentials_providerchroma_client_auth_credentials_providerchroma_client_auth_protocol_adapter
ClientAuthProviderServerAuthenticationProviderServerAuthorizationProvider
ClientAuthProvider 现在负责自身的配置和凭据管理。可以通过 chroma_client_auth_credentials 设置向其提供凭据。chroma_client_auth_credentials 的值取决于 ServerAuthenticationProvider;对于 TokenAuthenticationServerProvider,它应仅为令牌,对于 BasicAuthenticationServerProvider,它应为 username:password。 ServerAuthenticationProvider 负责将请求的授权信息转换为包含做出授权决策所需信息的 UserIdentity。它们现在负责自身的配置和凭据管理。通过 chroma_server_authn_credentials 和 chroma_server_authn_credentials_file 设置进行配置。 ServerAuthorizationProvider 负责根据请求信息和发出请求的 UserIdentity 做出授权决策。通过 chroma_server_authz_config 和 chroma_server_authz_config_file 设置进行配置。 _authn_credentials 或 authn_credentials_file 只能设置其中之一,绝不能两者同时设置。对于 authz_config 和 authz_config_file 也是如此。配置的值(或配置文件中的数据)将取决于您的 authn 和 authz 提供程序。更多信息请参阅 此处。 Chroma 附带的两种身份验证系统是 Basic 和 Token。我们为每种系统提供了简短的迁移指南。Basic 认证
如果您使用Token 认证,您的服务器配置可能如下所示:
AUTH_CREDENTIALS 和 AUTH_CREDENTIALS_FILE 只能设置其中之一,但本指南展示了如何迁移两者。 以及对应的客户端配置:Token 认证
如果您使用Token 认证,您的服务器配置可能如下所示:
AUTH_CREDENTIALS 和 AUTH_CREDENTIALS_FILE 只能设置其中之一,但本指南展示了如何迁移两者。 以及对应的客户端配置:已更改配置项的参考
- 整体配置
chroma_client_auth_token_transport_header:重命名为chroma_auth_token_transport_header。chroma_server_auth_token_transport_header:重命名为chroma_auth_token_transport_header。
- 客户端配置
chroma_client_auth_credentials_provider:已删除。功能现集成在chroma_client_auth_provider中。chroma_client_auth_protocol_adapter:已删除。功能现集成在chroma_client_auth_provider中。chroma_client_auth_credentials_file:已删除。功能现集成在chroma_client_auth_credentials中。- 这些更改也适用于 Typescript 客户端。
- 服务器身份验证 (authn)
chroma_server_auth_provider:重命名为chroma_server_authn_provider。chroma_server_auth_configuration_provider:已删除。功能现集成在chroma_server_authn_provider中。chroma_server_auth_credentials_provider:已删除。功能现集成在chroma_server_authn_provider中。chroma_server_auth_credentials_file:重命名为chroma_server_authn_credentials_file。chroma_server_auth_credentials:重命名为chroma_server_authn_credentials。chroma_server_auth_configuration_file:重命名为chroma_server_authn_configuration_file。
- 服务器授权 (authz)
chroma_server_authz_ignore_paths:已删除。功能现集成在chroma_server_auth_ignore_paths中。
迁移至 0.4.16 - 2023年11月7日
此版本增加了对多模态嵌入的支持,并相应更改了EmbeddingFunction 的定义。此项更改主要影响那些实现了自定义 EmbeddingFunction 类的用户。如果您使用的是 Chroma 的内置嵌入函数,则无需采取任何操作。 EmbeddingFunction 此前,EmbeddingFunction 的定义为:EmbeddingFunction 的定义为:
EmbeddingFunction现在是泛型的,接受一个类型参数D,它是Embeddable的子类型。这允许我们定义可以嵌入多种模态的EmbeddingFunction。__call__现在只接受一个参数input,以支持任何类型D的数据。texts参数已被移除。
从 >0.4.0 迁移至 0.4.0 - 2023年7月17日
此版本有哪些新功能?- 创建客户端的新简便方式
- 更改了存储方式
.persist()已移除,.reset()不再默认开启
.Client() 方法。如果您想关闭遥测,所有客户端都支持自定义设置:
duckdb 和 clickhouse,转而使用 sqlite 进行元数据存储。这意味着需要迁移数据。我们为此创建了一个迁移 CLI 工具。 如果您升级到 0.4.0 并尝试以旧方式访问存储的数据,您将看到以下错误消息:
您正在使用已弃用的 Chroma 配置。请运行 pip install chroma-migrate 并执行 chroma-migrate 来升级您的配置。更多信息请参阅 https://docs.chroma.org.cn/deployment/migration 或加入我们的 Discord https://discord.gg/MMeYNTmh3x 获取帮助!
以下是如何安装和使用该 CLI:
.persist() 存在于旧版本 Chroma 中,因为当时写入操作只有在强制执行时才会刷新到磁盘。Chroma 0.4.0 会立即将所有写入保存到磁盘,因此不再需要 persist。 用于重置整个数据库的 .reset() 以前默认是开启的,这感觉不太安全。0.4.0 默认将其禁用。您可以通过向 Settings 对象传递 allow_reset=True 来重新启用它。例如: