DocArray 是一个专门为多模态数据的表示、传输、存储和检索而设计的 Python 库。其设计专为多模式人工智能应用程序的开发而量身定制,可保证与广泛的 Python 和机器学习生态系统的无缝集成。在 2022 年 1 月,DocArray 在 Apache License 2.0 下公开分发,并在 LF AI & Data Foundation 成为了一项沙箱项目。
GitHub 链接:https://github.com/docarray/docarray
文档链接:https://docs.docarray.org/
🆕 新功能
支持 Pydantic v2 🚀 (#1652)
最重要的功能发布是 全面支持 Pydantic V2,因为 Pydantic V2 的核心部分采用 Rust 编写,这给 DocArray 带来了显著的性能提升:
1. JSON 序列化速度提高了 240%。
2. 对于 BaseDoc 和 DocList 的非本地类型(如 TorchTensor)验证速度提高了 20%。
同时,我们仍会持续支持 Pydantic V1。如果您已升级到 Pydantic V2,可能需要对您的 DocArray 代码进行相应的调整,以适配 Pydantic v2 的新API。更多详细信息,请参考 Pydantic 的迁移指南。https://pydantic-docs.helpmanual.io/pydantic-v2-migration/。
添加 BaseDocWithoutId
(#1803)
默认情况下,BaseDoc 内置了一个 id
字段。当您构建一个不包含此 ID 字段的模型的 API 时,可能会出现问题。因此,我们现在引入了一个 BaseDocWithoutId
新字段,顾名思义,它是没有 ID 字段的 BaseDoc。
请注意,DocIndex
需要 id
字段来存储和检索文档,因此 BaseDocWithoutId
与 DocIndex
或任何需要向量数据库的功能不兼容。
所以只有当您确实不需要 ID 字段时,才应使用 BaseDocWithoutId 作为基类,如果不是,请仍然应使用 BaseDoc 作为基类。
💥 重大变更
移除 Jina AI Cloud 推送/拉取 (#1791)
由于 Jina AI Cloud 已经停止服务,我们决定移除与其相关的 DocArray Pull/Push 功能。请注意,如果您之前依赖于这一功能,可能需要寻找其他替代方案。
DocList.to_json()
和DocVec.to_json()
的返回类型更改为了统一不同类之间的
to_json
方法,DocList.to_json()
和DocVec.to_json()
现在将返回str
类型数据,而不是先前的 bytes 类型。如果您在应用中使用了这两个方法,务必更新相关代码以适应这一变更。
🐞 bug 修复
修复 DocList 订阅错误
修复了用户多次指定
DocList
类型的 bug,现在可以正常使用语法 DocListMyDoc 从 BaseDoc 键入 DocList。不再支持
DocList[MyDoc1][MyDoc2]
(#1800)解决了当用户错误地传递如 DocList[doc()] 类型到 DocList 时导致的静默失败问题。
修复
Milvus
连接参数 (#1802):修复了错误地设置
Milvus
客户端端口的问题。调整
.to_json()
方法的返回类型 (#1769):为了与
BaseDoc
的.to_json()
和其他 pydantic 模型保持一致,DocList.to_json()
和DocVec.to_json()
现在返回str
而不是bytes
。优化
reduce
辅助函数 (#1758):在
reduce
辅助函数内部添加了类型转换,使得在附加到最终结果前进行输入类型的转换,有助于处理模式兼容但不完全匹配的文档。优化类型创建 (#1777):
修复了
create_pure_python_type_model
辅助函数中的一个问题,现在在类型创建时只会考虑类的__fields__
属性。class MyDoc(BaseDoc): endpoint: ClassVar[str] = "my_endpoint" input_test: str = ""
修复避免了先前因为用户在输入类中引入
ClassVar
而导致的应用程序崩溃问题。