发布时间:2026/7/24 6:53:35
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/7/24 6:53:35

Retriever Chain in LangChain 完整深度解读

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

2026/7/24 6:53:35

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

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

2026/7/24 6:53:35

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

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

2026/7/24 11:38:51

每度电便宜一毛三,AI算力开始“下场”做电力交易了

很多人谈AI,习惯先谈芯片、模型和算力规模。 但对真正建过智算中心的人来说,项目往后走,最先感到压力的往往不是算法,而是电。 服务器可以买,机房可以建,算力集群也可以继续扩容,可一旦进入大规模运行阶段,电价、供电稳定性和绿电比例,很快就会变成三笔躲不开的账。…

2026/7/24 11:38:51

Unity运行时动画录制全攻略:Recorder+Timeline实战指南

1. 项目概述与核心价值 最近在社区里看到不少朋友在问,怎么在Unity游戏运行的时候,把角色动画、特效序列这些动态内容给录下来。不管是用来做宣传视频、技能展示,还是给美术和策划做效果预览,这需求都挺实在的。Unity自带的Record…

2026/7/24 11:38:51

基于ADS114S0xB的高精度3线Pt100 RTD测温系统全流程设计

1. 项目概述与核心价值在工业自动化、环境监测和精密仪器仪表领域,高精度温度测量是一个永恒的核心需求。铂电阻温度检测器(RTD),尤其是Pt100,因其出色的稳定性、可重复性和宽泛的测温范围(-200C至850C&…

2026/7/24 11:38:51

TI AM572x电源与时钟设计:AVS/ABB技术与OPP配置详解

1. 项目概述与核心概念解析在嵌入式系统,尤其是像TI AM572x这类高性能异构多核处理器的设计中,电源管理和时钟配置从来都不是一个简单的“上电即用”的环节。它更像是在为一座精密的微缩城市规划供电网络和交通系统。城市里有不同的功能区(CP…

2026/7/24 11:38:51

TMS320F28377D-EP电源、复位与时钟设计实战指南

1. 项目概述与核心设计挑战 在工业控制和电机驱动这类对可靠性要求极高的领域,硬件设计的基石往往不是最炫酷的算法,而是最基础的电源、复位和时钟。我见过太多项目,软件写得天花乱坠,结果因为电源上电顺序不对,芯片直…

2026/7/23 12:54:51

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述:为什么我们需要一个本地通信服务器?在游戏开发、数字孪生、仿真训练等众多领域,Unity作为强大的实时3D内容创作平台,其核心逻辑通常由C#驱动。然而,当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/24 0:03:10

不同品牌斜齿行星减速机如何替换?以PX与PAG系列为例

不同品牌斜齿行星减速机如何替换?以 PX 与 PAG 系列为例 一、系列对应不等于型号直接互换 PX 与 PAG 都属于斜齿、方法兰、输出轴式精密行星减速机,结构形式和应用方向具有对应关系。 原设备使用PX系列时,可以优先从PAG系列中寻找替换型号。但…

2026/7/24 0:03:10

jdk8 把list 扁平化成String 多个以逗号分隔

在 JDK 8 中&#xff0c;将 List 扁平化为以逗号分隔的 String&#xff0c;有几种非常简洁且高效的方法。&#x1f680; 推荐方案&#xff1a;使用 Collectors.joining()这是最标准的 Java 8 写法&#xff0c;适用于 List<String>。javaimport java.util.stream.Collecto…

2026/7/24 0:03:10

java 两个 long id 怎么合并成一个long id 并且不重复

“把两个 Long ID 合并成一个唯一的 Long ID&#xff0c;且保证不重复”这个需求&#xff0c;在 Java 里直接做数学上的“完美合并”是不可能的。因为两个 Long&#xff08;各 64 位&#xff09;要合并成一个 Long&#xff08;64 位&#xff09;&#xff0c;在信息论上是有损压…

2026/7/23 23:42:43

3个高效策略:快速掌握Axure中文界面配置

3个高效策略&#xff1a;快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…