Skip to content

LangChain 中的 Retriever 检索器有哪些类型?各有什么特点? ​

  • 标签:LangChain、Retriever 检索器

🏛 业务架构师 ​

LangChain 的 Retriever 类型与特点,我按"检索策略"归类:

1. VectorStoreRetriever(基线):向量相似度检索——语义召回主力,参数 top_k、score_threshold、filter(元数据过滤)。所有 RAG 的起点。

2. MultiQueryRetriever(查询扩展):用 LLM 把原 query 生成多个变体并行检索、结果融合——治"用户问法与文档写法不匹配",代价是每次多一次 LLM 调用。

3. ContextualCompressionRetriever(检索后压缩):检索结果再过一遍"抽取器/压缩器"(LLMChainExtractor 等),只保留与问题相关的句子再送模型——治"分块太大致上下文稀释"。

4. ParentDocumentRetriever(父子分块):小块做精准检索、返回其所属大块——检索精度与上下文完整兼得,知识库问答的首选策略。

5. SelfQueryRetriever(自查询):LLM 从自然语言抽元数据过滤条件+语义查询组合——治"条件筛选型需求"(时效、部门、产品线过滤)。

6. EnsembleRetriever(混合检索):向量+BM25(BM25Retriever)多路召回 RRF 融合——治"行话/编码/精确词"召回盲区,生产标配。

7. MultiVectorRetriever(多向量检索):一个文档多个向量(摘要向量、假设问题向量、子块向量)——提高"问法多样性"下的命中率。

选型的业务逻辑:别一次全上——从 VectorStore 起步,按 badcase 归因加层:召回不到→MultiQuery/Ensemble;召回不准→ContextualCompression/ParentDocument;条件筛选需求→SelfQuery。每加一层都有延迟成本,用评测集证明收益再上。

🏗 系统架构师 ​

LangChain Retriever 我按检索策略归类:

  • VectorStoreRetriever(基础):向量相似度 Top-K——语义检索默认形态;search_kwargs={"k": 5, "filter": {...}} 支持元数据过滤;
  • MultiQueryRetriever(查询扩展):LLM 生成多个 query 变体并行检索、结果合并——解决"query 与文档用语失配";
  • SelfQueryRetriever(自查询):LLM 从自然语言抽结构化过滤条件 + 语义查询("2024 年的 PDF"→ filter + query)——pre-filter 精准裁剪;
  • ContextualCompressionRetriever(后压缩):检索后对 chunk 再抽取/压缩(LLM 或嵌入模型过滤)——只把相关段落给模型;
  • EnsembleRetriever(混合检索):向量 + BM25 多路结果 RRF 融合——专有名词与语义互补,生产标配;
  • ParentDocumentRetriever(父子块):小块检索、返回父文档——精度与上下文完整性的解耦设计;
  • MultiVectorRetriever(多向量):同一文档多视角向量(摘要、假设问题 HyDE、分块)——召回覆盖面增强;
  • Self-Retriever / Time-weighted(时间加权):新文档加权——时效性场景。

选型逻辑(架构师视角):

  • 起步:VectorStore + Ensemble(向量+BM25)覆盖 80% 场景;
  • 精度提升路径:加 ContextualCompression 或独立 Rerank → SelfQuery(有结构化元数据时)→ ParentDocument(文档长且需要上下文);
  • 路由组合:不同 query 类型用不同 Retriever(FAQ 精确匹配 / 文档语义检索 / 表格走 SQL 通道)——检索层的"微服务化";
  • 每个 Retriever 独立评测(recall@K),组合后端到端评测——检索是 RAG 效果的第一瓶颈,值得配置最多调优精力。

💻 全栈开发专家 ​

LangChain 的 Retriever 类型(按我使用频率+特点):

  1. VectorStoreRetriever(基础款):向量库相似度检索 top-k,一切 RAG 的起点。参数 top_k、filter、score_threshold。

  2. MultiQueryRetriever(查询扩展):LLM 生成多个视角的 query 分别检索、结果去重合并——解决单一表述召回不全,多跳问题提升明显。

  3. ContextualCompressionRetriever(后处理精排):检索后再过压缩器/重排器(如 CrossEncoderReranker)——「粗排 50 精排 5」的标准实现载体,RAG 提效第一杠杆。

  4. SelfQueryRetriever(结构化过滤):LLM 从自然语言抽「语义 query + 元数据 filter」(「2023 年后的销售部文档」)——多租户、按时间/部门过滤场景必备。

  5. ParentDocumentRetriever(父子块):小块检索、返回父块大上下文——检索准与上下文全的兼得方案。

  6. EnsembleRetriever(混合检索):BM25Retriever + 向量检索 RRF 融合——专有名词/型号类 query 的救星。

  7. MultiVectorRetriever(多向量):一个文档多个向量表示(摘要向量+原文向量、表格多视角)——表格、长文档场景。

  8. Self-RAG/自适应类(LangGraph 实现):先判断「要不要检索」,检索后评估质量决定重检或直答——省成本+提准确。

组合范式(生产配方):

MultiQuery(扩展) → Ensemble(BM25+向量, RRF) 
  → ContextualCompression(rerank) → 取top5 → 生成

选型心法:从 VectorStore 起步,按评测坏例加层——每层都加延迟和成本,评测数据说了算。