fastembed-rs
Rust 编写的本地向量嵌入库,支持 30+ embedding 模型和重排序,数据完全本地处理,隐私零泄露
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
Rust 编写的本地向量嵌入库,支持 30+ embedding 模型和重排序,数据完全本地处理,隐私零泄露
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
在 RAG(检索增强生成)系统里,向量嵌入(Embedding)和重排序(Reranking)是两个绕不开的环节。传统方案往往依赖 Python 服务 + 云端 API:调用 OpenAI 的 text-embedding-ada-002,或者付费使用 Cohere、Jina 等 embedding 服务。这带来三个现实问题——数据隐私风险(企业文档必须经过第三方服务器)、网络延迟(每次查询都要往返外部 API)、成本累积(大规模文档场景下 API 费用不容忽视)。
FastEmbed-rs 就是来解决这个问题的:让你在 Rust 项目里本地运行这些 embedding 和 reranking 模型,数据完全不离开本机。
FastEmbed-rs 是 Python 版 fastembed 的 Rust 移植版本,由独立开发者 Anush008 主导开发,当前版本 5.17.2,已在 crates.io 发布。Rust 版本并非简单翻译,而是利用 Rust 的零成本抽象和 ONNX Runtime(via pykeio/ort),实现了与 Python 版相当的推理性能,同时获得 Rust 的内存安全保证和极小的运行时体积。
核心贡献者包括 Anush008、Josh Niemelä、George MacKerron 等多位开发者,目前在 GitHub 收获约 929 颗星、131 个 fork。
稠密向量嵌入(Dense Embedding)
支持 30+ 预训练模型,默认使用 BAAI/bge-small-en-v1.5(384维向量)。使用方式极为简洁:
use fastembed::{TextEmbedding, TextInitOptions, EmbeddingModel};
let mut model = TextEmbedding::try_new(Default::default())?;
let embeddings = model.embed(documents, None)?;
首次运行会自动从 HuggingFace Hub 下载模型权重到本地缓存(默认 .fastembed_cache),之后完全离线可用。支持 FASTEMBED_CACHE_DIR 自定义缓存路径,HF_ENDPOINT 配置镜像站点,适合内网环境。
稀疏向量嵌入(Sparse Embedding)
基于 SPLADE 模型(prithivida/Splade_PP_en_v1)生成稀疏向量,每个 token 有关联权重,适用于关键词感知的混合检索场景。BGE-M3 模型同时输出稠密 + 稀疏 + ColBERT 三种向量,一步到位。
图像向量嵌入(Image Embedding)
支持 CLIP ViT-B/32、ResNet50、UniCom 等视觉模型,可将图片编码为向量,配合 Qdrant/clip-ViT-B-32-text 实现图文跨模态检索。
重排序(Reranking)
支持 BAAI/bge-reranker-v2-m3、jina-reranker 等模型,对检索结果进行二次精排,显著提升最终 top-k 结果的相关性。相比直接用向量相似度,reranking 通常能将 NDCG@10 提升 10-20%。
高级模型:Qwen3 Embedding(Candle 后端)
v5.13+ 引入了 Qwen3 系列 embedding 模型(0.6B / 4B / 8B 参数),使用 Candle(HuggingFace 的 Rust ML 框架)作为推理后端,无需 ONNX Runtime,适合追求零外部依赖的场景。Qwen3-VL 模型还支持图文多模态 embedding。
No-Stdlib 支持与多平台硬件加速
| 组件 | 技术选型 | 作用 |
|---|---|---|
| 推理引擎 | ONNX Runtime(ort) | 跨平台高性能推理,支持 CPU/GPU/DirectML |
| 分词器 | HuggingFace tokenizers | 快速文本分词,支持多语言 |
| 模型格式 | Safetensors | 安全高效的张量序列化格式 |
| 高级后端 | Candle | Rust 原生 ML 框架(Qwen3 等模型) |
| 图像处理 | image crate | 图像加载与预处理 |
Rust 开发者:门槛极低,一行 cargo add fastembed 即可引入,配合 docs.rs 在线文档和 README 中的完整示例,30 分钟内可跑通第一个 embedding 流程。
非 Rust 开发者:需要了解 Rust 语言基础(所有权、生命周期),以及 Cargo 的基本使用方式。对于只想快速体验的用户,Python 版 pip install fastembed 更为直接。
FastEmbed-rs 的核心定位是本地化、隐私优先的向量嵌入,对比:
FastEmbed-rs 的差异化在于:开箱即用的模型管理(自动下载/缓存)、丰富的模型选择(30+ embedding + 4 reranker)、以及 Rust 带来的极致部署体验——最终产物是一个静态链接的二进制或一个 cargo 依赖,零额外运行时。
ort-load-dynamic 可使用系统已安装的 ONNX Runtimedirectml feature,并通过 DirectML::default() 指定执行提供者向量嵌入是 RAG 的核心基础设施。随着企业对数据隐私的重视程度提升,本地化 embedding 方案的需求正在快速增长。FastEmbed-rs 作为 Rust 生态中为数不多的高性能 embedding 库,为 Rust 开发者提供了一条不需要引入 Python 运行时、不需要调用外部 API 即可完成向量嵌入的路径,在数据库内核扩展、游戏 AI 服务、嵌入式 RAG 等 Rust 传统优势领域有独特价值。
图1:FastEmbed-rs 项目创始人 Anush008 的 GitHub 头像