Retriever And Chain With LangChain 完整解读

发布时间:2026/9/15 17:27:25

Retriever And Chain With LangChain 完整解读 Retriever And Chain With LangChain 完整解读Retriever检索器和 Chain链是LangChain 中 RAGRetrieval-Augmented Generation检索增强生成最核心的两个组件。很多初学者容易把它们混淆Retriever 负责找资料RetrieveChain 负责处理流程Workflow可以把整个过程理解成用户问题 → Retriever 找相关文档 → Chain 组织 Prompt → LLM 回答一、什么是 RetrieverRetriever检索器就是根据用户的问题从知识库中找出最相关的 Document。注意Retriever不会回答问题。它只负责Question │ ▼ Retriever │ ▼ Documents例如你的知识库Document1 Python 是一种高级编程语言。 Document2 LangChain 是开发 LLM 应用的框架。 Document3 FAISS 是向量数据库。用户问LangChain 是什么Retriever 输出[ Document2 ]而不是LangChain 是开发 LLM 应用的框架回答是 LLM 做的不是 Retriever。二、Retriever 的本质Retriever 可以理解成Question ↓ Embedding ↓ Vector Search ↓ Top K Documents例如Question ↓ Embedding ↓ 向量 ↓ FAISS ↓ 最相近3篇文档所以 Retriever 的本质就是Question → Documents可以表示为Retriever Input: Question Output: List[Document]例如docs retriever.invoke( What is LangChain? )返回[ Document( page_contentLangChain is... ), Document( page_contentLangChain provides... ) ]三、Retriever 的来源Retriever 一般来自Vector Store例如FAISS ↓ as_retriever() ↓ Retriever代码retriever vector_store.as_retriever()这里FAISS ↓ Retriever实际上Retriever ↓ 内部调用 ↓ similarity_search()例如retriever.invoke(question)等价于vector_store.similarity_search(question)只是Retriever 更符合 Runnable 接口。四、Retriever 是 RunnableLangChain 新版中Retriever 实现了 Runnable。因此retriever.invoke(question)而不是retriever.get_relevant_documents()旧版docs retriever.get_relevant_documents( question )新版docs retriever.invoke( question )Retriever 可以直接放进 Chainchain retriever | ...五、Retriever 输出什么Retriever 输出List[Document]DocumentDocument( page_content..., metadata{} )例如[ Document( page_contentLangChain..., metadata{page:1} ), Document( page_contentRetriever..., metadata{page:2} ) ]因此Retriever 输出不是string而是List[Document]六、什么是 ChainChain就是多个 Runnable 按顺序组成的数据处理流水线。例如Question ↓ Retriever ↓ Prompt ↓ LLM ↓ Parser ↓ Answer整个就是一个 Chain。七、Chain 的作用Chain 不一定有 Retriever。例如最简单prompt ↓ LLM ↓ Parser代码chain prompt | llm | parser输入Question输出Answer没有 Retriever。八、带 Retriever 的 ChainRAGQuestion ↓ Retriever ↓ Documents ↓ Prompt ↓ LLM ↓ Parser这就是 Retrieval Chain。九、为什么需要 Chain因为LLM 不知道知识库。例如Question ↓ LLMLLM不知道加入 RetrieverQuestion ↓ Retriever ↓ Documents ↓ Prompt ↓ LLMPromptUse the following context... Context: Document1 Document2 Question: ...LLM 才能回答。十、Retriever 与 Chain 的关系Retriever 是 Chain 中的一个节点。例如Retriever ↓ Prompt ↓ LLMRetriever 本身不是完整流程。Chain 才是完整流程。十一、Runnable 的角度理解所有组件都是 RunnableRetriever ↓ Prompt ↓ LLM ↓ Parser因此Runnable ↓ Runnable ↓ Runnable ↓ Runnable可以用|连接。例如chain ( prompt | llm | parser )或者chain ( retriever | ... )十二、Retriever 为什么不能直接接 Prompt因为Retriever 输出List[Document]Prompt 需要{ context: ..., question: ... }两者格式不同。因此需要Retriever ↓ format_docs ↓ String ↓ Prompt例如def format_docs(docs): return \n\n.join( doc.page_content for doc in docs )十三、LangChain 如何自动完成官方提供create_stuff_documents_chain()它内部做了Documents ↓ format_docs() ↓ Prompt ↓ LLM所以不用自己拼接字符串。例如document_chain create_stuff_documents_chain( llm, prompt )输入List[Document]输出Answer十四、Retriever Document Chain官方推荐retrieval_chain create_retrieval_chain( retriever, document_chain )内部流程User Question │ ▼ create_retrieval_chain │ ┌─────────────┴─────────────┐ │ │ ▼ │ Retriever │ │ │ ▼ │ List[Document] │ │ │ └─────────────► Document Chain │ format_docs() │ ▼ Prompt │ ▼ LLM │ ▼ OutputParser │ ▼ Final Answer代码document_chain create_stuff_documents_chain( llm, prompt ) retrieval_chain create_retrieval_chain( retriever, document_chain ) response retrieval_chain.invoke( { input: What is LangChain? } )十五、Retriever 与 Chain 的职责对比组件输入输出是否调用 LLM主要职责RetrieverQuestionList[Document]❌从知识库检索相关文档Document ChainList[Document] QuestionPrompt → Answer✅将文档组织进 Prompt并调用 LLMRetrieval ChainQuestionAnswer✅协调整个 RAG 流程检索 生成Runnable Chain任意输入任意输出视组件而定将多个 Runnable 串联成完整工作流核心总结可以用一句话概括它们之间的关系Retriever负责找输入问题输出相关Document。Document Chain如create_stuff_documents_chain负责读将检索到的文档填充到 Prompt 中并调用 LLM 生成答案。Retrieval Chain如create_retrieval_chain负责协调把 Retriever 和 Document Chain 串联起来形成完整的 RAG 工作流。因此标准的 LangChain RAG 数据流通常可以表示为用户问题 │ ▼ Retriever │ ▼ List[Document] │ ▼ Document Chain (格式化文档 → Prompt → LLM) │ ▼ 最终答案理解了这三个层次Retriever → Document Chain → Retrieval Chain基本就掌握了 LangChain 新版 RAG 框架的整体设计思想。
延伸阅读

更多相关文章

2026/9/5 20:11:51

Retriever Chain in LangChain 完整深度解读

Retriever & Chain in LangChain 完整深度解读适配 LangChain 0.1 新版 API(区分 legacy RetrievalQA 与现代 LCEL 写法) 核心定位:RAG 的两大基础组件 ——Retriever(检索器)负责找文档,Chain&#xf…

2026/9/14 17:43:20

解决C++项目编译错误:fatal error: google/protobuf/port_def.inc缺失

1. 项目概述:当C遇上Protobuf的“拦路虎”如果你正在用C开发一个需要网络通信或数据序列化的项目,比如一个游戏服务器或者一个分布式计算框架,那么你大概率会引入Google的Protocol Buffers(简称Protobuf)这个强大的工具…

2026/9/11 9:07:43

AI学术写作助手:智能选题与论文优化全流程解析

1. 项目概述:AI如何重塑学术写作体验作为一名在学术写作领域深耕多年的研究者,我见证了无数学生在课程论文写作中遇到的困境。从选题迷茫到文献梳理,从结构搭建到语言润色,每个环节都可能成为学术道路上的绊脚石。"书匠策AI&…

2026/9/15 17:23:07

SQL Server AlwaysOn可用性组从零部署:高可用架构实战指南

我有个习惯,技术圈里只要刮起“部署”风,我总会先往数据库这层瞟一眼。这不,最近大家聊本地部署聊得火热,从大模型到Docker再到CI/CD自动部署,人人都能把几十个容器跑起来,但真正轮到底层数据库的高可用部署…

2026/9/15 17:23:07

SpringBoot+Vue+Element UI图书管理系统从零搭建实战

刚带完一个实习生做完这套前后端分离的图书管理系统,趁热把整个项目的落地过程整理出来。这套《SpringBoot Vue Element UI MySQL》的组合,今天已经算是 Web 开发入门的经典套餐了,很多培训机构和毕设选题都在用,但它远不止一个…

2026/9/15 17:23:07

内点法求解最优潮流:原理、MATLAB实现与工程实践

简介:这是一份面向电力系统研究人员与电气工程学生的内点法优化计算资源,聚焦原对偶内点法在电力系统最优潮流(OPF)中的应用。资源包含1个Matlab源程序(.m)和1个说明文档(.doc)&…

2026/9/15 17:23:07

SpringBoot流浪动物救助平台:从数据库设计到部署全流程

简介:本毕业设计资源围绕基于Spring Boot的流浪动物救助平台,提供完整项目源码、MySQL数据库脚本及配套说明文档,适合计算机相关专业学生用于毕业设计、课程设计或新手项目实践。系统采用Spring Boot Vue MySQL技术栈,功能覆盖用…

2026/9/15 4:54:30

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/15 0:01:16

AI英语单词APP开发:自适应学习算法与移动端优化实践

1. 项目概述 作为一名在移动应用开发领域摸爬滚打多年的老手,我最近完成了一个AI英语单词APP的开发项目。这个项目将传统单词记忆方法与现代AI技术相结合,打造了一款能够智能适应不同用户学习习惯的英语学习工具。 市面上大多数单词APP都存在一个通病&a…

2026/9/15 0:01:16

Flutter与OpenHarmony结合开发手语学习APP实战

1. 项目背景与核心价值作为一名同时接触过Flutter和OpenHarmony的开发者,最近我完成了一个基于Flutter for OpenHarmony的手语学习APP实战项目。这个项目最大的特点在于实现了跨平台框架与国产操作系统深度结合的创新实践——用Flutter开发的应用能完美运行在OpenHa…

2026/9/15 0:01:16

六个月成为机器人工程师:从ROS2到SLAM的实战路径

1. 六个月的紧迫感从哪来:先搞清楚你要成为哪种机器人工程师说实话,六个月的期限并不是一个宽松的时间线。市面上任何一本正经的机器人学教材都超过五百页,ROS2的官方文档可以翻到你怀疑人生,再加上ABB、KUKA这些工业机器人厂家动…

2026/9/15 14:22:53

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/14 13:53:59

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/15 11:42:23

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码