LangChain:链的定义、类型和使用
链(Chain)是LangChain中将多个组件(如模型、提示模板、工具、其他链等)按特定逻辑顺序连接起来,以完成复杂任务的机制。
LangChain 的名字源自其框架的核心设计思路:用最简单的链(Chain),将为大语言模型开发的各个组件链接起来,以构建复杂的应用程序。
概念与定义
链(Chain)是LangChain中将多个组件(如模型、提示模板、工具、其他链等)按特定逻辑顺序连接起来,以完成复杂任务的机制。
简单来说:
- 单个组件 = 原子能力(如 LLM、Prompt、工具等)
- Chain = 将这些原子能力串联起来,完成复杂任务
链就是一系列组件的组合,它将一个复杂任务拆解成多个可执行的步骤,形成一个“流水线”。这个流水线的核心在于:前一个步骤的输出会自动成为下一个步骤的输入,确保数据能够流畅地传递和处理,最终完成一个复杂的任务。
这些组件可以是大语言模型、数据查询模块或者文档处理链。链的设计可以灵活地组合使用各种链组件,形成一个完整的数据处理流程,最终完成一个复杂的任务。
如果说大语言模型是功能强大的“大脑”,那么 LangChain 的链(Chain)就是将这些大脑与“手脚”(外部工具、数据源)连接起来的逻辑神经网络。
比喻理解:想象一条自动化流水线或水管系统。每个组件(如模型、数据库查询)像一个“处理站”,链就是连接这些站点的“传送带”或“管道”,它规定了数据从哪里来、经过哪些站、如何加工、最终到哪里去。
核心思想
1 | 输入 → [组件A] → [组件B] → [组件C] → 输出 |
- 标准化:复杂流程标准化。
- 组合: 将原子化的功能模块组合成可执行的工作流。
- 序列化: 定义了组件的执行顺序和数据流向。
- 复用: 构建好的链本身可以作为新链的组件,实现模块化开发。
核心特点
| 特点 | 说明 |
|---|---|
| 顺序执行 | 组件按定义的顺序依次执行 |
| 数据传递 | 前一个组件的输出可作为后一个组件的输入 |
| 统一接口 | 所有 Chain 都实现 invoke() / run() 等标准方法 |
| 可组合性 | Chain 可以嵌套 Chain,形成更复杂的工作流 |
| 可配置性 | 支持参数化、回调、内存等高级功能 |
为什么需要链?
如果没有链,需要手动编写代码来处理每个步骤:调用模型、解析输出、将结果传递给下一个函数、处理错误等。链将这些流程抽象化、标准化,让你能:
- 专注业务逻辑,而非胶水代码(连接不同部分而手动编写的、重复性的、与核心创意无关的代码)。
- 轻松实验不同的组件组合。
- 构建稳定、可维护的AI应用。
链的价值
直接与大型语言模型(LLM)对话时,它像一位“纸上谈兵”的专家,能说会道,但缺乏执行能力。链的价值在于:
- 任务分解与执行:它能将一个复杂任务(如“写一份市场分析报告”)分解为“联网搜索最新趋势” → “总结关键信息” → “基于信息撰写报告”等一系列可执行的步骤。
- 状态管理与记忆:它可以在多步调用之间保持上下文和状态。例如,将上一个模型总结出的信息,作为下一个模型进行翻译的输入。
- 逻辑编排:它能组合
Prompt、LLM、Tools(工具)等多种组件,构建出强大的工作流。
链的类型
LangChain的链世界丰富多样,为满足不同需求,主要分为以下几类:
| 类型 | 核心逻辑 | 适用场景 | 关键组件/特点 |
|---|---|---|---|
| 基础链 | 最简单的链,将 PromptTemplate 与一个LLM直接组合。 |
单次文本生成、情感分析、基础问答等一次性任务。 | PromptTemplate, LLM, LCEL管道符 ` |
| 顺序链 | 将多个链按固定顺序串联,前一个的输出作为后一个的输入。 | 多步骤文本处理,如“文章摘要” → “翻译”的流水线。 | SimpleSequentialChain(单输入/输出)、SequentialChain(多输入/输出) |
| 路由链 | 根据输入内容,动态判断并选择最合适的子链来处理。 | 多领域智能客服(如区分“退货”和“产品咨询”)、智能分发系统。 | RouterChain, MultiPromptChain |
| 工具/检索链 | 将检索器(Retriever)与LLM结合,先搜索再生成答案,或集成外部工具。 | RAG应用(如私有知识库问答)、AI Agent的工具调用基础。 | RetrievalQA, VectorDBQA, SQLDatabaseChain |
| 高级/特定链 | 为复杂场景设计的专用链,如带记忆的对话、内容检查等。 | 客服机器人、内容审核、防幻觉应用等。 | ConversationChain, LLMCheckerChain |
链的使用
从“经典”到“现代”:随着LangChain的演进,构建链的方式发生了革命性变化。
传统的“链式类”方法
早期的 LangChain 通过特定的类(如 LLMChain, SequentialChain)来构建链。这种方式在代码中显式地定义了每个环节,如下面的“生成笑话”链所示。
1 | # 经典的LLMChain示例(已不推荐) |
现代的LCEL声明式方法
现在官方推荐使用LangChain表达式语言(LCEL, LangChain Expression Language)。它使用管道操作符 | 来连接组件,代码更简洁直观。
- 基础链:直接连接
Prompt和Model。1
2
3
4
5
6
7
8
9
10from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
prompt = PromptTemplate.from_template("描述一下在{city}的理想一天")
model = ChatOpenAI(model="gpt-4o-mini")
chain = prompt | model # 使用 | 将Prompt和Model组合成链
# 执行链,传入初始输入
response = chain.invoke({"city": "厦门"})
print(response.content) - 多步骤链:可以将多个
Prompt、Model甚至普通Python函数组合起来,形成复杂的工作流。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19# 用LCEL完成 总结 → 翻译 的两步任务
from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
summarize_prompt = PromptTemplate.from_template("用中文总结这段文本:\n\n{text}")
translate_prompt = PromptTemplate.from_template("将以下内容翻译成英文:\n\n{summary}")
model = ChatOpenAI(model="gpt-4o-mini")
summarize_chain = summarize_prompt | model
translate_chain = translate_prompt | model
# 组合链,并在中间使用一个lambda函数提取文本内容
# (lambda x: {"summary": x.content}) 类型转换桥接:提取内容并包装成字典,满足下游的输入格式
full_chain = summarize_chain | (lambda x: {"summary": x.content}) | translate_chain
# 执行
result = full_chain.invoke({"text": "人工智能正在改变世界..."})
print(result.content)
LCEL的核心优势
LCEL不仅语法更优雅,其底层基于 Runnable 协议的设计也带来了强大功能:
- 声明式语法:使用
|管道符连接,让代码直观地反映业务逻辑流,直观易懂。 - 开箱即用的并行处理:
RunnableParallel类能轻松实现任务的并行执行,提升效率。 - 原生支持批处理和异步:
batch()和abatch()方法让你轻松处理批量请求或异步调用。 - 统一接口: 所有链都有
.invoke(),.ainvoke(),.stream(),.batch()方法。 - 组件化设计:将Python函数用
RunnableLambda包装后,即可无缝集成到LCEL链中,自由组合。
最佳实践与建议
- 优先选择LCEL:在新项目中,官方推荐优先使用LCEL语法构建链,以获得更佳的开发体验。
- 遵循”从简到繁”原则:从一个最简单的
Prompt + Model链开始,再根据需要逐步增加步骤,这样更容易定位问题。 - 善用输出解析器:通过
StrOutputParser、JsonOutputParser等解析器,可以让LLM的输出格式更规范,便于后续处理。 - 优雅处理LLM输出:当需要从一个链的输出中提取特定字段作为下一个链的输入时,使用
RunnableLambda或自定义函数进行数据清洗,如上面多步骤链示例中提取x.content所示。 - **为链添加”记忆”**:对于需要上下文的对话场景,使用
RunnableWithMessageHistory或ConversationChain类为链添加记忆能力。 - 理解
invoke的输入/输出: 明确你的链需要什么输入变量,它会返回什么。使用chain.input_schema和chain.output_schema查看。 - **善用
verbose=True**: 在开发和调试时打开,清晰看到链的每一步执行过程和中间结果。 - 从用例出发: 不要死记硬背所有链。先想清楚你要做什么(如“文档问答”、“总结网页”、“分析结构化数据”),然后去文档找对应的专用链或组合模式。
- 查阅官方文档: LangChain的概念指南和“如何使用”是极佳的学习资源,提供了大量链的示例。
总结
LangChain中的链是实现复杂AI应用的基石。从 PromptTemplate 和 LLM 构建基础单元,到通过 LCEL 的 | 管道符串联组件,再到利用并行、批处理等高级功能,链的概念贯穿始终。随着官方推荐的LCEL声明式方法的普及,现代LangChain开发变得更加简洁、强大和灵活。
LangChain:链的定义、类型和使用
http://blog.gxitsky.com/2026/04/07/AI-LangChain-033-Chain-Type-Use/

