LangChain 核心:链 (Chains)

2 阅读2分钟

📖LangChain 核心:链 (Chains)

Chains 是 LangChain 的灵魂。它允许你将多个组件(模型、提示词、其他链)组合在一起,创建一个单一的、相干的应用。

理解 Chains 之后,你就具备了构建复杂 LLM 工作流的能力。

  1. 基础链:LLMChain

定义

这是最简单的链,由一个 PromptTemplate 和一个 LLM 组成。

作用

接收输入,格式化提示词,发送给模型,返回结果。

  1. 顺序链 (Sequential Chains)

当你需要一个步骤的输出作为下一个步骤的输入时,使用顺序链。

A. SimpleSequentialChain

特点:单输入/单输出

流程:Step 1 的输出直接变成 Step 2 的输入

B. SequentialChain

特点:多输入/多输出

流程:可以更复杂地路由数据流,保留中间变量

  1. 路由链 (Router Chain)

这是最进阶的链类型。它允许你根据输入的具体内容,动态地将请求发送给不同的子链。

结构组成

Router Chain:负责决定去哪个子链

Destination Chains:具体的子链(例如:数学问题、文学问题)

Default Chain:找不到匹配子链时的默认逻辑

  1. 代码实现示例

以下展示了如何构建一个顺序链:

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)

  1. 核心逻辑总结

链类型

适用场景

输入/输出特性

LLMChain

基础任务

灵活

SimpleSequentialChain

简单的线性工作流

严格单对单

SequentialChain

复杂的多步任务

支持多个中间变量

RouterChain

条件分支逻辑

动态路由

  1. 为什么使用 Chains?

为什么不直接写 Python 函数?

可观测性 (Tracing):配合 LangSmith 等工具,清晰看到每一步的输入输出

标准化:所有链都遵循相同的接口(call),方便集成

生态集成:LangChain 内置了大量预制链(SQL 链、文档问答链)

关键要点:理解 Chains 之后,你就具备了构建复杂 LLM 工作流的能力。这是从简单对话到智能应用的关键一步。