LangChain 中的 Chain 是什么?有哪些常见类型?
- 标签:LangChain、Chain 链式调用
🏛 业务架构师
LangChain 的 Chain 是把多个组件(模型调用、提示模板、检索、解析器)按顺序组合成的处理流水线,一次定义、重复执行。常见类型:
- LLMChain(基础链):Prompt Template → LLM → Output Parser 的最小组合,单轮任务用;
- SequentialChain(顺序链):多个链串行,前一链输出作为后一链输入(先生成提纲→再写正文→再润色);
- RetrievalQA(RAG 链):Retriever 检索 + 生成组合,知识问答的标准形态;
- RouterChain(路由链):按输入内容动态选择分支链(技术问题走知识库链、闲聊走对话链)——业务分流的关键组件;
- ConversationChain(对话链):带 Memory 的多轮对话链;
- LCEL 链(现代方式):用管道表达式
retriever | prompt | model | parser声明式组合,取代了老式 Chain 类——支持流式、并行、重试、异步,新代码一律用它。
业务视角的理解:Chain 的价值是"把 LLM 调用从脚本变成可组装的流水线资产"——营销内容生产(提纲→初稿→审校)、多阶段数据处理(抽取→清洗→汇总)这类固定流程,用 Chain 定义一次就变成可复用、可监控的生产单元。
选型提醒:Chain 适合确定性流程;需要循环、分支、人工介入的流程(Agent、审批流)用 LangGraph——2026 年的最佳实践是"简单链用 LCEL,复杂流程上 Graph",别用 Chain 硬模拟状态机。
🏗 系统架构师
Chain = 按固定顺序编排的调用序列(Prompt → Model → Parser,可含检索/工具),核心价值是把 LLM 调用组件化、可组合。LangChain 常见类型:
- LLMChain(基础形态,已被 LCEL 取代):prompt 模板 + 模型 + 输出解析的最小组合;
- SequentialChain(串行):多个 Chain 前一个输出接后一个输入——翻译 → 润色 → 格式化的流水线;
- RouterChain(路由):按输入动态选择分支链——query 分类后进不同处理链(FAQ 链 / 文档链 / 闲聊链);
- RetrievalQA(RAG 链):检索 → 组装 → 生成 → 解析的标准问答链;
- ConversationChain(对话):带记忆的多轮链(1.0 后由 LangGraph 持久化替代);
- LCEL 管道(现代统一形态):
retriever | format | prompt | model | parser——一切皆 Runnable,声明式组合,支持流式/异步/并行(fan-out/fan-in)。
架构师视角的演进认知:Chain 家族的演进方向是从"预封装类"到"组合原语"——旧版 Named Chain(LLMChain 等)是固定封装,灵活度低;LCEL 把链退化为可组合的管道原语,配 LangGraph 的图状态机覆盖循环与分支——线性流水线用 LCEL,带循环/状态/人工介入的用 LangGraph。
选型纪律:能静态编排就不要 Agent(Chain 可测、延迟与成本可预估);Chain 之间传结构化数据(Pydantic)而不是自然语言字符串——链间契约清晰是可维护性的关键。
💻 全栈开发专家
Chain 是 LangChain 里「把多个组件串成流水线」的抽象。要分新旧两代说(面试高频踩坑点):
旧版(0.1 时代,已废弃):
LLMChain:prompt + LLM 的最小组合;SequentialChain:多链顺序串联(前链输出作后链输入);RouterChain:按输入动态选分支链(意图路由); 这些类已 deprecated,新代码不要再用。
新版(LCEL,现行标准):一切用 Runnable 管道表达:
python
# 顺序链:检索→格式化→生成→解析
chain = (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| prompt # 相当于旧 LLMChain 的 prompt 部分
| llm
| StrOutputParser())
# 路由链(旧 RouterChain 的替代):RunnableLambda 分发
router = RunnableLambda(
lambda x: tech_chain if is_tech(x["q"]) else general_chain)
# 分支并行(旧版做不到的)
parallel = RunnableParallel(critique=critic, answer=draft)类型学归纳(新旧对照记):
- 顺序链 →
a | b | c管道; - 路由链 →
RunnableLambda/RunnableBranch; - 并行 →
RunnableParallel; - 带状态循环的复杂编排 → 上 LangGraph(Chain 的尽头是 Graph)。
LCEL 链的工程红利:自动获得流式、异步、batch、重试回退(with_retry()/with_fallbacks())——旧 Chain 类这些都要手写,这也是官方废弃它的原因。写新项目直接 LCEL,遇到要循环/人工中断再升级到 LangGraph。