百科.dev
全部条目在线工具AI 编程趋势榜开源项目技术资讯提交条目
登录
< 返回工具列表
F

fastembed-rs

> 编程语言
开源

Rust 库用于生成向量嵌入,在本地重新排序!

978 stars0 点赞1 次浏览
访问官网GitHub

工具介绍

Rust 库用于生成向量嵌入,在本地重新排序!

Features

  • Supports synchronous usage. No dependency on Tokio.
  • Uses @pykeio/ort for performant ONNX inference.
  • Uses @huggingface/tokenizers for fast encodings.

Not looking for Rust?

  • Python: fastembed
  • Go: fastembed-go
  • JavaScript: fastembed-js

Supported Models

Text Embedding

Click to list models

  • BAAI/bge-small-en-v1.5 - Default
  • BAAI/bge-base-en-v1.5
  • BAAI/bge-large-en-v1.5
  • BAAI/bge-small-zh-v1.5
  • BAAI/bge-large-zh-v1.5
  • BAAI/bge-m3
  • sentence-transformers/all-MiniLM-L6-v2
  • sentence-transformers/all-MiniLM-L12-v2
  • sentence-transformers/all-mpnet-base-v2
  • sentence-transformers/paraphrase-MiniLM-L12-v2
  • sentence-transformers/paraphrase-multilingual-mpnet-base-v2
  • nomic-ai/nomic-embed-text-v1
  • nomic-ai/nomic-embed-text-v1.5 - pairs with nomic-embed-vision-v1.5 for image-to-text search
  • intfloat/multilingual-e5-small
  • intfloat/multilingual-e5-base
  • intfloat/multilingual-e5-large
  • mixedbread-ai/mxbai-embed-large-v1
  • Alibaba-NLP/gte-base-en-v1.5
  • Alibaba-NLP/gte-large-en-v1.5
  • lightonai/ModernBERT-embed-large
  • Qdrant/clip-ViT-B-32-text - pairs with clip-ViT-B-32-vision for image-to-text search
  • jinaai/jina-embeddings-v2-base-code
  • jinaai/jina-embeddings-v2-base-en
  • google/embeddinggemma-300m
  • nomic-ai/nomic-embed-text-v2-moe - requires nomic-v2-moe feature (candle backend)
  • Qwen/Qwen3-Embedding-0.6B - requires qwen3 feature (candle backend)
  • Qwen/Qwen3-Embedding-4B - requires qwen3 feature (candle backend)
  • Qwen/Qwen3-Embedding-8B - requires qwen3 feature (candle backend)
  • Qwen/Qwen3-VL-Embedding-2B - requires qwen3 feature (candle backend, multimodal via Qwen3VLEmbedding)
  • snowflake/snowflake-arctic-embed-xs
  • snowflake/snowflake-arctic-embed-s
  • snowflake/snowflake-arctic-embed-m
  • snowflake/snowflake-arctic-embed-m-long
  • snowflake/snowflake-arctic-embed-l

Quantized versions are also available for several models above (append Q to the model enum variant, e.g., EmbeddingModel::BGESmallENV15Q). EmbeddingGemma additionally ships a 4-bit build as EmbeddingModel::EmbeddingGemma300MQ4.

Sparse Text Embedding

Click to list models

  • prithivida/Splade_PP_en_v1 - Default
  • BAAI/bge-m3
  • opensearch-project/opensearch-neural-sparse-encoding-doc-v3-gte - Inference-free

Image Embedding

Click to list models

  • Qdrant/clip-ViT-B-32-vision - Default
  • Qdrant/resnet50-onnx
  • Qdrant/Unicom-ViT-B-16
  • Qdrant/Unicom-ViT-B-32
  • nomic-ai/nomic-embed-vision-v1.5

Reranking

Click to list models

  • BAAI/bge-reranker-base - Default
  • BAAI/bge-reranker-v2-m3
  • jinaai/jina-reranker-v1-turbo-en
  • jinaai/jina-reranker-v2-base-multiligual

✊ Support

To support the library, please donate to our primary upstream dependency, ort - The Rust wrapper for the ONNX runtime.

Installation

Run the following in your project directory:

bash
cargo add fastembed

Or add the following line to your Cargo.toml:

toml
[dependencies]
fastembed = "7"

Text Embeddings

…

Sparse Text Embeddings

…

Image Embeddings

…

Candidates Reranking

…

Locally Available Models

Alternatively, local model files can be used for inference via the try_new_from_user_defined(...) methods of the respective structs.

Similarity Search

Helpers in the similarity module score and rank the vectors embed returns, so a quick in-memory search needs no extra crate:

rust
use fastembed::similarity::{cosine_similarity, top_k};

// `embeddings` is the Vec from model.embed(...)
let query = &embeddings[0];

// Score two vectors directly ([-1.0, 1.0], higher = closer)
let score = cosine_similarity(query, &embeddings[1]);

// Or rank the corpus: (index, score) pairs, best first
let hits = top_k(query, &embeddings, 5);
println!("Closest: {:?}", hits);

For larger corpora or persistence, push the vectors to a vector search engine (e.g. Qdrant) and query there.

Inference-free Sparse Embeddings

rust
use fastembed::{SparseInitOptions, SparseModel, SparseTextEmbedding};

let mut model = SparseTextEmbedding::try_new(
    SparseInitOptions::new(SparseModel::OpenSearchNeuralSparseDocV3Gte).with_max_length(8192),
)?;

//  This model emits one score per vocabulary entry per token.
// So keep the batch size small.
let documents = model.embed(vec!["Hello World"], Some(4))?;

// Queries are from the tokenizer and a precomputed IDF table alone, without any inference.
let queries = model.query_embed(vec!["Hello World"])?;

Qwen3 Embeddings

Qwen3 embedding models are available behind the qwen3 feature flag (candle backend).

toml
[dependencies]
fastembed = { version = "7", features = ["qwen3"] }
rust
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,
)?;

// Text-only usage with the Qwen3-VL embedding checkpoint is also supported:
// let model = Qwen3TextEmbedding::from_hf("Qwen/Qwen3-VL-Embedding-2B", &device, DType::F32, 512)?;

let embeddings = model.embed(&["query: ...", "passage: ..."])?;
println!("Embeddings length: {}", embeddings.len());

For multimodal text/image usage with Qwen/Qwen3-VL-Embedding-2B:

rust
use candle_core::{DType, Device};
use fastembed::Qwen3VLEmbedding;

let device = Device::Cpu;
let model = Qwen3VLEmbedding::from_hf(
    "Qwen/Qwen3-VL-Embedding-2B",
    &device,
    DType::F32,
    2048,
)?;

let image_embeddings = model.embed_images(&["tests/assets/image_0.png", "tests/assets/image_1.png"])?;
let text_embeddings = model.embed_texts(&["query: blue cat", "query: red cat"])?;

println!("Image embeddings: {}", image_embeddings.len());
println!("Text embeddings: {}", text_embeddings.len());

Nomic Embed Text v2 MoE

The nomic-embed-text-v2-moe model is available behind the nomic-v2-moe feature flag (candle backend). First general-purpose MoE embedding model with 100+ language support.

toml
[dependencies]
fastembed = { version = "7", features = ["nomic-v2-moe"] }
rust
use candle_core::{DType, Device};
use fastembed::NomicV2MoeTextEmbedding;

let device = Device::Cpu;
let model = NomicV2MoeTextEmbedding::from_hf(
    "nomic-ai/nomic-embed-text-v2-moe",
    &device,
    DType::F32,
    512,
)?;

let embeddings = model.embed(&["search_query: ...", "search_document: ..."])?;
println!("Embeddings length: {}", embeddings.len());

BGE-M3 Joint Embeddings

The BGE-M3 model produces dense, sparse, and ColBERT embeddings simultaneously in a single forward pass.

…

Model cache

Models download on first use and load from cache afterwards (no network needed at runtime once cached).

  • FASTEMBED_CACHE_DIR — cache location (default: .fastembed_cache). Equivalent to TextInitOptions::with_cache_dir.
  • HF_HOME — if set, takes precedence over the above.
  • HF_ENDPOINT — Hugging Face mirror base URL, for restricted networks.
  • HF_TOKEN — Hugging Face access token, for gated repositories and higher rate limits. Without it, the token saved by huggingface-cli login is used when present.

DirectML (Windows)

To run models on a GPU via DirectML on Windows, enable the directml feature:

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

Then pass a DirectML execution provider when initializing a model:

rust
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()]),
)?;

When DirectML is detected, fastembed automatically disables memory pattern optimization and parallel execution on the ONNX Runtime session, as required by the DirectML execution provider.

Error handling

Fastembed returns a typed fastembed::Error. The type is re-exported from the crate root. The enum is #[non_exhaustive]. New variants can be added in minor releases without breaking match arms.

rust
use fastembed::{Error, Result, TextEmbedding};

fn load() -> Result {
    let model = TextEmbedding::try_new(Default::default())?;
    Ok(model)
    // ...
}

To handle an error, match on the variant that applies:

rust
use fastembed::{Error, TextEmbedding, TextInitOptions, EmbeddingModel};

match TextEmbedding::try_new(TextInitOptions::new(EmbeddingModel::AllMiniLML6V2)) {
    Ok(model) => { /* ... */ }
    Err(Error::ModelRetrieval { file, source }) => {
        eprintln!("could not fetch {file}: {source}");
    }
    /*
    ...
    */
    Err(Error::Ort(err)) => {
        eprint

Issues· 0 开放

查看全部 Issues在 GitHub 打开

暂无开放 Issues,或尚未同步最近议题。

> 标签

Rustembeddingsfastembedragreranker

暂无评论,来聊聊你的看法吧

> 工具信息

发布日期2026年8月1日
最后更新2026年9月17日
分类编程语言
定价开源

> 相关工具

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言