vectordb
是一个 Pythonic 矢量数据库,提供一整套 CRUD(创建、读取、更新、删除)操作和强大的可扩展性选项,包括分片和复制。它可以轻松部署在从本地到本地和云的各种环境中。 vectordb
正是您所需要的——不多也不少。它证明了有效的 Pythonic 设计,无需过度设计,使其成为满足您所有需求的精益而强大的解决方案。
vectordb
利用了 DocArray 强大的检索能力以及 Jina 的可扩展性、可靠性和服务能力。神奇之处在于:DocArray 充当驱动向量搜索逻辑的引擎,而 Jina 则保证高效且可扩展的索引服务。这种协同作用最终带来了强大且用户友好的矢量数据库体验 - 这就是适合您的vectordb
。
pip 安装矢量数据库
vectordb
入门首先使用 DocArray 数据类语法定义文档模式:
from docarray import BaseDocfrom docarray.typing import NdArrayclass ToyDoc(BaseDoc): text: str = '' 嵌入:NdArray[128]
选择预构建的数据库(例如InMemoryExactNNVectorDB
或HNSWVectorDB
),并应用架构:
from docarray import DocListimport numpy as npfrom vectordb import InMemoryExactNNVectorDB, HNSWVectorDB# 指定工作空间路径db = InMemoryExactNNVectorDB[ToyDoc](workspace='./workspace_path')# 为随机嵌入的文档列表建立索引doc_list = [ToyDoc(text=f'toy doc) {我}', embedding=np.random.rand(128)) for i in range(1000)]db.index(inputs=DocList[ToyDoc](doc_list))# 执行搜索查询query = ToyDoc(text='query', embedding=np .random.rand(128))结果 = db.search(inputs=DocList[ToyDoc]([query]), limit=10)# 打印输出 results[0].matches 中 m 的匹配项: print(m)
由于我们发出了单个查询,因此results
仅包含一个元素。最近邻搜索结果方便地存储在.matches
属性中。
vectordb
作为服务vectordb
被设计为可以轻松地作为服务使用,支持gRPC
、 HTTP
和Websocket
通信协议。
在服务器端,您将按如下方式启动服务:
使用 db.serve(protocol='grpc', port=12345,replicas=1, shards=1) 作为服务:service.block()
此命令使用具有1
副本和1
分片的gRPC
协议在端口12345
上将vectordb
作为服务启动。
在客户端,您可以使用以下命令访问该服务:
from vectordb import Client# 实例化连接到服务器的客户端。实际中,将0.0.0.0替换为服务器IP地址。 client = Client[ToyDoc](address='grpc://0.0.0.0:12345')# 执行搜索查询results = client.search(inputs=DocList[ToyDoc] ([查询]),限制=10)
这允许您执行搜索查询,直接从远程vectordb
服务接收结果。
vectordb
您可以将您的vectordb
实例无缝部署到智纳AI云,这确保从任何位置访问您的数据库。
首先将数据库实例或类嵌入到 Python 文件中:
# example.pyfrom docarray import BaseDocfrom vectordb import InMemoryExactNNVectorDBdb = InMemoryExactNNVectorDB[ToyDoc](workspace='./vectordb') # 注意 `db` 是我们想要服务的实例 if __name__ == '__main__':# 重要:确保使用 __main__ Guardwith db.serve() as service:service.block() 来保护这部分代码
接下来,请按照以下步骤部署您的实例:
如果您还没有注册,请注册 Jina AI Cloud 帐户。
使用jc
命令行登录您的Jina AI Cloud帐户:
登录
部署您的实例:
vectordb部署--db示例:db
部署完成后,使用vectordb
Client访问指定的端点:
from vectordb import Client# 将 ID 替换为您部署的数据库的 ID,如上面的屏幕截图所示 c = Client(address='grpcs://ID.wolf.jina.ai')
然后,您可以使用jc
命令列出、暂停、恢复或删除已部署的数据库:
jcloud list ID
jcloud pause ID
或jcloud resume ID
jcloud remove ID
向量数据库充当复杂的嵌入存储库,捕获不同对象之间语义相似性的本质。这些数据库促进了跨多种多模式数据类型的相似性搜索,为信息检索的新时代铺平了道路。通过提供上下文理解和丰富生成结果,矢量数据库极大地增强了语言学习模型(LLM)的性能和实用性。这强调了它们在数据科学和机器学习应用的发展中的关键作用。
vectordb
中的本地库使用和客户端-服务器交互共享相同的 API。这提供了index
、 search
、 update
和delete
功能:
index
:接受DocList
进行索引。
search
:将批量查询的DocList
或单个BaseDoc
作为单个查询。它返回单个或多个结果,每个结果都具有按relevance
排序的matches
和scores
属性。
delete
:接受要从索引中删除的文档的DocList
。只有id
属性是必需的,因此如果需要删除文档,请确保跟踪indexed
IDs
。
update
:接受要在索引中更新的文档的DocList
。 update
操作将使用输入文档中的属性和有效负载替换具有相同索引的indexed
文档。
您可以使用以下参数提供vectordb
并从客户端访问它:
协议:服务协议。它可以是gRPC
、 HTTP
、 websocket
或它们的组合,以列表形式提供。默认是gRPC
。
port:服务访问端口。可以是每个提供的协议的端口列表。默认值为 8081。
工作空间:VectorDB保存所需数据的路径。默认为“.” (当前目录)。
使用vectordb
提供或部署矢量数据库时,您可以设置两个缩放参数:
分片:数据分片的数量。这可以改善延迟,因为vectordb
确保文档仅在其中一个分片中建立索引。搜索请求被发送到所有分片并且结果被合并。
副本:数据库副本的数量。 vectordb
使用RAFT算法来同步每个分片的副本之间的索引。这提高了服务可用性和搜索吞吐量,因为多个副本可以并行响应更多搜索请求,同时允许 CRUD 操作。注意:在 JCloud 部署中,副本数设置为 1。我们正在努力在云中启用复制。
以下是每种VectorDB
类型的参数:
该数据库对嵌入执行详尽的搜索,并且具有有限的配置设置:
workspace
:保存所需数据的文件夹。
InMemoryExactNNVectorDB[MyDoc](workspace='./vectordb')InMemoryExactNNVectorDB[MyDoc].serve(workspace='./vectordb')
该数据库采用 HNSWLib 中的 HNSW(分层可导航小世界)算法进行近似最近邻搜索。它提供了几个配置选项:
workspace
:指定存储和保留所需数据的目录。
此外,HNSWVectorDB 提供了一组配置,允许调整最近邻搜索算法的性能和准确性。这些配置的详细描述可以在 HNSWLib README 中找到:
space
:指定用于空间的相似性度量(选项为“l2”、“ip”或“cosine”)。默认值为“l2”。
max_elements
:设置索引的初始容量,可以动态增加。默认值为 1024。
ef_construction
:此参数控制索引构建期间的速度/准确性权衡。默认值为 200。
ef
:该参数控制查询时间/准确性的权衡。默认值为 10。
M
:此参数定义图中传出连接的最大数量。默认值为 16。
allow_replace_deleted
:如果设置为True
,则允许用新添加的元素替换已删除的元素。默认值为False
。
num_threads
:这设置index
和search
操作期间要使用的默认线程数。默认值为 1。
vectordb
包含一个简单的 CLI,用于服务和部署数据库:
描述 | 命令 |
---|---|
在本地为您的数据库提供服务 | vectordb serve --db example:db |
在金娜AI云上部署您的数据库 | vectordb deploy --db example:db |
用户友好的界面:对于vectordb
,简单性是关键。其直观的界面旨在适应不同专业水平的用户。
简约设计: vectordb
包含了所有必需的功能,没有不必要的复杂性。它确保从本地部署到服务器和云部署的无缝过渡。
全面的 CRUD 支持:从索引和搜索到更新和删除, vectordb
涵盖了整个 CRUD 操作范围。
DB 即服务:通过vectordb
利用 gRPC、HTTP 和 Websocket 协议的强大功能。它使您能够为数据库提供服务并高效地执行插入或搜索操作。
可扩展性:体验vectordb
部署功能的原始力量,包括强大的可扩展性功能,如分片和复制。通过分片改善服务延迟,而复制则提高可用性和吞吐量。
云部署:使用 Jina AI Cloud 在云中部署您的服务变得轻而易举。更多部署选项即将推出!
无服务器能力: vectordb
可以在云端以无服务器模式部署,确保根据您的需求实现最佳的资源利用率和数据可用性。
多种 ANN 算法: vectordb
提供近似最近邻 (ANN) 算法的多种实现。以下是当前的产品,即将推出更多集成:
InMemoryExactNNVectorDB(精确神经网络搜索):实现简单的最近邻算法。
HNSWVectorDB(基于 HNSW):利用 HNSWLib
矢量数据库的未来看起来很光明,我们有雄心勃勃的计划!以下是我们目前正在开发的功能的概览:
更多 ANN 搜索算法:我们的目标是支持更广泛的 ANN 搜索算法。
增强的过滤功能:我们正在努力增强我们的 ANN 搜索解决方案以支持高级过滤。
可定制性:我们的目标是使vectordb
高度可定制,使Python开发人员能够轻松地根据自己的特定需求定制其行为。
扩展无服务器容量:我们正在努力增强云中vectordb
的无服务器容量。虽然我们目前支持 0 到 1 个副本之间的扩展,但我们的目标是将其扩展到 0 到 N 个副本。
扩展的部署选项:我们正在积极致力于促进跨各种云平台部署vectordb
,并提供广泛的选项。
需要vectordb
帮助吗?有兴趣使用它,但需要某些功能来满足您的独特需求?请随时与我们联系。加入我们的 Discord 社区,与我们和其他社区成员聊天。
VectorDB 项目由 Jina AI 支持并在 Apache-2.0 下获得许可。非常感谢社区的贡献!如果您对新功能或改进有任何想法,我们很乐意听取您的意见。我们一直在寻找使vectordb
更加用户友好和有效的方法。