2026 年 1 月 20 日·6 分钟读完·RAG向量数据库检索pgvector

RAG 全链路(二):向量库选型与混合检索

按查询、权限过滤和运维条件选择向量库;解释向量与词法检索的互补、RRF 融合,以及 ANN 召回和业务证据召回的区别。

更新与核对 · 2026-10-11

上一篇准备了可追溯的文档块。这一篇解决“如何把正确的块找出来”。向量检索适合语义表达,词法检索适合明确词项;选库则是吞吐、过滤、更新和运维的综合决策,不能只拿向量条数划线。

Embedding 选型要覆盖真实查询

先从公开检索榜单筛候选,再用自己的中文、专名、数字和跨段问题验证。维度更高不自动更准确,比较质量之外还要看编码延迟、批量入库成本、查询吞吐和版本稳定性。

文档和查询必须使用匹配的模型版本、预处理与向量空间。有些模型需要不同的 query/document 前缀;只有明确支持降维的模型才能按其规则截断,不能任意裁掉向量后半段。

换模型通常需要重嵌入并重建相应索引:保留旧索引、后台构建新索引、影子比较、灰度切换,最后清理旧版本。不要把新查询向量拿去查旧模型索引。

向量库:按约束选,不按“亿级门槛”选

方案适合的起点要实际验证
PostgreSQL + pgvector已有 PG,需要事务、联表与统一备份过滤后召回、索引内存、业务负载竞争
Qdrant / Milvus 等引擎专用向量服务、扩展与过滤需求部署复杂度、更新、租户隔离、恢复
Chroma本地开发及其支持的服务化场景使用版本的持久化、运维与伸缩能力
FAISS自建进程内检索、离线实验它是索引库,API、持久化、权限要自己补

pgvector 是已有 PostgreSQL 团队的合理候选,但较小规模也可能因高 QPS、强过滤或独立扩容而选专用引擎;专用引擎也不只服务亿级数据。做一次包含目标峰值、增删改与备份恢复的压测,比照抄规模规则更有用。

HNSW:近似检索的“召回”是哪一种

HNSW 是近似最近邻索引,用较少的候选探索换速度。以 pgvector 为例,ef_search 影响查询探索范围,m 和 ef_construction 影响图构建;调大通常付出延迟、内存或构建成本,不能只看一个质量分。pgvector 文档[1]

这里有两个不同指标:ANN recall 对照精确向量搜索,看近似索引找回多少真实近邻;业务证据 Recall@k 对照人工标注,看答案所需证据找回多少。精确近邻也可能不是有用证据,二者不能混用同一个“95%”验收线。

权限过滤是必须项,但“不加思考地写一个 WHERE”不保证候选充足。pgvector 的近似索引查询可能先取候选再过滤,导致结果少于 k;迭代扫描、提高探索范围、分区或部分索引可改善。稀疏租户和严格过滤条件应单独压测。

-- 示意:距离算子必须与索引类型一致;真实权限由服务端给定。
SELECT chunk_id, content
FROM chunks
WHERE tenant_id = $1 AND source_revision = $2
ORDER BY embedding <=> $3::vector
LIMIT $4;

租户 ID 不能由模型任意选择。数据库行级安全或服务层授权要覆盖向量、词法、重排输入与引用展示。未授权文档不能先喂给模型再从最终回答删除。

混合检索与 RRF:融合排名,别直接加原始分数

向量检索能找到“意思相近”的段落;BM25 根据词频和文档长度排序,适合错误码、题号与明确专名,但中文分词和符号规范化同样重要。纯 BM25 也未必保证精确命中。

两路分数尺度不同,直接相加可能让一方压倒另一方。RRF(Reciprocal Rank Fusion)按排名融合:

RRF(d) = Σ w_j / (c + rank_j(d))

c 是平滑常数,常见实验起点为 60;w_j 是通路权重。未出现在某一路的文档,该路贡献为零。输出 top-k 的 k 与公式里的 c 是两个参数。

例如文档 A 在两路分别排第 1 和第 10,B 分别第 3 和第 2,等权且 c=60:A 约 0.03068,B 约 0.03200,B 排在前面。融合后按 chunk 或父文档去重,再进入重排。

混合检索流程:可信权限过滤、两路召回、排名融合、去重与评测

图 1 · 两路都要受相同授权边界约束,融合质量由真实查询验证。

混合检索是值得测试的常用基线,不是所有语料必须启用的定律。精确题号可先走结构化查询;语义开放问题才更依赖向量。Embedding 服务失败时词法可提供部分能力,需明确这个降级的质量范围。

三个指标与一个常见误读

指标衡量什么局限
Recall@k已标注相关证据中有多少进入前 k依赖证据标注完整性
MRR第一条相关结果的倒数排名平均值不衡量其余证据是否齐全
nDCG@k有等级相关性时的排序质量依赖分级标注规则

若标注有四条必要证据,前十找回三条,Recall@10 为 0.75;第一条相关证据排第二,该查询 reciprocal rank 为 0.5。多跳问题可能三条都“相关”却仍缺最后一条决定性证据,应补测证据完整率和最终答案正确率。

Anthropic 的 35% → 49% 指的是相对失败率降幅增加了 14 个百分点,不是业务召回率直接增加 14 个百分点。实验数据及限制见 切分篇。

运维与调优顺序

  1. 先建可追溯评测集,分中文、符号、强过滤和多跳查询。
  2. 对照精确搜索测 ANN recall,再测业务证据召回。
  3. 比较纯词法、纯向量和融合,保持语料与权限一致。
  4. 调探索范围和候选数,联合看 p95、成本与质量。
  5. 内容更新保持版本一致,删除验证所有检索路径不可见。
  6. 内存成为瓶颈时才比较量化,并用原向量精排验证损失。

向量库内部的删除与压缩机制各不相同,不能把“墓碑加批量重建”当作所有 HNSW 系统的统一运维命令。恢复演练和容量余量也应进入选型结论。

下一篇将候选转成可验证答案:重排、引用和评估。

OpenAI 托管检索与自建链路:比较可控范围

OpenAI File search[6]提供托管的语义与关键词检索,并支持文件属性过滤和检索结果返回选项。它减少自行执行检索工具的工作,但知识源质量、访问范围与答案验收仍需要应用负责。

与自建 pgvector / Milvus / Chroma 链路比较时,固定同一授权语料与问题,记录解析覆盖、召回、引用支撑、更新/删除可见性、p95、费用和运维成本。托管与自建的可配置项不同,不能假定切分、重排和过滤具有完全相同的行为;若关键实验参数无法固定,应把差异作为比较局限。

Anthropic 的 Contextual Retrieval[7]是为检索块补充定位上下文的方法与实验,不是一个与 OpenAI File search 完全等价的托管产品。实验结果与支撑范围见切分篇。

参考资料

正文中的编号可跳转至对应来源。工程报告、官方文档与研究论文分别标注;支撑范围说明该资料能证明什么,以及不能推导什么。

  1. [1]官方文档
    pgvector — Indexes, filtering and iterative scans

    支撑范围: 索引类型、过滤与迭代扫描的官方实现说明;具体性能受数据与配置影响。

    github.com核对于 2026-10-11
  2. [2]官方文档
    Qdrant — Hybrid queries

    支撑范围: 混合查询与融合接口;不能据此推导跨引擎统一性能排名。

    qdrant.tech核对于 2026-10-11
  3. [3]官方文档
    Milvus — Official project overview

    支撑范围: 官方项目的检索与部署能力概览;选型仍需工作负载验证。

    github.com核对于 2026-10-11
  4. [4]官方文档
    FAISS — Documentation

    支撑范围: 向量相似度搜索与索引算法;不提供业务权限或完整持久服务保证。

    faiss.ai核对于 2026-10-11
  5. [5]研究论文
    RRF 原始论文(SIGIR 2009)

    支撑范围: RRF 的原始方法与实验;融合参数及收益有被测数据边界。

    cormack.uwaterloo.ca核对于 2026-10-11
  6. [6]官方文档
    OpenAI — File search

    支撑范围: 托管语义与关键词检索、文件属性过滤和结果返回能力;资料权限、质量与验收由应用治理。

    developers.openai.com核对于 2026-10-11
  7. [7]工程报告
    Anthropic — Contextual Retrieval

    支撑范围: 为块补充定位上下文并组合向量、BM25 与重排的实验;检索失败率下降不等于答案正确率同比提高。

    www.anthropic.com核对于 2026-10-11
↑ 回到全部文章