5.1 LangChain核心架构:提示模板、链与Agent模块解析
本节内容基于《大模型应用开发极简入门:基于GPT-4和ChatGPT(第2版)》第5章「使用LangChain框架和插件增强LLM功能」中的LangChain核心概念编写,涵盖模块架构、核心价值与各组件职责。
一、为什么需要LangChain
在直接调用OpenAI API时,开发者需要自行处理提示拼接、多轮对话、工具调用、检索与生成的串联等逻辑。随着应用复杂度提升,代码会变得难以维护和扩展。LangChain 作为构建LLM应用的主流框架,提供模块化、可扩展的组件,支持复杂工作流编排与多模型集成,显著降低开发门槛。本节将系统解析LangChain的核心架构,为后续实战打下基础。《大模型应用开发极简入门》第5章「LangChain核心概念」要求掌握模块架构(提示模板、链、Agent、记忆、工具、向量存储)与核心价值(模块化、可扩展、复杂工作流编排、多模型集成),本节与之一一对应。
二、核心模块架构(书5.1)
书中将LangChain的核心能力归纳为以下模块:
| 模块 | 作用 | 典型用途 |
|---|---|---|
| 提示模板(Prompt Templates) | 动态生成、参数化、复用提示 | 角色设定、任务描述、少样本示例 |
| 链(Chains) | 串联多个步骤形成工作流 | 检索→生成、多步推理 |
| Agent | 自主规划、调用工具、多步推理 | 智能助手、自动化任务 |
| 记忆(Memory) | 对话历史、上下文管理 | 多轮对话、会话持久化 |
| 工具(Tools) | 搜索引擎、API、计算器等外部能力 | 实时信息、精确计算、知识检索 |
| 向量存储(VectorStore) | 文档向量索引与检索 | RAG、知识库问答 |
2.1 模块关系示意
flowchart TB
subgraph 输入层
A[Prompt Templates]
end
subgraph 编排层
B[Chains]
C[Agent]
end
subgraph 能力层
D[LLM]
E[Tools]
F[VectorStore]
end
subgraph 状态层
G[Memory]
end
A --> B
B --> D
B --> F
C --> D
C --> E
C --> G
F --> B
三、提示模板(Prompt Templates)
3.1 核心价值
书中强调,提示模板支持动态提示生成、复用与参数化。将固定结构与可变部分分离,便于维护与A/B测试。
3.2 典型用法
# 基于书中提示工程模板思路的LangChain实现
from langchain_core.prompts import ChatPromptTemplate
# 角色+上下文+任务+要求的四要素结构
prompt = ChatPromptTemplate.from_messages([
("system", "你是一名专业的{task_type}专家"),
("human", "上下文:{context}\n任务:{task}\n要求:{requirements}")
])
# 参数化调用
msg = prompt.format_messages(
task_type="文本摘要",
context="人工智能是计算机科学的一个分支...",
task="请对上述内容进行摘要",
requirements="不超过50字"
)
3.3 与书中结构化提示的对应
书中提示工程模板包含:角色、上下文、示例、要求。在LangChain中,可通过PromptTemplate的变量实现相同结构,例如:
角色:你是一名专业的{task_type}专家
上下文:{context}
示例:{examples}
要求:{requirements}
四、链(Chains)
4.1 链的作用
链将多个步骤串联,形成检索→生成、多步推理等完整流程。书中提到LLMChain、SequentialChain、RouterChain等类型。
4.2 LLMChain
最简单的链:Prompt + LLM,实现"输入→提示→输出"。
4.3 SequentialChain
将多个链串联,前一步输出作为后一步输入。例如:摘要链→翻译链,即先摘要再翻译。
4.4 RouterChain
根据输入将请求路由到不同子链,例如按问题类型分发到"产品问答"或"售后咨询"。
4.5 链的编排价值
通过链式编排,可将RAG、多轮对话、工具调用等拆成可复用模块,便于测试与迭代。
五、Agent(智能体)
5.1 Agent的定位
书中强调,Agent具备感知-规划-行动-记忆-反思的闭环能力。与单纯调用LLM不同,Agent可自主决定何时调用工具、调用哪些工具,实现复杂任务。
5.2 与工具的关系
Agent依赖**工具(Tools)**扩展能力。书中列举了Google Search、Python REPL、API调用等。工具的描述会传给模型,模型据此决定是否调用及传何参数。
5.3 ReAct框架
Agent常用ReAct范式:推理(Thought)→行动(Action)→观察(Observation)循环,直至完成任务。本书第5章及代码模板中均有ReAct Agent的完整示例。
六、记忆(Memory)
6.1 作用
记忆用于对话历史与上下文管理。书中提到ConversationBufferMemory、VectorMemory等类型。
6.2 ConversationBufferMemory
保留全部或最近N轮对话,适合短对话场景。
6.3 VectorMemory
将历史存入向量库,按语义检索相关片段注入上下文,适合长对话或知识库增强。
6.4 与多轮对话的对应
书中多轮对话通过维护messages列表实现。LangChain的Memory封装了相同逻辑,并支持持久化、摘要等策略。
七、工具(Tools)
7.1 书中提到的工具类型
- Google Search:查询实时信息
- Python REPL:执行代码片段
- API调用:对接内部或第三方接口
7.2 与Function Calling的关系
OpenAI的Function Calling与LangChain的Tool可结合使用:将Function描述转为LangChain Tool,由Agent统一调度。
7.3 自定义工具
书中强调,可开发内部API、数据库、第三方服务等自定义工具,扩展Agent能力。
八、向量存储(VectorStore)
8.1 在RAG中的角色
RAG流程为:文档加载→分块→嵌入→向量索引→检索→生成。向量存储负责索引与检索。
8.2 与LlamaIndex的配合
书中提到LlamaIndex用于文档加载、分块、索引构建。LangChain侧重工作流编排,LlamaIndex侧重文档处理。二者常组合使用:LlamaIndex构建索引,LangChain编排检索与生成。
九、核心价值总结(书5.1)
- 模块化:各组件可独立开发、测试、替换
- 可扩展:易于添加新工具、新链、新模型
- 复杂工作流编排:通过链与Agent串联多步流程
- 多模型集成:支持OpenAI、Anthropic、本地模型等,便于切换与降级
十一、与书中 5.5 插件与扩展的衔接
书中 5.5 节讲插件与扩展(OpenAI 插件、自定义工具开发)。LangChain 的 Tools 即自定义工具的通用抽象:可将内部 API、数据库、第三方服务封装为 Tool,供 Agent 或链调用。学完本节后,在 5.3 节会具体使用 Tool 与 Memory,在 5.6 节会使用 Agent + Tool 实现 ReAct;5.5 节的 LlamaIndex 则侧重 RAG 的文档与索引。这样「提示模板—链—记忆—工具—向量存储—Agent」在书中与本节一一对应,便于按模块查阅与扩展。初次使用 LangChain 时,建议先只用到「提示模板 + LLMChain」或「提示模板 + 单次 LLM 调用」,再逐步引入 Memory、Tool 和 Agent,避免一次性概念过多。
十二、小结
本节基于书中第5章「LangChain核心概念」,系统解析了提示模板、链、Agent、记忆、工具、向量存储六大模块的职责与协作关系。理解这一架构,是高效使用LangChain的基础。下一节将深入LLMChain、SequentialChain等基础组件的实战。
十三、与第 3 章架构、第 4 章提示的衔接
3.2 节分层架构:LangChain 的「逻辑层」对应链与 Agent;模型层对应 LLM 封装;数据层对应向量存储与记忆持久化。按 3.2 五层设计时,LangChain 主要覆盖逻辑层与模型层接口。第 4 章提示工程:提示模板中的角色、任务、输出格式与 4.1 四要素一致;少样本、CoT、JSON 约束可在模板中参数化,与 4.2~4.4 结合使用。书中从第 3 章架构到第 4 章提示、第 5 章 LangChain 的递进关系,在本节即体现为「架构中的逻辑层 → 提示设计 → LangChain 模块化实现」。初次使用 LangChain 时,建议先只用到「提示模板 + LLMChain」或「提示模板 + 单次 LLM 调用」,再逐步引入 Memory、Tool 和 Agent,避免一次性概念过多。
下一节预告:5.2 LangChain基础组件:LLMChain与SequentialChain实战