学习笔记 · Obsidian

托管与专用向量数据库

LangChainTypeScript

结论

  • MongoDB Atlas、Pinecone、Qdrant、turbopuffer、Weaviate 都实现统一 VectorStore,但 ID、删除、filter、hybrid、server-side embedding 与写后可见性差异明显。
  • 生产选型要先确定多租户隔离、metadata 查询、hybrid、数据驻留、索引生命周期和成本,再比较 SDK 便利性。
  • 所有服务都要验证 embedding dimension;index 维度或模型变更应新建索引,而非混写。

能力对照

后端特色重要边界
MongoDB AtlasMongo 文档 + Vector Search;8.2+ 可自动 embeddingNode-only;filter 字段需进 index;写后有索引延迟
Pinecone托管 namespace/index、批量写SDK 文档固定 v5;写后轻微延迟;维度需预建匹配
Qdrant向量 point + payload、丰富 filter当前 LangChain JS 页面称 top-level ID/delete 不支持,filter key 加 metadata.
turbopuffernamespace 与低成本检索当前只支持 string metadata value
Weaviateobject/vector、structured filter、hybrid、生成式 RAGID 必须 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;
  • Filters helper 做结构化过滤;
  • hybrid search 融合 vector 与 BM25F,alpha 控制权重;
  • generate() 在 Weaviate 内组合检索与生成,会改变模型调用、数据流和费用边界。

上线检查

  1. 为 tenant 和 index version 设计不可绕过的 namespace/collection。
  2. 对 add/upsert/delete 建立幂等 ID;观测 indexing lag 并避免立即读误判。
  3. filter 字段预建索引,压测低/高选择性条件。
  4. 后端返回 score 含义不同,应用不得跨后端共用固定阈值。
  5. 做备份/导出、索引重建、双写切换和 provider outage 演练。