学习笔记 · Obsidian
托管与专用向量数据库
结论
- MongoDB Atlas、Pinecone、Qdrant、turbopuffer、Weaviate 都实现统一 VectorStore,但 ID、删除、filter、hybrid、server-side embedding 与写后可见性差异明显。
- 生产选型要先确定多租户隔离、metadata 查询、hybrid、数据驻留、索引生命周期和成本,再比较 SDK 便利性。
- 所有服务都要验证 embedding dimension;index 维度或模型变更应新建索引,而非混写。
能力对照
| 后端 | 特色 | 重要边界 |
|---|---|---|
| MongoDB Atlas | Mongo 文档 + Vector Search;8.2+ 可自动 embedding | Node-only;filter 字段需进 index;写后有索引延迟 |
| Pinecone | 托管 namespace/index、批量写 | SDK 文档固定 v5;写后轻微延迟;维度需预建匹配 |
| Qdrant | 向量 point + payload、丰富 filter | 当前 LangChain JS 页面称 top-level ID/delete 不支持,filter key 加 metadata. |
| turbopuffer | namespace 与低成本检索 | 当前只支持 string metadata value |
| Weaviate | object/vector、structured filter、hybrid、生成式 RAG | ID 必须 UUID;client v3 以 collections 为主 |
MongoDB Atlas
手动 embedding 要求 MongoDB 7.0+,客户端生成 vector;自动 embedding 要求 8.2+,index 的 autoEmbed 配置 Voyage 模型,由 Atlas 服务端生成。
- 手动模式构造器传 embeddings;自动模式只传配置。
textKey、embeddingKey必须与 index definition 一致。- metadata 预过滤字段也要在 vector index 中声明。
- 同 ID 写入会更新;新文档需等待 Atlas Search index 可见,自动 embedding 延迟更长。
- 结束时关闭
MongoClient,避免连接泄漏。
自动 embedding 简化客户端,但把模型版本、费用与数据处理移到 MongoDB 控制面;需固定 model/index 配置并建立重建策略。
Pinecone
PineconeStore.fromExistingIndex() 接受官方 v5 SDK index,可设置 maxConcurrency 和 namespace。一个 batch 最多 1000 vectors 的文档注释意味着吞吐需要按 provider 限额和内存控制。
- namespace 常用于租户/版本隔离,但仍需服务端强制映射,不能让客户端自由指定。
- ID 写入、按 ID 删除和 metadata filter 都受支持。
- 写后有短暂不可见窗口;异步任务要区分“写请求成功”和“可检索”。
Qdrant
QdrantVectorStore.fromExistingCollection() 使用 REST client;payload filter 的字段以 metadata. 前缀引用。当前页面明确 top-level document IDs 和 deletion 不受该 wrapper 支持,因此若业务要求精确删除,要核对最新 API/SDK 或使用受控底层 client,不能假定通用 delete() 一定可用。
turbopuffer
按 namespace 创建 TurbopufferVectorStore,支持返回 ID、按 ID/全量删除、existing ID upsert 与原生 filter expression。当前 metadata 仅允许字符串,数字/日期需要规范化并承担排序/范围查询语义损失;选型前用真实 filter 验证。
Weaviate
使用官方 TypeScript v3 client 的 connectToWeaviateCloud、connectToLocal 或 connectToCustom。collection 可由 auto-schema 创建,也能显式配置 named vectors、vectorizer、reranker、generative model。
- 自定义 ID 必须 UUID;
Filtershelper 做结构化过滤;- hybrid search 融合 vector 与 BM25F,
alpha控制权重; generate()在 Weaviate 内组合检索与生成,会改变模型调用、数据流和费用边界。
上线检查
- 为 tenant 和 index version 设计不可绕过的 namespace/collection。
- 对 add/upsert/delete 建立幂等 ID;观测 indexing lag 并避免立即读误判。
- filter 字段预建索引,压测低/高选择性条件。
- 后端返回 score 含义不同,应用不得跨后端共用固定阈值。
- 做备份/导出、索引重建、双写切换和 provider outage 演练。