[智能体-214]:LangChain 传统 Chain 种类大全(LCEL 之前的经典实现)
传统 Chain指 LangChain 在 LCELLangChain Expression Language推出之前基于BaseChain抽象基类实现的预构建链组件。它们封装了常见的AI 应用模式提供了开箱即用的功能虽然官方已逐步推荐使用 LCEL 替代但理解这些传统链的设计思想对掌握 LangChain 架构至关重要。一、基础核心链1.LLMChain最基础、最核心定义将提示词模板PromptTemplate与大语言模型LLM组合在一起的最小执行单元其他chain都是对该最小执行单元的组合串联或并联或组合核心功能接收输入变量填充提示模板调用 LLM 生成结果特点单输入单输出、无记忆能力、结构简单适用场景翻译、摘要、分类、简单问答等单次文本生成任务代码示例python运行from langchain.chains import LLMChain from langchain.prompts import PromptTemplate from langchain_openai import ChatOpenAI llm ChatOpenAI(temperature0) prompt PromptTemplate( input_variables[product], template给{product}起一个好听的中文名字 ) chain LLMChain(llmllm, promptprompt) print(chain.invoke({product: 智能手表}))官方状态已在 v0.1.17 中弃用推荐使用prompt | llm的 LCEL 写法替代二、顺序组合链用于将多个链最小执行单元LLMChain按顺序串联形成流水线工作流前一个链的输出作为后一个链的输入。1. SimpleSequentialChain定义最简单的顺序链适用于单输入单输出的子链串联特点自动传递参数无需手动映射变量适用场景步骤清晰、每个步骤只有一个输入输出的简单流水线代码示例python运行from langchain.chains import SimpleSequentialChain # 链1生成产品名称 chain1 LLMChain(llmllm, promptPromptTemplate( input_variables[product], template给{product}起一个好听的中文名字 )) # 链2生成产品描述 chain2 LLMChain(llmllm, promptPromptTemplate( input_variables[name], template为产品{name}写一句20字以内的广告语 )) # 串联两个链 overall_chain SimpleSequentialChain(chains[chain1, chain2], verboseTrue) print(overall_chain.invoke(智能手表))2. SequentialChain定义功能更强大的顺序链支持多输入多输出特点需要手动指定输入输出变量的映射关系适用场景复杂流水线需要传递多个变量或保留中间结果代码示例python运行from langchain.chains import SequentialChain # 链1生成产品名称 chain1 LLMChain( llmllm, promptPromptTemplate( input_variables[product], template给{product}起一个好听的中文名字{name} ), output_keyname ) # 链2生成产品描述 chain2 LLMChain( llmllm, promptPromptTemplate( input_variables[name, product], template为{product}产品{name}写一句广告语{slogan} ), output_keyslogan ) # 串联两个链 overall_chain SequentialChain( chains[chain1, chain2], input_variables[product], output_variables[name, slogan], verboseTrue ) print(overall_chain.invoke({product: 智能手表}))三、文档处理链专门用于处理长文档解决大模型上下文窗口限制问题是RAG 应用的核心组件。1. StuffDocumentsChain定义将所有文档内容直接串行拼接成一个字符串作为上下文注入提示词。特点实现简单、速度快、信息完整缺点受限于 LLM 上下文窗口只能处理短文档适用场景文档数量少、内容短的场景2. MapReduceDocumentsChain定义采用分治策略先对每个文档独立处理Map 阶段再将结果合并Reduce 阶段特点支持并行处理、可处理大量长文档缺点可能丢失跨文档的上下文信息适用场景大规模文档摘要、批量信息提取3. RefineDocumentsChain定义迭代式处理文档每次处理一个文档并结合之前的结果逐步优化输出特点信息保留最完整、生成质量最高缺点速度慢、无法并行处理适用场景对生成质量要求高的长文档处理4. MapRerankDocumentsChain定义先对每个文档独立处理并打分再根据得分排序只保留最高得分的结果特点效率高、适合问答场景适用场景从多个文档中找到最相关的答案四、检索问答链RAG 专用将文档检索与问答生成结合在一起实现基于知识库的问答系统。1. RetrievalQA定义最基础的检索问答链将检索到的文档与问题一起传给 LLM 生成答案特点实现简单、使用方便适用场景单轮知识库问答2. QAWithSourcesChain定义在 RetrievalQA 的基础上增加了来源引用功能特点生成答案的同时会标注答案来自哪些文档适用场景需要溯源的问答场景如法律、医疗等3. ConversationalRetrievalChain定义带记忆的检索问答链支持多轮对话特点会自动将对话历史与当前问题结合生成新的检索查询适用场景与知识库进行多轮对话的场景五、对话链ConversationChain定义带记忆功能的对话链用于实现多轮对话特点自动维护对话历史将历史消息与当前输入一起传给 LLM适用场景简单的聊天机器人官方状态已在 v0.2.7 中弃用推荐使用RunnableWithMessageHistory替代六、工具调用链让大模型能够调用外部工具扩展 LLM 的能力边界。1. LLMMathChain定义让 LLM 能够解决数学问题特点会自动将数学表达式转换为 Python 代码执行适用场景数学计算、数值推理2. SQLDatabaseChain定义让 LLM 能够查询 SQL 数据库特点自动将自然语言问题转换为 SQL 语句并执行适用场景数据库查询、数据分析3. APIChain定义让 LLM 能够调用外部 API特点根据 API 文档自动生成 API 调用请求适用场景调用第三方服务、获取实时数据4. LLMCheckerChain定义让 LLM 检查自己生成的结果是否正确特点生成答案后会再调用一次 LLM 进行验证适用场景对准确性要求高的场景七、路由链根据输入内容动态选择不同的子链进行处理实现智能路由。1. RouterChain定义基础路由链根据输入内容的分类选择对应的子链特点需要预先定义路由规则和子链适用场景业务分类处理、多领域问答2. MultiPromptChain定义根据输入内容选择最合适的提示词模板特点不同的提示词模板对应不同的子链适用场景多风格生成、多任务处理3. MultiRetrievalQAChain定义根据输入内容选择最合适的检索器特点不同的检索器对应不同的知识库适用场景多知识库问答八、其他特殊链1. TransformChain定义用于对输入数据进行自定义转换特点可以编写任意 Python 函数处理数据适用场景数据清洗、格式转换、预处理2. AnalyzeDocumentChain定义用于分析文档结构和内容特点可以提取文档中的元数据、实体、表格等信息适用场景文档解析、信息提取3. QAGenerationChain定义从文档中自动生成问答对特点可以用于构建训练数据或增强检索效果适用场景数据集构建、知识库预处理九、传统 Chain 与 LCEL 对比表格特性传统 ChainLCEL灵活性低结构固定高可自由组合可读性一般好管道符语法直观调试难度高低支持分步执行性能一般好支持并行和流式输出官方支持逐步弃用推荐使用十、总结LangChain 传统 Chain 按照功能可以分为基础核心链、顺序组合链、文档处理链、检索问答链、对话链、工具调用链和路由链等几大类。它们封装了常见的AI 应用模式为开发者提供了开箱即用的功能。虽然官方现在推荐使用更灵活的 LCEL 来构建应用但传统 Chain 的设计思想仍然是理解 LangChain 架构的基础。在实际开发中对于简单的场景传统 Chain 仍然可以快速实现对于复杂的场景建议使用 LCEL 或 LangGraph 来构建。