从安装到部署:FastEmbed-rs完整使用教程(含代码示例)
2026/7/27 16:21:23 网站建设 项目流程

从安装到部署:FastEmbed-rs完整使用教程(含代码示例)

【免费下载链接】fastembed-rsRust library for generating vector embeddings, reranking locally!项目地址: https://gitcode.com/gh_mirrors/fa/fastembed-rs

FastEmbed-rs是一个强大的Rust库,能够在本地高效生成向量嵌入和重新排序,为开发者提供了便捷的文本、图像和稀疏嵌入解决方案。本教程将从基础安装到实际部署,全面介绍FastEmbed-rs的使用方法,帮助你快速上手这个高性能的嵌入生成工具。

🚀 快速安装步骤

FastEmbed-rs的安装非常简单,只需在你的Rust项目中添加依赖即可。你可以通过Cargo命令快速安装:

cargo add fastembed

或者在你的Cargo.toml文件中添加以下依赖:

[dependencies] fastembed = "5"

目前最新版本为5.17.3,确保使用最新版本以获得最佳性能和最新特性。

💡 核心功能介绍

FastEmbed-rs提供了多种强大的功能,满足不同场景下的嵌入需求:

文本嵌入

支持多种预训练模型,包括BGE系列、Sentence Transformers系列、Nomic系列等,默认使用BAAI/bge-small-en-v1.5模型。文本嵌入功能可以将文本转换为高维向量,用于文本相似度计算、聚类分析等任务。

稀疏文本嵌入

提供Sparse Embedding功能,默认使用prithivida/Splade_PP_en_v1模型,适用于需要稀疏表示的场景。

图像嵌入

支持CLIP、ResNet等模型,能够将图像转换为向量,实现图像检索、图像分类等功能。

重新排序

提供文本重新排序功能,默认使用BAAI/bge-reranker-base模型,可以对检索结果进行重新排序,提高检索准确性。

📝 文本嵌入使用示例

下面是一个简单的文本嵌入使用示例,展示如何使用FastEmbed-rs生成文本嵌入:

use fastembed::{TextEmbedding, TextInitOptions, EmbeddingModel}; // 使用默认选项初始化模型 let mut model = TextEmbedding::try_new(Default::default())?; // 或者使用自定义选项 let mut model = TextEmbedding::try_new( TextInitOptions::new(EmbeddingModel::AllMiniLML6V2) .with_show_download_progress(true) .with_intra_threads(4), )?; let documents = vec![ "passage: Hello, World!", "query: Hello, World!", "passage: This is an example passage.", "fastembed-rs is licensed under Apache 2.0" ]; // 生成嵌入,使用默认批大小256 let embeddings = model.embed(documents, None)?; println!("Embeddings length: {}", embeddings.len()); // -> Embeddings length: 4 println!("Embedding dimension: {}", embeddings[0].len()); // -> Embedding dimension: 384

🖼️ 图像嵌入使用示例

FastEmbed-rs同样支持图像嵌入,下面是一个图像嵌入的示例:

use fastembed::{ImageEmbedding, ImageInitOptions, ImageEmbeddingModel}; // 使用默认选项初始化模型 let mut model = ImageEmbedding::try_new(Default::default())?; // 或者使用自定义选项 let mut model = ImageEmbedding::try_new( ImageInitOptions::new(ImageEmbeddingModel::ClipVitB32) .with_show_download_progress(true), )?; let images = vec!["tests/assets/image_0.png", "tests/assets/image_1.png"]; // 生成嵌入,使用默认批大小256 let embeddings = model.embed(images, None)?; println!("Embeddings length: {}", embeddings.len()); // -> Embeddings length: 2 println!("Embedding dimension: {}", embeddings[0].len()); // -> Embedding dimension: 512

🔍 重新排序功能示例

重新排序功能可以帮助你优化检索结果,下面是一个简单的示例:

use fastembed::{TextRerank, RerankInitOptions, RerankerModel}; // 使用默认选项初始化模型 let mut model = TextRerank::try_new(Default::default())?; // 或者使用自定义选项 let mut model = TextRerank::try_new( RerankInitOptions::new(RerankerModel::BGERerankerBase) .with_show_download_progress(true), )?; let documents = vec![ "hi", "The giant panda (Ailuropoda melanoleuca), sometimes called a panda bear, is a bear species endemic to China.", "panda is animal", "i dont know", "kind of mammal", ]; // 重新排序,使用默认批大小256并返回文档内容 let results = model.rerank("what is panda?", documents, true, None)?; println!("Rerank result: {:?}", results);

📊 相似度搜索

FastEmbed-rs提供了相似度搜索功能,可以快速计算向量之间的相似度:

use fastembed::similarity::{cosine_similarity, top_k}; // `embeddings` 是从 model.embed(...) 获取的 Vec<Embedding> let query = &embeddings[0]; // 直接计算两个向量的相似度(范围 [-1.0, 1.0],值越高表示越相似) let score = cosine_similarity(query, &embeddings[1]); // 或者对语料库进行排序:返回 (索引, 分数) 对,按相似度从高到低排列 let hits = top_k(query, &embeddings, 5); println!("Closest: {:?}", hits);

对于更大的语料库或需要持久化存储,建议将向量推送到向量搜索引擎(如Qdrant)中进行查询。

⚙️ 高级功能:Qwen3嵌入

Qwen3嵌入模型在qwen3特性标志后可用(candle后端)。使用方法如下:

首先,在Cargo.toml中添加特性:

[dependencies] fastembed = { version = "5", features = ["qwen3"] }

然后,使用Qwen3嵌入模型:

use candle_core::{DType, Device}; use fastembed::Qwen3TextEmbedding; let device = Device::Cpu; let model = Qwen3TextEmbedding::from_hf( "Qwen/Qwen3-Embedding-0.6B", &device, DType::F32, 512, )?; let embeddings = model.embed(&["query: ...", "passage: ..."])?; println!("Embeddings length: {}", embeddings.len());

📌 模型缓存

模型在首次使用时会下载,并在后续使用时从缓存加载(一旦缓存,运行时无需网络)。你可以通过以下环境变量自定义缓存行为:

  • FASTEMBED_CACHE_DIR— 缓存位置(默认:.fastembed_cache)。等同于TextInitOptions::with_cache_dir
  • HF_HOME— 如果设置,优先于上述选项。
  • HF_ENDPOINT— Hugging Face镜像基础URL,适用于受限网络。

🚦 DirectML支持(Windows)

要在Windows上通过DirectML在GPU上运行模型,请启用directml特性:

[dependencies] fastembed = { version = "5", features = ["directml"] }

然后在初始化模型时传递DirectML执行提供程序:

use fastembed::{TextEmbedding, TextInitOptions, EmbeddingModel}; use ort::ep::DirectML; let model = TextEmbedding::try_new( TextInitOptions::new(EmbeddingModel::AllMiniLML6V2) .with_execution_providers(vec![DirectML::default().into()]), )?;

当检测到DirectML时,fastembed会自动禁用ONNX Runtime会话上的内存模式优化和并行执行,这是DirectML执行提供程序所要求的。

📚 总结

FastEmbed-rs是一个功能强大、易于使用的Rust库,为开发者提供了本地生成向量嵌入和重新排序的能力。通过本教程,你已经了解了FastEmbed-rs的安装方法、核心功能和使用示例。无论是文本嵌入、图像嵌入还是重新排序,FastEmbed-rs都能满足你的需求。

开始使用FastEmbed-rs,为你的项目添加高效的嵌入生成能力吧!

🔖 相关资源

  • 官方文档:docs.rs/fastembed
  • 源码仓库:src/
  • 文本嵌入实现:src/text_embedding/impl.rs
  • 图像嵌入实现:src/image_embedding/impl.rs
  • 重新排序实现:src/reranking/impl.rs

【免费下载链接】fastembed-rsRust library for generating vector embeddings, reranking locally!项目地址: https://gitcode.com/gh_mirrors/fa/fastembed-rs

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询