DocArray 开源项目教程
项目介绍
DocArray 是一个专门为多模态数据表示、传输、存储和检索而设计的 Python 库。它旨在支持多模态 AI 应用的开发,并保证与广泛的 Python 和机器学习生态系统的无缝集成。DocArray 基于 Pydantic,并立即兼容 FastAPI 等 Web 和微服务框架。它提供对 NumPy、PyTorch、TensorFlow 和 JAX 的原生支持,特别适用于模型训练场景。
项目快速启动
安装 DocArray
首先,你需要安装 DocArray。你可以通过以下命令从命令行安装:
pip install -U docarray
创建和索引文档
以下是一个简单的示例,展示如何创建和索引文档:
from docarray import DocList, BaseDoc
from docarray.index import HnswDocumentIndex
import numpy as np
from docarray.typing import ImageUrl, ImageTensor, NdArray
class ImageDoc(BaseDoc):
url: ImageUrl
tensor: ImageTensor
embedding: NdArray[128]
# 创建一些数据
dl = DocList[ImageDoc]([
ImageDoc(
url="https://upload.wikimedia.org/wikipedia/commons/2/2f/Alpamayo.jpg",
tensor=np.zeros((3, 224, 224)),
embedding=np.random.random((128,))
) for _ in range(100)
])
# 创建一个文档索引
index = HnswDocumentIndex[ImageDoc](work_dir='/tmp/test_index2')
# 索引你的数据
index.index(dl)
应用案例和最佳实践
多模态数据检索
DocArray 的一个典型应用是多模态数据检索。以下是一个示例,展示如何使用 DocArray 进行向量相似度搜索和过滤:
from docarray import DocumentIndex
import numpy as np
# 创建一个文档索引
doc_index = DocumentIndex(index_file_path='/path/to/index')
# 构建查询
query = (
doc_index.build_query() # 获取空查询对象
.find(query=np.ones(128), search_field='embedding') # 添加向量相似度搜索
.filter(filter_query={'price': {'$gte': 2}}) # 添加过滤搜索
.build() # 构建查询
)
# 执行查询
retrieved_docs, scores = doc_index.execute_query(query)
典型生态项目
FastAPI 集成
DocArray 可以与 FastAPI 无缝集成,用于构建高性能的 Web 服务。以下是一个简单的 FastAPI 应用示例:
from fastapi import FastAPI
from docarray import DocList, BaseDoc
from docarray.typing import ImageUrl, ImageTensor, NdArray
app = FastAPI()
class ImageDoc(BaseDoc):
url: ImageUrl
tensor: ImageTensor
embedding: NdArray[128]
@app.post("/index")
async def index_documents(docs: DocList[ImageDoc]):
# 索引文档
pass
@app.get("/search")
async def search_documents(query: str):
# 搜索文档
pass
向量数据库集成
DocArray 支持多种向量数据库,如 Weaviate、Qdrant、ElasticSearch、Redis 和 HNSWLib。以下是一个与 Weaviate 集成的示例:
from docarray import DocumentIndex
from docarray.index import WeaviateDocumentIndex
# 创建一个 Weaviate 文档索引
index = WeaviateDocumentIndex(host='localhost', port=8080)
# 索引和搜索文档
pass
通过这些示例,你可以看到 DocArray 在多模态数据处理和向量数据库集成方面的强大功能。希望这些内容能帮助你快速上手并充分利用 DocArray 的潜力。