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 稠密向量 |
坑与注意
- Windows CUDA 路径:GPU 版在 Windows 上运行时需手动添加 CUDA DLL 路径(见上文),否则报
cuda error - WhichModel 已废弃:README 明确标注
WhichModel has been deprecated in from_pretrained_hf,新代码直接用model_id字符串 - 依赖 Candle / ONNX Runtime:非 PyTorch 意味着部分 HF 模型需要先转 ONNX 才能用,具体见各模型文档
- S3 支持:直接从 AWS S3 bucket 拉文件,但需配置
AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY环境变量 - 非 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 集成文档