USearch 是由 Unum Cloud(原名 Unum AI)团队打造的一款专注于高性能与轻量化的向量相似性搜索与聚类引擎。它专为现代人工智能应用中常见的大规模向量检索需求设计,支持包括余弦相似度、L2距离和内积在内的多种距离度量方式。该引擎兼容CPU和GPU硬件,提供简洁的API,能够轻松部署于嵌入式设备、边缘计算节点或云端服务器等多种环境。
USearch 的设计秉承以下几个核心目标:
- 极致性能:在保持高召回率的前提下,其查询速度超越 FAISS、Annoy、HNSWlib 等主流库。
- 极小内存占用:通过高效的索引结构与压缩算法,显著降低了运行时内存消耗。
- 跨平台兼容:原生支持 x86、ARM、Apple Silicon(M1/M2)架构,并能通过 WebAssembly 运行于浏览器与移动端。
- 简单易用:提供 Python、C++、Rust、JavaScript 等多语言绑定,开箱即用。
- 开源免费:采用 Apache 2.0 开源协议,对社区友好。
核心特性
1. 多种索引类型支持
USearch 支持主流的近似最近邻算法:
- HNSW(分层可导航小世界图):默认推荐算法,适用于高维向量,召回率高。
- IVF(倒排文件索引):适用于超大规模数据集,采用“粗筛+精排”的两阶段搜索策略。
- Brute-force(暴力搜索):用于小规模数据集或作为性能评估的基准。
2. 多种距离度量
支持 ip(内积)、cos(余弦相似度)、l2(欧氏距离)以及适用于二值向量的 hamming(汉明距离)。
3. 高效的内存管理
支持向量的动态插入与删除(HNSW索引支持部分更新),进行了内存对齐优化以减少缓存未命中,并提供 FP16、INT8 等向量压缩选项。
4. 多语言支持
- Python(通过 PyPI 安装)
- C++(单头文件库,无外部依赖)
- Rust(通过
usearch crate)
- JavaScript / TypeScript(支持 Node.js 和浏览器端 WebAssembly)
- Java / C#(社区正在贡献中)
5. 跨平台编译
支持 Linux、macOS、Windows、ARM64(如树莓派、AWS Graviton)、Apple Silicon 以及浏览器 WebAssembly 环境。
开源地址与官方资源
安装与部署
1. Python 安装(推荐)
通过 pip 即可安装:
pip install usearch
要求 Python 3.7 及以上版本。
验证安装与基础使用:
import usearch
index = usearch.Index(
ndim=128, # 向量维度
metric='cos', # 距离度量
dtype='f32', # 数据类型: 'f32', 'f16', 'i8'
)
# 添加向量
index.add(10, [0.1] * 128)
index.add(11, [0.2] * 128)
# 搜索
results = index.search([0.15] * 128, k=2)
print(results) # 输出 (keys, distances)
2. C++ 集成
USearch 的 C++ 实现是单头文件库,只需引入 include/usearch.hpp。
#include "usearch/index.hpp"
using namespace unum::usearch;
int main() {
using index_dense_gt = index_dense_t<float, ip_metric_gt<float>>;
index_dense_gt index;
index.reserve(1000);
index.add(10, reinterpret_cast<float*>(your_vector_data));
auto results = index.search(reinterpret_cast<float*>(query_vector), 10);
return 0;
}
建议编译时启用优化指令:
g++ -O3 -march=native -std=c++17 your_app.cpp -o your_app
3. Rust 安装
在 Cargo.toml 中添加依赖:
[dependencies]
usearch = "0.5"
使用示例:
use usearch::{Index, MetricKind, ScalarKind};
let mut index = Index::new(
128,
MetricKind::Cos,
ScalarKind::F32,
None, // connectivity
None, // expansion_add
None, // expansion_search
).unwrap();
index.add(10, &[0.1; 128]).unwrap();
let results = index.search(&[0.15; 128], 2).unwrap();
println!("{:?}", results);
4. JavaScript / 浏览器使用
通过 npm 安装:
npm install usearch
Node.js 示例:
import { Index } from 'usearch';
const index = new Index({
dims: 128,
metric: 'cos',
dtype: 'f32'
});
index.add(10, new Float32Array(128).fill(0.1));
const results = index.search(new Float32Array(128).fill(0.15), 2);
console.log(results.keys, results.distances);
在浏览器中,USearch 通过 WebAssembly 运行,无需后端服务器,非常适合在前端构建语义搜索、推荐系统等原型应用。
性能对比(官方基准)
根据官方在 SIFT1M 数据集(100万128维向量)上的测试数据:
| 库 |
构建时间 (s) |
查询 QPS |
内存 (MB) |
Recall@10 |
| USearch |
1.8 |
120K |
200 |
0.98 |
| FAISS HNSW |
2.5 |
95K |
250 |
0.97 |
| Annoy |
15 |
30K |
300 |
0.92 |
| HNSWlib |
2.0 |
100K |
210 |
0.98 |
数据显示,USearch 在查询速度与内存效率上均表现优异,尤其在 ARM 和 Apple Silicon 平台上优势更为明显。
典型应用场景
- 语义搜索:对文本嵌入向量进行快速检索,是构建智能搜索系统的核心组件。
- 推荐系统:基于用户或物品的向量表示进行相似性推荐。
- 图像检索:对 CLIP、ResNet 等模型提取的图像特征进行相似性查找。
- 异常检测:通过计算向量与基准的距离来判断数据点的偏离程度。
- 边缘 AI:在手机、IoT 设备等资源受限环境中运行轻量级向量搜索。
- RAG(检索增强生成):作为本地向量数据库,为大语言模型(LLM)快速检索相关上下文信息,是当前构建人工智能应用的热门方案。
与其他向量引擎对比
| 特性 |
USearch |
FAISS |
Annoy |
HNSWlib |
Qdrant (Server) |
| 开源许可证 |
Apache 2.0 |
MIT |
Apache 2.0 |
MIT |
Apache 2.0 |
| 单机/嵌入式 |
✅ |
✅ |
✅ |
✅ |
❌(需服务) |
| 动态增删 |
✅(部分) |
✅(部分) |
❌ |
❌ |
✅ |
| 多语言绑定 |
✅(5+) |
✅(Python/C++) |
✅(Python) |
❌ |
✅(HTTP/gRPC) |
| WebAssembly |
✅ |
❌ |
❌ |
❌ |
❌ |
| ARM/Apple Silicon |
✅ |
⚠️(需编译) |
✅ |
✅ |
✅(Docker) |
| 内存效率 |
⭐⭐⭐⭐⭐ |
⭐⭐⭐ |
⭐⭐⭐⭐ |
⭐⭐⭐⭐ |
⭐⭐(含元数据) |
社区与企业支持
- GitHub Stars:项目活跃,已获得超过 3,500+ stars。
- 商业支持:Unum Cloud 提供企业版 USearch,包含增强功能、SLA 保障及托管服务。
- 集成生态:已被 LangChain、LlamaIndex、Haystack 等主流 RAG 框架通过社区插件集成。
总结
USearch 是一款在性能、内存占用、跨平台兼容性及易用性之间取得出色平衡的轻量级向量检索引擎。其“更快、更小、更通用”的理念,使其成为构建本地AI应用、边缘智能系统,或作为大型向量数据库底层索引的理想选择。
对于追求极致效率、希望减少复杂依赖的开发者而言,USearch 值得优先尝试。
生产环境建议:在实际部署时,建议结合持久化功能。USearch 支持简单的 save() 和 load() 方法,可将索引保存为 .usearch 文件,便于管理与备份。
index.save('my_index.usearch')
index2 = usearch.Index.restore('my_index.usearch')