StarlightSearch/EmbedAnything · 上手攻略

  • 仓库:StarlightSearch/EmbedAnything
  • 链接:https://github.com/StarlightSearch/EmbedAnything
  • 分类:AI Infrastructure · Embedding / RAG
  • 作者:Jay
  • 更新:2026-08-17

这是什么

StarlightSearch/EmbedAnything 是一个用 Rust 构建的高性能、多模态 embedding 管道。它支持从文本、图片、音频、PDF、网站等多种来源生成向量嵌入,并与 Milvus、Weaviate、Elastic、SingleStore 等主流向量数据库无缝对接,核心卖点是零 PyTorch 依赖低内存占用流式索引,已在 Elastic / Weaviate / Milvus 等企业生产环境使用。

定位:RAG(检索增强生成)场景下,替代 sentence-transformers + LangChain 的 Rust 原生方案。


解决什么问题

传统 embedding 方案(Python + PyTorch)的痛点:

  • PyTorch 依赖:生产环境部署繁琐,镜像体积大,GPU 显存占用高
  • 串行瓶颈:文档预处理和模型推理串行执行,吞吐量受限
  • 多数据源割裂:PDF、图片、音频各用不同工具处理,流程碎片化

EmbedAnything 的解法:

  • Rust MPSC 并发:embedding 生成与向量落库并行执行,消除串行瓶颈
  • 无 PyTorch:纯 Rust 实现,ONNX Runtime 做推理后端,内存占用极低
  • 多模态统一抽象:文本 / PDF / 图片 / 音频 / 网站 / S3,1 个 pipeline 搞定
  • 向量流式写入:向量直接落数据库,不在内存中堆积,避免 OOM

快速安装

pip 安装(CPU 版)

pip install embed-anything

GPU 加速版(推荐用于 ColPali 等多模态模型)

pip install embed-anything-gpu

⚠️ Windows GPU 用户:如果运行时报 CUDA 错误,执行:

import os
os.add_dll_directory("C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.6/bin")

或在 Python 代码前加入上述路径。


核心用法

基础:从文件生成 Embedding

import embed_anything
from embed_anything import EmbeddingModel, TextEmbedConfig

# 从 Hugging Face 加载模型
model = EmbeddingModel.from_pretrained_hf(
    model_id="sentence-transformers/all-MiniLM-L12-v2"
)

# 配置分块策略
config = TextEmbedConfig(
    chunk_size=1000,       # 每块最大字符数
    batch_size=32,          # 并行处理的块数
    splitting_strategy="sentence"  # "sentence" | "word" | "semantic"
)

# embed 文件(支持 PDF / TXT / MD 等)
data = embed_anything.embed_file("path/to/your/file.pdf", embedder=model, config=config)

# 访问 embedding 和文本
for item in data:
    print(f"文本片段: {item.text[:100]}...")
    print(f"向量维度: {len(item.embedding)}")
    print(f"元数据: {item.metadata}")

加载自定义 / 企业模型(支持 30+ 种模型)

from embed_anything import EmbeddingModel

model = EmbeddingModel.from_pretrained_hf(
    model_id="sentence-transformers/all-MiniLM-L6-v2",
    pooling="mean"  # mean | cls | last_token
)

支持的模型类型(部分):

模型族 代表模型 备注
Jina jinaai/jina-embeddings-v2-small-en HF 官方集成
BERT 系 sentence-transformers/all-MiniLM-L12-v2 最常用
CLIP openai/clip-* 图文多模态
ColPali starlight-ai/colpali-v1.2-merged-onnx PDF 多模态
Colbert jinaai/jina-colbert-v2 延迟交互
SPLADE prithivida/Splade_PP_en_v1 稀疏向量
Qwen3-Embedding Qwen/Qwen3-Embedding-0.6B 2025 新模型
Gemma3 google/embeddinggemma-300m 轻量多语言

语义分块(Semantic Chunking)

from embed_anything import EmbeddingModel, TextEmbedConfig

# 主模型
model = EmbeddingModel.from_pretrained_hf(
    model_id="sentence-transformers/all-MiniLM-L12-v2"
)

# 语义编码器(判断分块边界)
semantic_encoder = EmbeddingModel.from_pretrained_hf(
    model_id="jinaai/jina-embeddings-v2-small-en"
)

config = TextEmbedConfig(
    chunk_size=1000,
    splitting_strategy="semantic",
    semantic_encoder=semantic_encoder
)

data = embed_anything.embed_file("document.pdf", embedder=model, config=config)

延迟分块(Late Chunking)

from embed_anything import EmbeddingModel, TextEmbedConfig

model = EmbeddingModel.from_pretrained_hf(
    model_id="sentence-transformers/all-MiniLM-L12-v2"
)

config = TextEmbedConfig(
    chunk_size=1000,
    splitting_strategy="sentence",
    late_chunking=True  # 启用延迟分块
)

data = model.embed_file("attention.pdf", config=config)

稀疏向量(SPLADE)

from embed_anything import EmbeddingModel

model = EmbeddingModel.from_pretrained_hf(model_id="prithivida/Splade_PP_en_v1")
config = TextEmbedConfig(chunk_size=1000, batch_size=32)

data = embed_anything.embed_file("document.txt", embedder=model, config=config)

ONNX 后端

from embed_anything import EmbeddingModel, WhichModel, ONNXModel, Dtype

model = EmbeddingModel.from_pretrained_onnx(
    WhichModel.Bert,
    model_id="onnx_model_link",
    dtype=Dtype.F16  # 半精度加速
)

云端 API 模型

import os
os.environ["COHERE_API_KEY"] = "your-api-key"

from embed_anything import EmbeddingModel, WhichModel

model = EmbeddingModel.from_pretrained_cloud(
    WhichModel.CohereVision,
    model_id="embed-v4.0"
)

RAG 管道:嵌入 + 向量数据库适配器

完整 Colab 教程:E2E Retrieval with VectorDB Adapters

# 向量数据库适配器示例(Milvus / Weaviate / Elastic / SingleStore)
# 详见 examples/adapters/

典型适用场景

场景 适合原因
企业 RAG 生产部署 无 PyTorch,低内存,可直接上生产
多模态文档检索 PDF + 图片 + 音频统一 embedding
S3 海量数据 embedding 直接从 AWS S3 拉取,无需先下载
ColPali 视觉检索 ONNX 推理,GPU 效率高
混合搜索(dense + sparse) SPLADE 稀疏向量 + BERT 稠密向量

坑与注意

  1. Windows CUDA 路径:GPU 版在 Windows 上运行时需手动添加 CUDA DLL 路径(见上文),否则报 cuda error
  2. WhichModel 已废弃:README 明确标注 WhichModel has been deprecated in from_pretrained_hf,新代码直接用 model_id 字符串
  3. 依赖 Candle / ONNX Runtime:非 PyTorch 意味着部分 HF 模型需要先转 ONNX 才能用,具体见各模型文档
  4. S3 支持:直接从 AWS S3 bucket 拉文件,但需配置 AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY 环境变量
  5. 非 LLM:EmbedAnything 只做 embedding,不涉及生成;是 RAG 管道中「检索」这一环

与同类对比

项目 语言 PyTorch 多模态 向量 DB 集成
EmbedAnything Rust ✅ PDF/图片/音频/S3 Milvus / Weaviate / Elastic / SingleStore
sentence-transformers Python 仅文本 需 LangChain
LangChain Python 通用适配
LlamaIndex Python 通用适配
fasttokenizer (HuggingFace) Python 仅文本

核心差异:EmbedAnything 是目前最干净的「无 PyTorch embedding pipeline」,Rust 的内存安全 + 并发模型在向量流式写入场景有明显优势,适合生产级 RAG。代价是插件生态不如 LangChain 丰富。


一句话结论

如果你在搭建生产级 RAG 系统且想摆脱 PyTorch 的部署包袱,EmbedAnything 是目前最成熟的 Rust embedding 管道;但如果需要完整的 LLM + RAG 端到端方案,仍需搭配 LangChain 或 LlamaIndex 使用。


来源:GitHub README · PyPI · Blog · Milvus 集成文档