LangChain Chains 组件详解
在 LangChain 中,Chain 是把“模型能力”变成“工程能力”的核心组件。
- Prompt 决定模型怎么说
- Model 决定能说什么
- Chain 决定事情怎么做
如果没有 Chain,你只有一次模型调用;有了 Chain,你才拥有“流程”。
Chain 在整体架构中的位置
结构逻辑:
用户输入
↓
Prompt
↓
Model
↓
Chain(流程控制)
↓
输出
关键理解:Chain 是“可组合计算单元”、本质是:输入 → 处理 → 输出、可以嵌套、组合、并行
什么是 Chain(底层抽象)
在 LangChain 2.x 中,Chain 本质是一个:
Runnable
统一接口:
result = chain.invoke(input)
支持:invoke(单次)、batch(批量)、stream(流式)、async(异步)
这意味着:
Chain 是一个标准化可执行单元,而不是某个具体类。
最基础的 Chain:Prompt + Model
LCEL 写法
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
model = ChatOpenAI()
prompt = ChatPromptTemplate.from_template("解释:{topic}")
chain = prompt | model
result = chain.invoke({"topic": "什么是向量数据库?"})
执行过程:
变量填充
↓
生成 Prompt
↓
调用模型
↓
返回结果
这就是最基础的 Chain。
Chain 的常见类型
LLMChain
旧版本常见:
from langchain.chains import LLMChain
特点:包装 Prompt + LLM、结构固定、灵活性较低、现在推荐使用 LCEL 替代。
SequentialChain
多个步骤顺序执行。
步骤1:问题重写
↓
步骤2:知识检索
↓
步骤3:答案生成
LCEL 表达:
chain = rewrite_chain | retrieve_chain | answer_chain
典型场景:RAG、文档分析、数据处理
RouterChain
根据输入内容决定走哪条子链。
结构:
输入
↓
分类判断
↓
选择子链
示例场景:
- 技术问题 → 技术回答链
- 财务问题 → 财务回答链
这是“规则驱动”的轻量版 Agent。
Map-Reduce Chain
用于长文档处理。
流程:
文档分块
↓
每块单独生成摘要(Map)
↓
汇总所有摘要(Reduce)
适合:长文档总结、法律文件分析、报告汇总
RAG Chain 结构拆解
在生产环境中,RAG 几乎都是 Chain 实现。
完整流程:
用户问题
↓
查询重写
↓
向量检索
↓
文档过滤
↓
Prompt 构造
↓
模型生成
注意:检索部分是确定性流程、只有最后一步是模型生成
这也是为什么:
RAG 系统 80% 应该是 Chain
Chain 的高级能力
条件分支
from langchain_core.runnables import RunnableBranch
结构:
条件判断
↓
不同路径执行
适合:输入长度不同、不同问题类型、是否命中缓存
并行执行
from langchain_core.runnables import RunnableParallel
结构:
输入
↓
同时执行多个子链
↓
合并结果
场景:多路检索、多模型对比、多任务生成
流式处理
for chunk in chain.stream(input):
print(chunk)
用于:实时问答、WebSocket 接口、前端渐进显示
Chain与 Agent
很多人误用 Agent,其实应该用 Chain。
区别:
Chain = 预定义流程
Agent = 动态决策流程
用 Chain 的情况
- RAG
- 数据管道
- 结构化输出
- 固定步骤任务
用 Agent 的情况
- 工具选择不确定
- 执行路径不固定
- 需要多轮决策
经验:
只要流程能提前设计出来,就不要用 Agent。
生产环境设计原则
小链组合
不要写超大 Chain。
推荐:
小功能链
↓
组合成中链
↓
组合成主链
Chain 要可测试
- 每个子链独立测试
- 输入输出明确
- 支持 Mock 模型
减少模型调用次数
模型调用:成本高、延迟高、不稳定、
尽量用:规则逻辑、向量检索、数据过滤、替代模型判断。
可观测性
使用:LangSmith、日志追踪、Token 统计。否则无法定位问题。
Chain 内部执行模型
你可以把 Chain 理解成:
函数式数据流图
每个节点:
- 接收输入
- 处理
- 输出
多个节点:
- 串联
- 分支
- 汇合
这本质上是“声明式流程编排”。
一个完整生产级示例结构
用户输入
↓
输入校验 Chain
↓
问题重写 Chain
↓
检索 Chain
↓
过滤 Chain
↓
回答生成 Chain
↓
格式校验 Chain
↓
输出
优势:
- 可控
- 可测试
- 可扩展
- 成本可预测
Chain 的核心价值:
- 把随机模型行为嵌入确定性流程
- 把复杂任务拆解成可执行单元
- 提供可观测、可测试的结构
在真实生产系统中:
稳定性来自 Chain,而不是模型。
更多精彩内容请关注微信公众号 “学GIS的小宝同学”