介绍 Embex:通用向量数据库 ORM
发布: (2026年1月3日 GMT+8 19:05)
5 min read
原文: Dev.to
Source: Dev.to

TL;DR: Embex 是一个通用的向量数据库 ORM,能够在 Qdrant、Pinecone、Chroma、LanceDB、Milvus、Weaviate 和 PgVector 之间切换,无需更改任何代码。它基于 Rust 核心并使用 SIMD 加速,比纯 Python/JS 实现快 4 倍。
我想要解决的问题
如果你使用过向量数据库,你一定了解其中的痛点:
- 每个数据库的 API 都不同 – Qdrant 使用一种格式,Pinecone 使用另一种,Chroma 又是另一种。
- 供应商锁定 – 更换提供商意味着要重写整个代码库。
- 性能权衡 – 大多数客户端都是纯 Python/JS 实现,导致性能无法发挥。
- 部署复杂 – 入门需要 Docker、API 密钥、云账户等。
我想要一个解决方案,满足以下条件:
- ✅ 能兼容任何向量数据库
- ✅ 零配置即可开始使用
- ✅ 提供生产级别的性能
- ✅ 能从原型阶段平滑扩展到生产环境
于是我创建了 Embex。
Embex 有何不同?
1. 通用 API – 即时切换提供商
# Development: LanceDB (embedded, zero setup)
client = await EmbexClient.new_async("lancedb://./data")
# Production: Switch to Qdrant (just change the config!)
client = await EmbexClient.new_async(
"qdrant://https://your-cluster.com",
api_key="..."
)
# Everything else stays the same!
await collection.insert(points)
results = await collection.search(vector, top_k=10)
相同代码。不同后端。零重写。
注意: Embex 使用 async 初始化 (
new_async()) 来统一处理本地(LanceDB)和云端提供商(Qdrant、Pinecone),确保在所有提供商之间行为一致。
2. 基于 Rust 核心并支持 SIMD 加速
Embex 并非薄包装——它基于共享的 Rust 核心并使用 SIMD 指令:
- 提升 4 倍 的向量运算(点积、余弦相似度)
- 零拷贝 的跨语言数据传递
- < 5 % 开销 相比原生客户端
# This runs on optimized Rust code with AVX2/NEON
results = await collection.search(query_vector, top_k=10)
3. 简单起步,后续扩展
| Stage | Provider | Typical Use |
|---|---|---|
| 第 1 天 – 学习 | lancedb://./data | 嵌入式,无 Docker,无 API 密钥 |
| 第 2 周 – 预演 | qdrant://https://... | 托管云,连接池 |
| 第 1 个月 – 扩展 | milvus://https://... | 十亿级向量,分布式 |
# Day 1 – LanceDB
client = await EmbexClient.new_async("lancedb://./data")
# Week 2 – Qdrant
client = await EmbexClient.new_async("qdrant://https://...", api_key="...")
# Month 1 – Milvus
client = await EmbexClient.new_async("milvus://https://...")
快速入门:5 分钟实现语义搜索
import asyncio
from embex import EmbexClient, Point
from sentence_transformers import SentenceTransformer
async def main():
# 1️⃣ Setup (LanceDB – zero setup!)
client = await EmbexClient.new_async("lancedb://./data")
model = SentenceTransformer('all-MiniLM-L6-v2')
# 2️⃣ Create collection
await client.create_collection(
"products",
dimension=384,
distance="cosine"
)
# 3️⃣ Insert documents
docs = [
"Apple iPhone 15 Pro Max",
"Samsung Galaxy S24 Ultra",
"Fresh Organic Bananas"
]
points = [
Point(
id=str(i),
vector=model.encode(doc).tolist(),
metadata={"text": doc}
)
for i, doc in enumerate(docs)
]
await client.insert("products", points)
# 4️⃣ Search
query = "smartphone"
query_vector = model.encode(query).tolist()
results = await client.search(
collection_name="products",
vector=query_vector,
top_k=2
)
for result in results.results:
print(f"{result.metadata['text']} (score: {result.score:.3f})")
asyncio.run(main())
就是这样! 无需 Docker、无需 API 密钥、无需云设置。只需:
pip install embex lancedb sentence-transformers
即可运行。
性能基准
- SIMD 加速: 3.6× – 4.0× 更快的点积 / 余弦相似度
- 最小开销: < 5 % 相比原生客户端
- 包大小: 8‑15 MB(从 65 MB+ 优化而来)
生产特性
- ✅ 连接池 – 高并发连接管理
- ✅ 迁移 – 类 Git 的模式更改版本控制
- ✅ 可观测性 – OpenTelemetry 指标和追踪
- ✅ 类型安全 – 完整的 TypeScript 定义和 Python 类型提示
支持的提供商
- LanceDB – 嵌入式,零配置
- Qdrant – 生产环境 & 本地
- Pinecone – 无服务器
- Chroma – AI 原生
- PgVector – PostgreSQL 扩展
- Milvus – 十亿级规模
- Weaviate – 模块化
立即尝试
# Python
pip install embex lancedb sentence-transformers
# Node.js
npm install @bridgerust/embex lancedb @xenova/transformers
接下来是什么?
敬请期待即将推出的功能、社区插件以及与流行 LLM 工具包的更深入集成!
Embex 反馈
我们正在开发 Embex,期待您的反馈:
- 缺少哪些功能?
- 我们应该优先考虑哪些使用场景?
- 您遇到的性能问题有哪些?
- 对供应商支持的请求有哪些?
有疑问?反馈?问题? 在下方留下评论或在 GitHub 上打开 issue!
