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 类型(按我使用频率+特点):
VectorStoreRetriever(基础款):向量库相似度检索 top-k,一切 RAG 的起点。参数 top_k、filter、score_threshold。
MultiQueryRetriever(查询扩展):LLM 生成多个视角的 query 分别检索、结果去重合并——解决单一表述召回不全,多跳问题提升明显。
ContextualCompressionRetriever(后处理精排):检索后再过压缩器/重排器(如 CrossEncoderReranker)——「粗排 50 精排 5」的标准实现载体,RAG 提效第一杠杆。
SelfQueryRetriever(结构化过滤):LLM 从自然语言抽「语义 query + 元数据 filter」(「2023 年后的销售部文档」)——多租户、按时间/部门过滤场景必备。
ParentDocumentRetriever(父子块):小块检索、返回父块大上下文——检索准与上下文全的兼得方案。
EnsembleRetriever(混合检索):BM25Retriever + 向量检索 RRF 融合——专有名词/型号类 query 的救星。
MultiVectorRetriever(多向量):一个文档多个向量表示(摘要向量+原文向量、表格多视角)——表格、长文档场景。
Self-RAG/自适应类(LangGraph 实现):先判断「要不要检索」,检索后评估质量决定重检或直答——省成本+提准确。
组合范式(生产配方):
MultiQuery(扩展) → Ensemble(BM25+向量, RRF)
→ ContextualCompression(rerank) → 取top5 → 生成选型心法:从 VectorStore 起步,按评测坏例加层——每层都加延迟和成本,评测数据说了算。