跳到主要内容

混合检索

  • 混合检索,能够同时兼容关键词以及语义的匹配
    • 向量检索+关键词检索

关键词检索方案​

  • RAG 关键词检索更适合 FTS / BM25 类方案

PostgreSQL混合检索方案​

text
短期:pgvector + pg_trgm + RRF
中期:pgvector + FTS + ts_rank + RRF
企业级:BM25 + pgvector + RRF

PostgreSQL全文关键词搜索​

  • PostgreSQL 的全文关键词搜索,核心就是 FTS(Full Text Search)
    • 先把文本转换成一个可检索的“词条索引”,再查询
  • ts_rank 是 PostgreSQL 自己的全文搜索排名算法,不是标准 BM25。
  • ts_rank 是 PostgreSQL FTS(全文搜索)里用于“相关性打分/排序”的函数
  • PostgreSQL 关键词全文搜索 = FTS 做匹配 + ts_rank做排序

向量检索和关键词检索并行处理​

  • 向量检索和关键词检索是并行检索处理的
  • 并行检索得到的结果之后,进行候选文档合并,给到Rerank重排序
text
┌→ 向量检索 → Top 20 ─┐
用户 Query ─────────┤ ├→ 合并 → Reranker → Top N
└→ 关键词检索 → Top 20 ─┘

混合检索调用链​

  • Python 负责生成 embedding 和检索流程编排;
  • Node 负责 PostgreSQL、pgvector 和 FTS 查询
  • 向量检索与 FTS 关键词检索在通过 Promise.all 并行执行
  • RRF 等待两路结果完成后进行融合合并;
  • Reranker 只能处理 RRF 返回的候选文档
  • FTS 不需要单独生成向量,直接使用数据库中的 content 字段和 GIN 索引。
text
模型配置解析
↓
Embedding 生成查询向量
↓
向量检索 ─┐
├─ RRF 混合融合
全文检索 ─┘
↓
Rerank
↓
LLM 生成回答