5.1 LangChain核心架构:提示模板、链与Agent模块解析

3 阅读6分钟

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)

  1. 模块化:各组件可独立开发、测试、替换
  2. 可扩展:易于添加新工具、新链、新模型
  3. 复杂工作流编排:通过链与Agent串联多步流程
  4. 多模型集成:支持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实战