LangChain 大模型应用开发:传统编程范式思维的应用
本文基于传统编程范式思维,详细解析了 LangChain 大模型应用开发的六大核心组件。内容包括 Chains 用于任务组合,Agents 赋予模型主动性,Callbacks 实现自定义逻辑,以及 Model I/O、Retrieval 和 Memory 三大新能力。文章提供了 Python 代码示例展示各组件用法,并补充了综合应用场景,旨在帮助开发者迁移传统软件工程经验,快速构建具备检索增强和对话记忆能力的 AI 应用系统。

本文基于传统编程范式思维,详细解析了 LangChain 大模型应用开发的六大核心组件。内容包括 Chains 用于任务组合,Agents 赋予模型主动性,Callbacks 实现自定义逻辑,以及 Model I/O、Retrieval 和 Memory 三大新能力。文章提供了 Python 代码示例展示各组件用法,并补充了综合应用场景,旨在帮助开发者迁移传统软件工程经验,快速构建具备检索增强和对话记忆能力的 AI 应用系统。

LangChain 的组件与架构图基本描述了其核心抽象层及相互联系。主要包括以下六个部分,基于与传统软件开发的比较,将其分为两个类型:
本文将重点介绍前三个核心概念,并补充后三个部分的说明,最后给出一个综合使用示例。
做过传统软件开发的小伙伴对链这个名词肯定不陌生,比如 Java 设计模式里的责任链。LangChain 中的 Chain 是用于组合组件的结构化方式,它可以让你按照一定的顺序和逻辑来执行不同的任务。你可以把它想象成语言模型进行流水线作业,每个环节都有一个特定的目标和功能。
Chains 有以下四种主要类型:
| 类型 | 作用 |
|---|---|
| LLMChain | 用于在语言模型周围添加一些功能的简单 Chain,由 PromptTemplate 和语言模型组成,支持格式化 Prompt 并返回输出 |
| RouterChain | 用于动态选择下一个要使用的 Chain 的范式,包含路由器和目标链 |
| SequentialChain | 将多个 Chain 连接起来形成管道,允许将一个调用的输出作为另一个调用的输入 |
| TransformChain | 用于创建通用的转换 Chain,可对输入进行预处理或后处理 |
Chains 是 LangChain 中完成业务逻辑拆解和组装的核心组件,可以灵活构建复杂应用程序。
from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import ChatPromptTemplate
from langchain.schema import BaseOutputParser
class CommaSeparatedListOutputParser(BaseOutputParser):
"""Parse the output of an LLM call to a comma-separated list."""
def parse(self, text: str):
return text.strip().split(", ")
template = """You are a helpful assistant who generates comma separated lists.
A user will pass in a category, and you should generate 5 objects in that category in a comma separated list.
ONLY return a comma separated list, and nothing more."""
human_template = "{text}"
chat_prompt = ChatPromptTemplate.from_messages([
("system", template),
("human", human_template),
])
chain = chat_prompt | ChatOpenAI() | CommaSeparatedListOutputParser()
result = chain.invoke({"text": "colors"})
print(result)
# >> ['red', 'blue', 'green', 'yellow', 'orange']
Agent 的概念与传统的代理模式基本一致,通过对稳定的核心能力进行封装,通过 Agents 代理提供访问入口。LangChain 中 Agents 与传统代理模式的区别在于,其代理的核心能力便是 AI 大模型。通过 Agents,我们可以让语言模型具有主动性和智能性。
LangChain 主要提供以下六种代理类型:
| 类型 | 作用 |
|---|---|
| Zero-shot ReAct | 根据工具描述决定使用哪个工具的 Agent |
| Structured input ReAct | 使用多输入工具的 Agent,适合复杂工具调用 |
| OpenAI Functions | 与特定 OpenAI 模型协作,检测何时调用函数 |
| Conversational | 用于对话场景,结合 ReAct 框架和内存 |
| Self-ask with search | 利用中间答案工具查找事实答案 |
| ReAct document store | 与文档存储交互,需 Search 和 Lookup 工具 |
Agents 是 LangChain 工程化封装与能力复用核心手段,可动态选择和调用 Chain 或已有工具。
from langchain.llms import OpenAI
from langchain.utilities import SerpAPIWrapper
from langchain.agents import initialize_agent, Tool
from langchain.agents import AgentType
llm = OpenAI(temperature=0)
search = SerpAPIWrapper()
tools = [
Tool(
name="Intermediate Answer",
func=search.run,
description="useful for when you need to ask with search",
)
]
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
回调是各种编程语言常见的概念。LangChain 中 Callbacks 用于在链中插入自定义逻辑,让你对语言模型的行为进行控制和调整。它可以在链中的任何位置执行你定义的函数或代码。
主要回调类型包括:
from langchain.callbacks import StdOutCallbackHandler
from langchain.chains import LLMChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
handler = StdOutCallbackHandler()
llm = OpenAI()
prompt = PromptTemplate.from_template("1 + {number} = ")
chain = LLMChain(llm=llm, prompt=prompt, callbacks=[handler])
chain.run(number=2)
Model I/O 组件负责与语言模型的直接交互。LangChain 提供了多种接口适配器,支持不同厂商的模型服务。
开发者可以通过继承 BaseLanguageModel 类来实现自定义模型适配,确保系统兼容性与扩展性。
Retrieval 模块用于从外部来源获取上下文信息,是实现 RAG(检索增强生成)的关键。
典型流程:文档加载 -> 文本分割 -> 向量化 -> 存储 -> 查询相似片段 -> 注入 Prompt。
Memory 组件用于在对话过程中存储和更新上下文,使模型具备短期或长期记忆能力。
合理使用 Memory 可以避免上下文溢出,同时保持对话连贯性。
下面是一个整合了 Chain、Agent、Memory 和 Retrieval 概念的简化示例结构:
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain
from langchain.llms import OpenAI
memory = ConversationBufferMemory(memory_key="chat_history")
conversation = ConversationChain(
llm=OpenAI(),
memory=memory,
verbose=True
)
response = conversation.predict(input="你好,请介绍一下 LangChain")
print(response)
在实际生产环境中,通常会结合 Vector Store 实现知识库问答,并通过 Callbacks 监控 Token 消耗与日志记录。
本文以传统应用编程设计模式和思维为入口,介绍了 LangChain 中的 Chain、Agent、Callback、Model I/O、Retrieval、Memory 六大核心概念。通过对比传统 IT 开发经验,帮助开发者快速理解 AI 应用编程范式。掌握这些组件的组合使用,能够构建出具备复杂逻辑、外部知识检索及对话记忆能力的智能应用系统。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online