📖LangChain 核心:链 (Chains)
Chains 是 LangChain 的灵魂。它允许你将多个组件(模型、提示词、其他链)组合在一起,创建一个单一的、相干的应用。
理解 Chains 之后,你就具备了构建复杂 LLM 工作流的能力。
- 基础链:LLMChain
定义
这是最简单的链,由一个 PromptTemplate 和一个 LLM 组成。
作用
接收输入,格式化提示词,发送给模型,返回结果。
- 顺序链 (Sequential Chains)
当你需要一个步骤的输出作为下一个步骤的输入时,使用顺序链。
A. SimpleSequentialChain
特点:单输入/单输出
流程:Step 1 的输出直接变成 Step 2 的输入
B. SequentialChain
特点:多输入/多输出
流程:可以更复杂地路由数据流,保留中间变量
- 路由链 (Router Chain)
这是最进阶的链类型。它允许你根据输入的具体内容,动态地将请求发送给不同的子链。
结构组成
Router Chain:负责决定去哪个子链
Destination Chains:具体的子链(例如:数学问题、文学问题)
Default Chain:找不到匹配子链时的默认逻辑
- 代码实现示例
以下展示了如何构建一个顺序链:
from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.chains import LLMChain, SequentialChain
llm = ChatOpenAI(temperature=0.9)
链 1:根据产品名称生成公司名
prompt1 = ChatPromptTemplate.from_template( "给生产{product}的公司起一个好听的名字。" )
chain1 = LLMChain(llm=llm, prompt=prompt1, output_key="company_name")
链 2:根据公司名称写简介
prompt2 = ChatPromptTemplate.from_template( "为这家公司写一段简短的介绍:{company_name}" )
chain2 = LLMChain(llm=llm, prompt=prompt2, output_key="description")
组合成顺序链
overall_chain = SequentialChain(
chains=[chain1, chain2],
input_variables=["product"],
output_variables=["company_name", "description"],
verbose=True )
运行 result = overall_chain({"product": "智能变色水壶"})
print(result)
- 核心逻辑总结
链类型
适用场景
输入/输出特性
LLMChain
基础任务
灵活
SimpleSequentialChain
简单的线性工作流
严格单对单
SequentialChain
复杂的多步任务
支持多个中间变量
RouterChain
条件分支逻辑
动态路由
- 为什么使用 Chains?
为什么不直接写 Python 函数?
可观测性 (Tracing):配合 LangSmith 等工具,清晰看到每一步的输入输出
标准化:所有链都遵循相同的接口(call),方便集成
生态集成:LangChain 内置了大量预制链(SQL 链、文档问答链)
关键要点:理解 Chains 之后,你就具备了构建复杂 LLM 工作流的能力。这是从简单对话到智能应用的关键一步。