Retriever  Chain in LangChain 完整深度解读
Retriever Chain in LangChain 完整深度解读适配 LangChain 0.1 新版 API区分 legacyRetrievalQA与现代 LCEL 写法 核心定位RAG 的两大基础组件 ——Retriever检索器负责找文档Chain链路负责把检索结果 问题喂给大模型生成答案一、基础概念划分1. Retriever 检索器接口基类BaseRetriever职责接收字符串 query → 返回相关文档列表List[Document]python运行class BaseRetriever: def get_relevant_documents(self, query: str) - List[Document]: ... async def aget_relevant_documents(self, query: str) - List[Document]: ...常见实现VectorStoreRetriever最常用向量数据库包装器相似度检索FAISS/Chroma/PineconeMultiQueryRetriever扩写多条 query 做多路检索召回ParentDocumentRetriever小块检索、返回大块原文SelfQueryRetriever让 LLM 解析过滤条件带元数据筛选EnsembleRetriever多路检索结果融合BM25 向量混合检索ContextCompressionRetriever检索后压缩无用片段关键点Retriever只负责召回文档不调用 LLM不生成答案。2. Chain链路LangChain Chain 本质可执行的调用单元输入字典 → 输出字典旧版Chain基类 新版推荐LCEL — LangChain Expression Language|管道语法所有组件Prompt、LLM、Retriever、Parser统一实现Runnable接口。RAG 核心目标plaintext用户问题 → Retriever召回文档 → 组装Prompt(问题上下文) → LLM生成回答二、经典两种实现方案对比方案 A遗留风格 — RetrievalQA Chain不推荐新项目python运行from langchain.chains import RetrievalQA qa_chain RetrievalQA.from_chain_type( llmllm, chain_typestuff, # 四种文档拼接策略重点 retrievervectorstore.as_retriever(), return_source_documentsTrue )chain_type 四种模式核心考点stuff塞满模式所有检索文档一次性全部塞进 Prompt ✅ 简单、只调用一次 LLM ❌ 上下文窗口有限文档多时触发超限map_reducemap每份文档单独调用 LLM 摘要 reduce把所有摘要汇总再生成最终答案 ✅ 支持超长文档集合 ❌ LLM 调用量大成本高、速度慢map_rerank每份文档独立打分挑选最高分文档生成答案 适合 “只有一份文档包含答案” 场景refine先拿第一篇文档生成答案再依次传入剩余文档迭代优化答案 ✅ 上下文连续性好 ❌ 串行执行速度极慢⚠️ LangChain 官方建议新项目不要用RetrievalQA优先 LCEL。方案 B现代标准 — LCEL RAG Chain【生产首选】标准管道公式plaintext{question} | retriever # 输出 List[Document] | (把文档question灌入prompt模板) | llm | output_parser完整可运行最简模板python运行from langchain.vectorstores import Chroma from langchain_openai import ChatOpenAI, OpenAIEmbeddings from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser from langchain_core.runnables import RunnablePassthrough # 1. 初始化向量库 Retriever vectorstore Chroma.from_texts(..., embeddingOpenAIEmbeddings()) retriever vectorstore.as_retriever(search_kwargs{k: 4}) # 2. Prompt prompt ChatPromptTemplate.from_template( 基于下面上下文回答问题如果找不到答案如实说不知道。 上下文 {context} 问题{question} ) llm ChatOpenAI(modelgpt-3.5-turbo) # 工具函数Document列表拼接成字符串 def format_docs(docs): return \n\n.join(doc.page_content for doc in docs) # 3. LCEL 组装RAG链 rag_chain ( {context: retriever | format_docs, question: RunnablePassthrough()} | prompt | llm | StrOutputParser() ) # 调用 resp rag_chain.invoke(你的问题) print(resp)管道拆解解释{context: retriever | format_docs, question: RunnablePassthrough()}输入字符串 questionquestion直接透传给 prompt 变量question 送入 retriever 拿到文档列表 → format_docs 转为文本上下文字典传入 prompt 模板填充变量送入 LLMStrOutputParser 把 AI 消息转为纯文本优势高度透明每一步可单独调试支持流式.stream()、异步.ainvoke()易于插入中间日志、缓存、重试、过滤器方便改造添加重排序、查询改写、自我检查三、Retriever 进阶核心机制1.search_kwargs参数VectorStoreRetrieverpython运行retriever vectorstore.as_retriever( search_typesimilarity, # 相似度检索 # search_typemmr, # MMR最大边际相关性去冗余 # search_typesimilarity_score_threshold # 阈值过滤 search_kwargs{ k: 4, # 返回top-k文档 score_threshold: 0.6, # 相似度阈值 filter: {source: doc1.pdf} # 元数据过滤 } )similarity单纯距离排序默认MMR召回同时保证相关性 多样性减少重复片段阈值检索低于阈值直接丢弃减少噪声2. 高级 Retriever 组合实战(1) MultiQueryRetriever 查询改写利用 LLM 把原始问题生成多条不同表述 query多路检索提升召回覆盖面python运行from langchain.retrievers.multi_query import MultiQueryRetriever mq_retriever MultiQueryRetriever.from_llm(retrieverbase_retriever, llmllm)(2) ContextCompressionRetriever 上下文压缩检索到文档后用 LLM 过滤掉无关段落减少 Prompt 占用 tokenpython运行from langchain.retrievers import ContextualCompressionRetriever from langchain.retrievers.document_compressors import LLMChainExtractor compressor LLMChainExtractor.from_llm(llm) compress_retriever ContextualCompressionRetriever(base_retrieverretriever, base_compressorcompressor)(3) EnsembleRetriever 混合检索向量 BM25稀疏检索 (BM25) 稠密向量检索融合大幅提升冷召回效果工业界标配python运行from langchain.retrievers import EnsembleRetriever ensemble_retriever EnsembleRetriever( retrievers[bm25_retriever, vector_retriever], weights[0.5, 0.5] )四、RAG 常见扩展 Chain 链路LCEL 扩展1. 带源文档返回LCEL 原生不像 RetrievalQA 自动返回 source_docs需要手动封装python运行from langchain_core.runnables import RunnableParallel rag_chain_with_source RunnableParallel( {context: retriever, question: RunnablePassthrough()} ).assign( answer (lambda x: {context: format_docs(x[context]), question: x[question]}) | prompt | llm | StrOutputParser() ) out rag_chain_with_source.invoke(问题) # out[context] → List[Document] # out[answer] → 回答文本2. 自校验 RAGSelf-RAG 思路简化版链路检索 → 判断文档是否相关 → 不相关则重新检索 / 直接拒绝回答3. 路由 Retriever多个知识库分流plaintext用户问题 → LLM路由判断属于哪个知识库 → 调用对应Retriever五、关键误区澄清❌ 混淆 Retriever ≠ VectorStore VectorStore存储 向量相似度计算 Retriever封装 VectorStore统一的检索接口一个 VectorStore 可以实例多个不同参数 Retriever❌ RetrievalQA RAG 标准实现 ✅ RetrievalQA 只是早期封装灵活性差LCEL 是官方现代标准❌ retriever 直接接收结构化对象 ✅ BaseRetriever 输入永远是字符串 query不能直接传复杂对象❌ stuff 模式能无限塞文档 ✅ 超出模型上下文窗口会报错 / 截断必须配合文档压缩、map_reduce 或者切分优化六、完整数据流全景图plaintextUser Query(str) ↓ 【Runnable字典分发】 ├─ question → 直接透传 └─ query → Retriever向量库/BM25等 ↓ List[Document] → format_docs → 上下文文本 ↓ PromptTemplate填充 {context} {question} ↓ ChatLLM ↓ OutputParser → 最终答案七、调试手段开发必备单独测试 Retriever先确认召回文档质量python运行docs retriever.get_relevant_documents(测试问题) for d in docs: print(d.page_content, d.metadata)RAG 效果差 70% 问题出在检索召回而不是 LLM 生成打印送入 LLM 完整 Prompt排查是否拼接错误使用.bind()设置温度、流式输出python运行rag_chain.stream(问题)八、生产优化方向调整k、MMR、相似度阈值平衡召回数量与噪声接入重排序器CrossEncoderReranker检索后精排增加查询改写、拼写纠错增加缓存相同 query 避免重复向量检索增加文档去重、长度过滤

相关新闻

Claude三大模型代码能力评测与选型指南

Claude三大模型代码能力评测与选型指南

1. 项目背景与核心问题最近在开发者社区看到不少关于Claude不同模型版本的讨论,尤其是针对代码生成能力的对比。作为一个长期使用AI辅助编程的工具人,我决定对Claude的三个主要模型——Opus、Sonnet和Haiku进行一次系统的横向评测。这次测试主要聚焦两个…

2026/7/24 6:52:14 阅读更多 →
AI辅助学术写作工具书匠策AI功能解析与应用指南

AI辅助学术写作工具书匠策AI功能解析与应用指南

1. 学术写作工具的现状与痛点作为一名在高校从事科研工作十余年的研究者,我深刻理解学术写作过程中的种种困扰。从文献综述到实验设计,从数据分析到论文撰写,每个环节都充满挑战。特别是在论文写作阶段,研究者常常面临以下几个核心…

2026/7/24 6:52:14 阅读更多 →
Prompt反馈机制:优化大语言模型交互的关键策略

Prompt反馈机制:优化大语言模型交互的关键策略

1. 为什么Prompt反馈机制如此重要在AI交互领域,Prompt(提示词)是连接用户意图与模型输出的关键桥梁。一个设计精良的Prompt能显著提升大语言模型的理解准确度,而有效的反馈机制则是持续优化Prompt的核心手段。根据实际项目经验&am…

2026/7/24 6:52:14 阅读更多 →

最新新闻

通义千问多模态能力边界白皮书:基于2178组测试样本的鲁棒性分析(含医疗/金融/工业三大垂直领域实测)

通义千问多模态能力边界白皮书:基于2178组测试样本的鲁棒性分析(含医疗/金融/工业三大垂直领域实测)

更多请点击: https://intelliparadigm.com 第一章:通义千问多模态能力边界白皮书概述 本白皮书系统性梳理通义千问(Qwen)系列模型在多模态理解与生成任务中的实际能力表现、适用场景及明确的技术边界。内容基于公开基准测试&…

2026/7/24 6:59:17 阅读更多 →
MSPM33比较器中断与事件系统:硬件联动与低功耗设计详解

MSPM33比较器中断与事件系统:硬件联动与低功耗设计详解

1. 项目概述与核心价值在嵌入式开发,尤其是涉及模拟信号监控、电源管理或电机驱动的项目中,比较器(Comparator)是一个至关重要的外设。它就像一个永不疲倦的哨兵,时刻比较两个模拟电压的大小,并输出一个干净…

2026/7/24 6:59:17 阅读更多 →
如何提高技术支持效率,降低响应时间?

如何提高技术支持效率,降低响应时间?

本文探讨人工智能排产系统(AIPS)如何从"系统怎么点"的浅层支持,转型为围绕计划异常、数据异常、接口异常、规则异常四大核心问题的深度诊断专家。通过构建三层智能支持体系——精准识别、快速定位、闭环处置,AIPS技术支…

2026/7/24 6:59:17 阅读更多 →
TI MSPM33 UNICOMM模块:统一UART/SPI/I2C通信的硬件架构与实战配置

TI MSPM33 UNICOMM模块:统一UART/SPI/I2C通信的硬件架构与实战配置

1. UNICOMM模块:一个外设,三种协议在嵌入式开发领域,尤其是面对资源受限的微控制器(MCU)时,我们常常需要在有限的引脚和外设资源上实现尽可能多的功能。过去,一个项目如果需要UART连接调试串口、…

2026/7/24 6:59:17 阅读更多 →
AI数学推理突破:IMO满分与GPT-SOL-5.6的14分58秒速解技术解析

AI数学推理突破:IMO满分与GPT-SOL-5.6的14分58秒速解技术解析

在人工智能领域,数学推理能力一直是衡量模型智能水平的重要标尺。国际数学奥林匹克竞赛(IMO)作为全球最高水平的数学竞赛,其题目不仅考察复杂的数学知识,更考验严密的逻辑推理和创造性解决问题的能力。近年来&#xff…

2026/7/24 6:59:17 阅读更多 →
C/C++时间处理全解析:从time.h到chrono库的实战指南

C/C++时间处理全解析:从time.h到chrono库的实战指南

1. 项目概述:为什么C/C时间处理是程序员的必修课?在C和C的世界里,时间处理从来都不是一个简单的“获取当前时间”的函数调用。它更像是一套精密而古老的钟表系统,背后涉及操作系统内核、硬件时钟、时区转换、性能测量等多个层面。…

2026/7/24 6:58:16 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻