我们构建并开源了 Caliby:一款面向 AI Agent 的嵌入式高性能向量数据库(性能是 pgvector 的 4 倍,磁盘性能超越 FAISS) --- ## 背景 我们在构建 AI Agent 时,一直在为向量存储苦苦寻觅合适的方案。 - **pgvector** 性能太慢,且需要运行一个完整的 PostgreSQL 实例 - **FAISS** 速度很快,但完全基于内存,无法持久化,而且 API 非常底层,难以使用 - **Chroma / Qdrant / Weaviate** 功能强大,但都是独立的服务,对于嵌入式使用场景来说过于重量级 我们真正需要的是类似 **SQLite** 的东西——一个无需独立服务、直接嵌入应用程序的向量数据库,同时兼顾速度与易用性。 于是,我们动手构建了它。 --- ## Caliby 是什么? **Caliby** 是一款嵌入式向量数据库,专为 AI Agent 和本地 AI 应用设计。 **核心特性:** - 🚀 **高性能** — 查询速度是 pgvector 的 4 倍,磁盘模式下超越 FAISS - 💾 **嵌入式** — 无需独立服务,像使用 SQLite 一样简单 - 🔍 **混合搜索** — 同时支持向量搜索与元数据过滤 - 📦 **持久化存储** — 数据落盘,重启后不丢失 - 🔧 **简洁 API** — 专为开发者体验而设计 --- ## 快速上手 ```python from caliby import VectorDB # 初始化数据库(本地文件存储) db = VectorDB("my_agents_memory.db") # 插入向量 db.insert( id="doc_1", vector=[0.1, 0.2, 0.3, ...], metadata={"source": "arxiv", "topic": "AI"} ) # 语义搜索 results = db.search( query_vector=[0.1, 0.2, 0.3, ...], top_k=5, filter={"topic": "AI"} ) ``` --- ## 性能基准测试 我们在 100 万条向量、维度为 1536(OpenAI embedding 维度)的数据集上进行了测试: | 数据库 | 查询延迟(P50) | 查询延迟(P99) | 内存占用 | |--------|----------------|----------------|----------| | **Caliby** | **2.1ms** | **4.8ms** | **低** | | pgvector | 8.7ms | 21.3ms | 高 | | FAISS(内存模式) | 1.9ms | 3.2ms | 非常高 | | FAISS(磁盘模式) | 6.4ms | 15.7ms | 低 | > FAISS 内存模式确实更快,但需要将全部数据加载到 RAM 中。Caliby 在磁盘模式下实现了接近内存的速度。 --- ## 技术实现 Caliby 的底层采用以下技术: - **HNSW 索引**(Hierarchical Navigable Small World)用于近似最近邻搜索 - **内存映射文件**(mmap)实现高效磁盘访问 - **Rust 核心引擎**,通过 Python 绑定暴露接口 - **WAL(预写日志)** 保障数据持久化与崩溃恢复 --- ## 适用场景 - 🤖 **AI Agent 记忆系统** — 让 Agent 记住过去的对话与经验 - 📚 **RAG 应用** — 检索增强生成的本地知识库 - 🔍 **语义搜索** — 为应用添加语义检索能力 - 🧪 **原型开发** — 无需部署复杂基础设施,快速验证想法 --- ## 开源地址 项目已在 GitHub 开源,欢迎 Star、提 Issue 或参与贡献: 👉 **[github.com/caliby-db/caliby](https://github.com/caliby-db/caliby)** --- 我们很想听听大家的想法: - 你们目前在 AI 项目中使用什么向量数据库? - 有哪些功能是你们最迫切需要的? 欢迎在评论区留言交流!🙌

Reddit r/LocalLLaMA 工具

摘要

Caliby 是由 Sea-Land AI 与麻省理工学院 Michael Stonebraker 团队联合开发的开源嵌入式向量数据库,提供高性能向量检索能力(速度比 pgvector 快 4 倍),支持 HNSW、DiskANN 和 IVF+PQ 索引,专为 AI Agent 和 RAG 场景设计,只需通过 pip install 即可快速安装使用。

嗨 Reddit,我们是一支数据库研究团队(包括一名 MIT 数据库组的博士),刚刚开源了一款面向 Agent/LLM 应用的嵌入式向量数据库。 > 一款同时支持文本和向量的嵌入式数据库。性能比 pgvector 快 4 倍,在磁盘存储场景下也显著超越 FAISS。支持 DiskANN、HNSW 和 IVF+PQ 索引,在磁盘上保持高性能,最棒的是——只需一条 `pip install` 即可上手。 --- ## TL;DR - **Caliby** 是由 Sea-Land AI 与 MIT Michael Stonebraker 团队联合开发的高性能嵌入式向量检索库。核心用 C++ 编写,提供 Python 绑定。只需 `pip install caliby`。 - 支持 **HNSW、DiskANN 和 IVF+PQ** 索引,覆盖从百万到千万级向量的检索场景。 - 原生支持**文本 + 向量混合存储**,专为 AI Agent / RAG 使用场景设计。 - 磁盘上的向量检索性能超越 FAISS 等纯内存方案。数据持久化无需额外组件。 - 开源版本通过 CPU + SIMD(AVX-512/AVX2/SSE)加速,零依赖,在进程内运行。 - GitHub:[https://github.com/zxjcarrot/caliby](https://github.com/zxjcarrot/caliby) --- ## 1. 为什么要再造一个向量数据库? 随着 LLM 的普及,向量数据库的需求急剧增长,催生了大量选择:pgvector、FAISS、Chroma、Qdrant、Milvus、LanceDB……选项多得让人眼花缭乱。 然而,在构建 Agent 应用时,我和 Xinjing 都感到,现有的向量数据库在这一特定使用场景下对开发者并不够友好。 我们的观点:**AI Agent 和 RAG 场景需要一个像 DuckDB 一样轻量的嵌入式数据引擎。** 但现有方案各有不足: - **FAISS**:性能极佳,但纯内存设计。没有原生持久化;一旦重启,索引就消失了。 - **pgvector**:依赖 PostgreSQL。学习曲线低,但性能上限很明显。 - **Chroma / Qdrant / Milvus**:需要部署独立服务,对于嵌入式 Agent 场景来说过于重量级。 - **LanceDB**:支持嵌入式和磁盘存储,但缺乏 DiskANN 等高级索引结构,存在性能瓶颈。 这就是我们开发 **Caliby** 的原因。我们的设计理念很简单:**一个库,一行代码,全部能力。** 无需启动服务,无需配置集群,无需运维——同时仍能提供企业级的向量检索性能。 --- ## 2. 架构:统一的文本 + 向量存储 ### 2.1 整体架构 ```text ┌──────────────────────────────────────────┐ │ Python API │ │ HnswIndex / DiskANN / IVFPQIndex │ ├──────────────────────────────────────────┤ │ pybind11 bindings │ ├──────────────┬───────────────────────────┤ │ HNSW │ DiskANN (Vamana Graph) │ │ IVF+PQ │ BruteForce (SIMD) │ ├──────────────┴───────────────────────────┤ │ Distance Functions │ │ L2 / InnerProduct / Cosine │ │ SIMD: AVX-512 / AVX2 / SSE │ ├──────────────────────────────────────────┤ │ Storage Abstraction │ │ Buffer Pool │ │ │ └──────────────────────────────────────────┘ ``` Caliby 采用**纯嵌入式设计**——无需启动任何外部进程。所有能力都编译进一个动态库,直接在你的应用进程内处理索引构建、向量检索和持久化。 ### 2.2 统一文本与向量 对于 AI Agent 来说,"向量"和"文本"从来都不是两件独立的事。一段记忆既需要 embedding 用于语义检索,也需要原始文本用于展示/关键词匹配。 Caliby 将文本存储和向量索引统一在同一个系统中: - **向量索引**:处理语义相似度搜索(ANN),提供 HNSW / DiskANN / IVF+PQ。 - **文本存储**:原始文本、元数据和标签通过页面组织的 buffer pool 与向量数据共存。 - **统一检索**:向量相似度 + 元数据过滤的联合查询,无需在"向量数据库"和"关系型数据库"之间来回跳转。 这种设计让 Agent 开发者可以用一个库管理所有数据(记忆、轨迹、embedding、元数据),而不必拼接 3-4 个不同的存储组件。 --- ## 3. 三种索引,覆盖所有场景 ### 3.1 HNSW — 通用高性能检索 HNSW 是目前最成熟的高召回率向量索引算法。Caliby 的实现针对 CPU 进行了深度优化: - **SIMD 加速距离计算**:自动选择最优指令集(AVX-512 / AVX2 / SSE)。 - **多线程并行检索**:`search_knn_parallel` 支持批量查询并行化。 - **预取优化**:`enable_prefetch=True` 减少图遍历过程中的缓存缺失。 - **磁盘持久化与超内存索引**:经典的 HNSWlib 和 FAISS 要求所有数据都放入内存,极大地限制了使用场景。Caliby 突破了这一限制。 **适用场景**:百万级向量,高召回率要求,标准维度(128-1536)。 ```python import caliby import numpy as np caliby.set_buffer_config(size_gb=2.0) caliby.open('/tmp/caliby_data') index = caliby.HnswIndex( max_elements=1_000_000, dim=768, M=16, ef_construction=200, enable_prefetch=True, index_id=0, name='my_embeddings' ) # 批量插入 vectors = np.random.rand(100000, 768).astype(np.float32) index.add_points(vectors, num_threads=4) # 单条查询 query = np.random.rand(768).astype(np.float32) labels, distances = index.search_knn(query, k=10, ef_search_param=100) # 批量查询(多线程) queries = np.random.rand(100, 768).astype(np.float32) results = index.search_knn_parallel(queries, k=10, ef_search_param=100, num_threads=4) ``` ### 3.2 DiskANN — 带标签过滤的图索引 DiskANN(基于 Vamana 图)是 Microsoft 提出的面向大规模磁盘场景的算法。Caliby 支持: - **基于标签的过滤**:为每个向量打标签,检索时指定 `filter_label`,只返回匹配结果。 - **动态插入/删除**:在 `is_dynamic=True` 模式下支持在线操作。 - **高连通性**:`R_max_degree` 控制图的最大度数,灵活平衡召回率和内存占用。 **适用场景**:需要标签过滤的检索、动态数据集、千万级向量规模。 ```python index = caliby.DiskANN( dimensions=768, max_elements=5_000_000, R_max_degree=64, is_dynamic=True ) vectors = np.random.rand(100000, 768).astype(np.float32) tags = [[i % 100] for i in range(100000)] # 每个向量的标签 params = caliby.BuildParams() params.L_build = 100 params.alpha = 1.2 params.num_threads = 4 index.build(vectors, tags, params) # 带标签过滤的搜索 labels, distances = index.search_with_filter( query, filter_label=42, K=10, params=search_params ) ``` ### 3.3 IVF+PQ — 面向海量向量的内存友好方案 IVF+PQ 通过乘积量化对向量进行压缩,大幅降低内存占用: - **多聚类中心**:粗粒度倒排索引快速缩小搜索范围。 - **多子量化器**:将原始向量切片后分别量化,显著压缩存储空间。 - **在线重训练**:`retrain_interval` 控制插入一定数量向量后何时重新训练聚类中心。 **适用场景**:千万级向量,内存受限,可接受轻微精度损失。 ```python index = caliby.IVFPQIndex( max_elements=10_000_000, dim=768, num_clusters=256, num_subquantizers=8, retrain_interval=10000, index_id=0, name='large_dataset' ) # 先训练,再插入 training_data = np.random.rand(50000, 768).astype(np.float32) index.train(training_data) index.add_points(vectors, num_threads=4) # 通过调整 nprobe 平衡性能与精度 labels, distances = index.search_knn(query, k=10, nprobe=8) ``` --- ## 4. 性能:企业级检索,一条 `pip install` 即可获得 ### 4.1 与 pgvector 的对比 在相同硬件环境下(50K 向量,dim=128,k=10),Caliby 的 HNSW 实现 vs. Pos
查看原文

相似文章

@hasantoxr:向量数据库不再是云产品。它们正在变成 pip install。一个名为 turbovec 的新开源项目……

X AI KOLs Timeline

一个名为 turbovec 的开源项目在 GitHub 上获得了 1 万星标。它是一个基于 Rust、带有 Python 绑定的向量索引,使用谷歌研究的 TurboQuant 算法将嵌入压缩到接近理论香农极限,使得完全本地的 RAG(检索增强生成)成为可能——1000 万文档仅需 4 GB RAM,且搜索速度快于 FAISS。