我们构建并开源了 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 项目中使用什么向量数据库? - 有哪些功能是你们最迫切需要的? 欢迎在评论区留言交流!🙌
摘要
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
相似文章
@HowToPrompt__: 中国开源了一款碾压 Pinecone、Chroma 和 Weaviate 的向量数据库。它叫 Zvec,一种进程内向量…
中国开源了 Zvec,这是一种进程内向量数据库,无需服务器即可在应用内部运行,支持毫秒级搜索数十亿向量,并已在阿里巴巴规模下经受了实战考验。
@hasantoxr:向量数据库不再是云产品。它们正在变成 pip install。一个名为 turbovec 的新开源项目……
一个名为 turbovec 的开源项目在 GitHub 上获得了 1 万星标。它是一个基于 Rust、带有 Python 绑定的向量索引,使用谷歌研究的 TurboQuant 算法将嵌入压缩到接近理论香农极限,使得完全本地的 RAG(检索增强生成)成为可能——1000 万文档仅需 4 GB RAM,且搜索速度快于 FAISS。
为什么向量RAG在大规模AI编程代理中失败(以及我如何使用Neo4j图来解决它)
一款名为Writ的新开源工具采用混合检索流程,结合BM25、本地ONNX向量和Neo4j图遍历,为AI编程代理提供上下文规则,将令牌膨胀减少726倍,并通过bash钩子强制计划审批。
我为AI编码代理构建了一个开源持久记忆层
一个为AI编码代理设计的开源持久记忆层,使用Postgres和pgvector存储和检索项目决策与上下文,旨在减少上下文窗口大小并提高代理的一致性。
@HowToPrompt__:整个向量数据库行业被一个1974年的免费工具打败了。过去两年里,每一家公司……
研究人员报告称,经典的grep命令在自主AI代理的检索任务中胜过现代向量数据库,挑战了当前主流的RAG基础设施方法。