跳转至

pgvector/pgvector

仓库:pgvector/pgvector

这个项目在系统里负责哪一层

pgvector 负责的是 RAG 的数据底座。它解决的不是“世界上最强的向量检索”,而是“如果团队本来就在用 Postgres,能不能把向量检索和业务元数据放进同一套数据库里管理”。

这对大量第一版知识库系统非常重要。第一版最缺的通常不是极限性能,而是低复杂度、可维护性,以及权限、版本和引用能不能走在同一条链上。

先抓整体结构

pgvector 时,先抓四件事:

  • 向量类型和距离算子:解决“怎么存、怎么比”。
  • 索引策略:解决“速度、召回和资源怎么取平衡”。
  • 业务过滤:解决“只在当前用户有权看的范围内检索”。
  • 数据生命周期:解决“更新、重建和失效怎么处理”。

真正成熟的 RAG 系统,不会把这四件事分开想。它们一起决定了检索是不是可用。

一条典型执行链

如果你用 Postgres + pgvector 做企业知识库,一条链通常这样跑:

  1. 文档入库,保留文档 ID、版本、租户、权限、标题等元数据。
  2. 文档切块并生成 embedding。
  3. chunk 文本、embedding 和元数据一起写进表。
  4. 查询时先带上租户、版本、权限、文档类型等过滤条件。
  5. 在过滤后的范围内做向量检索,必要时再结合全文检索或关键词检索。
  6. 召回结果再交给 rerank、引用装配和最终生成。

这条链最值钱的地方是:过滤条件、版本有效性和相似度排序可以放进同一套 SQL 思路里。对企业场景来说,这比单独追求向量检索跑分重要得多。

值得学的设计

pgvector 最值得学的,是它把“向量检索”和“业务过滤”放回了同一个数据系统。很多人一学向量库就容易进入纯算法视角,仿佛只要相似度算得准,系统就会好。企业场景里不是这样。租户、版本、权限、文档类型、时间范围,这些条件和相似度一样重要。

这也是为什么 HNSW、IVFFlat、exact search 不能孤立背。它们不是单独的名词,而是不同的工程取舍。exact search 简单但可能慢,适合规模小或强过滤场景;HNSW 适合追求更稳的近似召回,但索引和资源成本更高;IVFFlat 更依赖参数和数据分布,调优空间更大,也更容易因为数据更新和过滤条件出现波动。

适合借回自己项目的点

  • 第一版系统优先把文档、chunk、租户、版本、权限和 embedding 放在一套数据模型里。
  • 先把数据生命周期设计清楚,再调索引参数。
  • 把“过滤条件 + 相似度 + 版本有效性”一起当成检索主链。
  • 需要精确术语时,尽早考虑 hybrid search,而不是只押宝纯向量。

不要照抄的地方

  • 不要一上来就追复杂索引,数据模型和过滤边界没立住时,索引调优收益很有限。
  • 不要只会写相似度 SQL,却不会解释版本、权限和生命周期。
  • 不要把它讲成“向量魔法”。它首先还是数据库工程和数据建模问题。