NanoVector Vibe 项目

用纯 C99 编写的微型向量检索引擎,体积仅约 120KB,零外部依赖,支持 AVX2、FMA

NanoVector 是一个用纯 C99 编写的微型向量检索引擎,体积仅约 120KB,零外部依赖,支持 AVX2、FMA、ARM NEON 等 SIMD 指令集以及 FASM x64 汇编。它被定位为"AI 智能体的向量搜索与情景记忆的 SQLite",旨在解决主流向量数据库(ChromaDB、Pinecone、FAISS)带来的依赖膨胀与冷启动延迟问题。

核心功能

亚毫秒级精确检索

NanoVector 在 CPU 缓存内完成精确暴力搜索,N=2000、维度 384 的单次查询延迟仅约 0.13 毫秒,吞吐量可达 7478 QPS,全程无需近似算法带来的召回率损失。

零外部依赖

整个发行包仅约 38KB(解压后约 120KB),不依赖任何外部库,安装无需 Python 虚拟环境或 pip 包管理,冷启动导入时间低于 1 毫秒,比 ChromaDB 快约 3000 倍。

零拷贝 NumPy 集成

通过 Python 缓冲区协议(Buffer Protocol)直接操作 NumPy 数组,无需复制内存,数据可在 Python 进程与 NanoVector 之间零拷贝传递。

多后端硬件支持

支持 x86/x64(AVX2+FMA)、ARM NEON 以及 FASM x64 汇编后端,覆盖主流服务器、桌面与移动硬件,搜索过程中自动释放 Python GIL,实现真正的多线程并发。

单文件持久化格式(.nvec)

索引以单个 .nvec 文件存储,加载后直接可用,无需复杂的目录结构或数据库配置,方便嵌入 AI 智能体的部署包中。

批量导入与查询

支持单条和批量添加向量(N=5000 批量导入吞吐量约 141 万向量/秒),每条向量可附加 JSON 格式元数据字符串,方便存储对话轮次、角色、标签等信息。

技术实现

NanoVector 舍弃了 HNSW 等图索引结构,选择在 CPU 缓存层级做精确暴力搜索,代价是内存占用略高于图索引方法,但换来了确定性的亚毫秒级查询速度与零召回率损失。SIMD 指令将多路向量运算压入单条 CPU 指令,大幅提升吞吐;GIL 释放使 Python 多线程场景下搜索不阻塞主线程。单文件 .nvec 格式将索引与元数据打包,去掉了 SQLite/DuckDB 等嵌入式数据库的间接层。

快速上手

第一步,安装:pip install nanovector。

第二步,初始化索引并指定维度(384 维对应 all-MiniLM-L6-v2,768 维对应 BERT,1536 维对应 OpenAI):index = nanovector.Index(dim=384, metric="cosine")。

第三步,添加向量,支持单条(附元数据字符串)或批量(从二维 NumPy 数组零拷贝导入):index.add("doc_1", vec, metadata='{"author":"eminsk"}') 或 index.add_batch(batch_ids, batch_vecs, metadatas=batch_metas)。

第四步,搜索最相似的 top_k 条记录:results = index.search(query, top_k=5),单次查询约 0.15 毫秒。

第五步,持久化或加载:index.save("agent_memory.nvec") 保存,或 nanovector.load("agent_memory.nvec") 从磁盘加载。

适用人群

AI 应用开发者:需要在本地 LLM 流程中嵌入轻量持久化记忆层,又不希望引入 ChromaDB 等重依赖。CLI 工具作者:冷启动速度敏感的场景,NanoVector 毫秒级导入完全不会增加工具响应时间。本地智能体框架维护者:为自主运行的智能体提供确定性的情景记忆存储,文件即索引,部署简单。

开源信息

项目托管于 GitHub(eminsk/nanovector),采用 MIT 许可证,提供预编译 Python wheel,可直接在 Colab 中体验,有配套 Notebook 快速入门。

团队信息

由 AI 猎手自动发现

评论与建议

0 条评论