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 快速入门。
评论与建议
登录 后参与评论或提建议