从安装到部署: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),仅供参考