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 框架的整体设计思想。

相关新闻

Retriever  Chain in LangChain 完整深度解读

Retriever Chain in LangChain 完整深度解读

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

2026/7/24 6:53:41阅读更多 →
解决C++项目编译错误:fatal error: google/protobuf/port_def.inc缺失

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

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

2026/7/24 6:53:41阅读更多 →
AI学术写作助手:智能选题与论文优化全流程解析

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

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

2026/7/24 6:53:41阅读更多 →
AI工程师必备:《AI实用手册》核心价值解析

AI工程师必备:《AI实用手册》核心价值解析

1. 为什么AI从业者需要一本实用手册?上周在技术社区看到不少同行在讨论李家贵老师的新书《AI实用手册》,作为在AI领域摸爬滚打多年的从业者,我第一时间入手了这本被业界称为"AI工程师案头必备"的工具书。这本书最打动我的地方在于&…

2026/7/24 11:26:30阅读更多 →
CentOS/RHEL系统yum安装报错排查与解决方案

CentOS/RHEL系统yum安装报错排查与解决方案

1. 报错现象与初步诊断遇到yum安装工具报错时,首先需要完整记录报错信息。典型的报错可能包含以下关键信息:Error: Unable to find a match: package_name或Error: Package dependencies cannot be resolved这类报错通常发生在CentOS/RHEL系统使用yum安装…

2026/7/24 11:26:30阅读更多 →
2026,消失于华强北

2026,消失于华强北

2026年7月,深圳的夏天一如既往地闷热。华强北赛格电子市场门口,人流依然不少,但如果你仔细看,会发现那些拎着黑色塑料袋穿梭的背包客少了,那些堆满杂牌手机壳的柜台空了,那些曾经人声鼎沸的老店&#xff0c…

2026/7/24 11:26:30阅读更多 →
Windows 11智能应用控制拦截安装包的解决方案

Windows 11智能应用控制拦截安装包的解决方案

1. 问题现象与背景解析 最近在Windows 11系统上安装软件时,不少用户遇到了"系统智能应用控件阻止安装"的弹窗提示。这个安全机制会拦截来自非微软商店的.exe/.msi安装包,显示"此应用可能对你的设备有害"的警告。我实测发现&#xf…

2026/7/24 11:26:30阅读更多 →
Kimi K3前端代码生成:DesignArena基准超越Claude的工程实践解析

Kimi K3前端代码生成:DesignArena基准超越Claude的工程实践解析

最近在几个开发者社群里,看到不少人在讨论一个叫 Kimi K3 的模型,说它在 DesignArena 前端基准测试里超过了 Claude 系列。一开始我还有点怀疑,毕竟 Claude 在前端代码生成这块已经积累了不少口碑,一个新模型要直接超越并不容易。…

2026/7/24 11:26:30阅读更多 →
基于CNN的水稻倒伏智能监测系统设计与实现

基于CNN的水稻倒伏智能监测系统设计与实现

1. 项目背景与核心价值水稻伏倒是农业生产中常见的灾害现象,当水稻茎秆因风雨、病虫害等原因发生倾斜或倒伏时,会导致产量下降20%-50%不等。传统的人工巡检方式效率低下且主观性强,而基于计算机视觉的自动化识别技术正逐渐成为农业监测领域的…

2026/7/24 11:24:30阅读更多 →
Go语言静态资源打包方案对比与实践指南

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

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

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

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

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

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

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

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

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

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

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

2026/7/24 0:00:06阅读更多 →
【LeetCode 54】螺旋矩阵

【LeetCode 54】螺旋矩阵

问题描述: 解法: 1、模拟(参考自【LeetCode 54】螺旋矩阵-CSDN博客) int *spiralOrder(int **matrix, int matrixSize, int *matrixColSize, int *returnSize) {static const int dirs[4][2] {{0, 1}, {1, 0}, {0, -1}, {-1, …

2026/7/24 0:00:06阅读更多 →
2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

知春路不相信模型领先今年WAIC大会,昔日AI六小龙来了五家,分别是Kimi、阶跃星辰、Minimax、百川智能、零一万物。连放弃基模的百川和零一万物都来了,唯一缺席的竟是近几个月来风光无限的智谱。(DeepSeek一直不参加)WAI…

2026/7/24 0:00:06阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/23 22:58:43阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/23 18:58:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/23 18:58:18阅读更多 →