向量IO
该库使用向量数据集的通用格式,可以轻松地从所有向量数据库导出和导入数据。
通过在此投票中投票/评论来请求支持某个向量数据库
查看贡献部分,为您喜欢的向量数据库添加支持。
支持的向量数据库
完全支持
向量数据库 | 导入 | 导出 |
---|---|---|
Pinecone | ✅ | ✅ |
Qdrant | ✅ | ✅ |
Milvus | ✅ | ✅ |
GCP Vertex AI 向量搜索 | ✅ | ✅ |
KDB.AI | ✅ | ✅ |
LanceDB | ✅ | ✅ |
DataStax Astra DB | ✅ | ✅ |
Chroma | ✅ | ✅ |
Turbopuffer | ✅ | ✅ |
部分支持
向量数据库 | 导入 | 导出 |
---|
进行中
向量数据库 | 导入 | 导出 |
---|---|---|
Azure AI 搜索 | ❌ | ❌ |
Weaviate | ❌ | ❌ |
MongoDB Atlas | ❌ | ❌ |
OpenSearch | ❌ | ❌ |
Apache Cassandra | ❌ | ❌ |
txtai | ❌ | ❌ |
pgvector | ❌ | ❌ |
SQLite-VSS | ❌ | ❌ |
不支持
向量数据库 | 导入 | 导出 |
---|---|---|
Vespa | ❌ | ❌ |
Marqo | ❌ | ❌ |
Elasticsearch | ❌ | ❌ |
Redis 搜索 | ❌ | ❌ |
ClickHouse | ❌ | ❌ |
USearch | ❌ | ❌ |
Rockset | ❌ | ❌ |
Epsilla | ❌ | ❌ |
Activeloop Deep Lake | ❌ | ❌ |
ApertureDB | ❌ | ❌ |
CrateDB | ❌ | ❌ |
Meilisearch | ❌ | ❌ |
MyScale | ❌ | ❌ |
Neo4j | ❌ | ❌ |
Nuclia DB | ❌ | ❌ |
OramaSearch | ❌ | ❌ |
Typesense | ❌ | ❌ |
Anari AI | ❌ | ❌ |
Vald | ❌ | ❌ |
Apache Solr | ❌ | ❌ |
安装
使用pip
pip install vdf-io
从源码安装
git clone https://github.com/AI-Northstar-Tech/vector-io.git
cd vector-io
pip install -r requirements.txt
通用向量数据集格式(VDF)规范
- VDF_META.json:这是一个json文件,具有以下在src/vdf_io/meta_types.py中定义的VDFMeta模式:
class NamespaceMeta(BaseModel):
namespace: str
index_name: str
total_vector_count: int
exported_vector_count: int
dimensions: int
model_name: str | None = None
vector_columns: List[str] = ["vector"]
data_path: str
metric: str | None = None
index_config: Optional[Dict[Any, Any]] = None
schema_dict: Optional[Dict[str, Any]] = None
class VDFMeta(BaseModel):
version: str
file_structure: List[str]
author: str
exported_from: str
indexes: Dict[str, List[NamespaceMeta]]
exported_at: str
id_column: Optional[str] = None
- 用于元数据和向量的Parquet文件/文件夹。
导出脚本
export_vdf --help
用法: export_vdf [-h] [-m MODEL_NAME]
[--max_file_size MAX_FILE_SIZE]
[--push_to_hub | --no-push_to_hub]
[--public | --no-public]
{pinecone,qdrant,kdbai,milvus,vertexai_vectorsearch}
...
将数据从各种向量数据库导出为向量数据集的VDF格式
选项:
-h, --help 显示此帮助消息并退出
-m MODEL_NAME, --model_name MODEL_NAME
使用的模型名称
--max_file_size MAX_FILE_SIZE
最大文件大小(MB)(默认值:
1024)
--push_to_hub, --no-push_to_hub
推送到hub
--public, --no-public
将数据集设为公开(默认值:
False)
向量数据库:
选择要从中导出数据的向量数据库
{pinecone,qdrant,kdbai,milvus,vertexai_vectorsearch}
pinecone 从Pinecone导出数据
qdrant 从Qdrant导出数据
kdbai 从KDB.AI导出数据
milvus 从Milvus导出数据
vertexai_vectorsearch
从Vertex AI向量搜索导出数据
导入脚本
import_vdf --help
用法: import_vdf [-h] [-d DIR] [-s | --subset | --no-subset]
[--create_new | --no-create_new]
{milvus,pinecone,qdrant,vertexai_vectorsearch,kdbai}
...
从VDF导入数据到向量数据库
选项:
-h, --help 显示此帮助消息并退出
-d DIR, --dir DIR 要导入的目录
-s, --subset, --no-subset
导入数据子集(默认值:False)
--create_new, --no-create_new
创建新索引(默认值:False)
向量数据库:
选择要将数据导入的向量数据库
{milvus,pinecone,qdrant,vertexai_vectorsearch,kdbai}
milvus 导入数据到Milvus
pinecone 导入数据到Pinecone
qdrant 导入数据到Qdrant
vertexai_vectorsearch
导入数据到Vertex AI向量搜索
kdbai 导入数据到KDB.AI
重新嵌入脚本
这个Python脚本用于重新嵌入向量数据集。它接受VDF格式的向量数据集目录,并使用新模型重新嵌入。该脚本还允许您指定包含要嵌入文本的列名。
reembed_vdf --help
用法: reembed_vdf [-h] -d DIR [-m NEW_MODEL_NAME]
[-t TEXT_COLUMN]
重新嵌入向量数据集
选项:
-h, --help 显示此帮助消息并退出
-d DIR, --dir DIR VDF格式的向量数据集目录
-m NEW_MODEL_NAME, --new_model_name NEW_MODEL_NAME
要使用的新模型名称
-t TEXT_COLUMN, --text_column TEXT_COLUMN
包含要嵌入文本的列名
示例
export_vdf -m hkunlp/instructor-xl --push_to_hub pinecone --environment gcp-starter
import_vdf -d /path/to/vdf/dataset milvus
reembed_vdf -d /path/to/vdf/dataset -m sentence-transformers/all-MiniLM-L6-v2 -t title
按照提示选择要导出的索引和ID范围。
贡献
添加新的向量数据库
如果您希望为新的向量数据库添加导入/导出实现,您还必须为同一数据库实现导入/导出的另一面。 请fork仓库并发送包含导入和导出脚本的PR。
添加新向量数据库(ABC)的步骤:
- 在src/vdf_io/names.py的DBNames枚举类中添加您的数据库名称。
- 为新数据库创建新文件
src/vdf_io/export_vdf/export_abc.py
和src/vdf_io/import_vdf/import_abc.py
。
导出:
- 在导出文件中,定义一个名为ExportABC的类,该类继承自ExportVDF。
- 为该类指定一个DB_NAME_SLUG。
- 该类应实现以下功能:
- make_parser()函数,用于向export_vdf命令行界面添加特定于数据库的参数。
- export_vdb()函数,用于提示用户输入命令行界面中未提供的信息。然后它应调用get_data()函数。
- get_data()函数,以批处理方式从向量数据库的指定索引下载带有所有元数据的点。这些数据应存储在一系列parquet文件/文件夹中。元数据应存储在一个json文件中,其格式符合上述模式。
- 使用该脚本从向量数据库的示例索引导出数据,并验证数据是否正确导出。
导入:
- 在导入文件中,定义一个名为ImportABC的类,该类继承自ImportVDF。
- 为该类指定一个DB_NAME_SLUG。
- 该类应实现以下功能:
- make_parser()函数,用于向import_vdf命令行界面添加特定于数据库的参数,如数据库的URL、任何认证令牌等。
- import_vdb()函数,用于提示用户输入命令行界面中未提供的信息。然后它应调用upsert_data()函数。
- upsert_data()函数,以批处理方式将vdf数据集中的点及其所有元数据上传到向量数据库的指定索引。关于数据集的所有元数据应从vdf文件夹中的VDF_META.json文件中读取。
- 使用该脚本导入上一步导出的示例vdf数据集,并验证数据是否正确导入。
修改VDF规范
如果你希望修改VDF规范,请在发送PR之前开启一个issue进行讨论。
效率改进
如果你希望提高导入/导出脚本的效率,请fork该仓库并发送PR。
遥测
运行仓库中的脚本将向AI Northstar Tech发送匿名使用数据,以帮助改进库。
你可以通过将环境变量DISABLE_TELEMETRY_VECTORIO设置为1来选择退出。
问题
如果你有任何问题,请在仓库中开启一个issue或在LinkedIn上联系Dhruv Anand。
贡献者
(贡献者列表部分保留原文)