LangChain 中的链:Chain

LangChain 中的 Chain(链) 是其最核心的组件之一,可以把它理解为一个可编排、可复用、按顺序执行的任务流水线

简单来说,Chain 允许把"调用大模型"、"检索文档"、"处理文本"等多个步骤串联起来,上一个步骤的输出自动成为下一个步骤的输入。这让你能像搭积木一样,构建出从简单问答到复杂知识库检索等各式各样的 AI 应用。

链条怎么搭

目前的 LangChain 推荐使用一种函数式编程风格的LCEL(LangChain 表达式语言) 来构建链。它使用管道符 | 将不同组件连接起来,代码非常简洁直观。

1. 基础单步链:最简单的"一问一答"

这是最基础的用法,将一个提示模板(Prompt)和模型(Model)连接起来。

复制代码
from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI

# 1. 定义提示模板
prompt = PromptTemplate.from_template("为'{city}'这个城市写一句旅游宣传语。")

# 2. 定义模型
model = ChatOpenAI(model="gpt-3.5-turbo")

# 3. 用 | 运算符构建链
chain = prompt | model

# 4. 运行链
response = chain.invoke({"city": "成都"})
print(response.content) # 例如:输出"成都,一座来了就不想走的城市。"
2. 顺序链:搭积木式组合

这是最常用的模式,能实现更复杂的工作流,例如"先生成一份大纲,再根据大纲扩写成完整文章"。

复制代码
from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI

model = ChatOpenAI(model="gpt-3.5-turbo")

# 步骤 1: 生成大纲的链
outline_prompt = PromptTemplate.from_template("为'{topic}'写一份文章大纲")
outline_chain = outline_prompt | model

# 步骤 2: 根据大纲扩写文章的链
article_prompt = PromptTemplate.from_template("根据下面的大纲,写一篇完整的文章:\n\n大纲: {outline}")
article_chain = article_prompt | model

# 将两个链组合起来
full_chain = outline_chain | (lambda x: {"outline": x.content}) | article_chain

# 运行
result = full_chain.invoke({"topic": "人工智能发展史"})
print(result.content)
3. RAG 检索链:让模型"开卷考试"

这是目前最主流的用法之一,让模型先从一个知识库(如向量数据库)中检索相关文档,再根据这些文档来回答问题,可以有效减少"幻觉"。

复制代码
from langchain_openai import ChatOpenAI
from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain

# 假设已有一个 retriever(检索器)
retriever = ... 

model = ChatOpenAI(model="gpt-3.5-turbo")

# 1. 定义"整合文档并提问"的链
combine_chain = create_stuff_documents_chain(model, prompt)

# 2. 创建最终的 RAG 检索链
rag_chain = create_retrieval_chain(retriever, combine_chain)

# 3. 运行链
response = rag_chain.invoke({"input": "根据文档,2026年公司的主要战略是什么?"})
print(response["answer"])

Chain 的主要类型

除了 LCEL,LangChain 也保留了更显式的链类型,以应对特定场景。

链类型 核心原理 适用场景
LLMChain 最基础的链,直接将提示模板语言模型组合。 单一的LLM调用任务。
顺序链 (SequentialChain) 固定顺序执行多个链,上一个的输出是下一个的输入。 线性、多步骤的任务,如内容提炼、翻译、代码生成流水线。
路由链 (RouterChain) 根据输入内容动态选择后续的子链来执行。 多领域问答、客户服务分流等需要条件分支的场景。
检索链 (RetrievalQA) 先从向量库检索相关文档,再将这些文档作为上下文交给LLM生成答案。 构建基于私有数据的问答系统(RAG应用)。
转换链 (TransformChain) 用于在链中对数据进行清洗、格式化等预处理后处理 清洗用户输入、解析LLM的输出为特定格式(如JSON)。

Chain 这种模块化设计,可以轻松地构建、调试和维护复杂的 AI 应用。它最大的价值在于,将"模型的强大推理能力"与"具体的业务逻辑"完美地衔接了起来。

如果正在用 LangChain 开发,建议优先使用 LCEL 语法。