# 9 - LangChain 概述与架构

---

**本章课程目标：**

- 建立对 **LangChain** 的整体认识，知道它是什么、解决什么问题、在 AI 应用开发里处于什么位置。
- 理解 LangChain 在 **1.x 时代**的产品边界、包结构、版本演进，以及它与 **LangGraph、LangSmith、Deep Agents** 的关系。
- 建立对 **Model I/O、Chains、Memory、Retrieval、Tools/Agents、Callbacks** 这六类教学视角的整体认知。

**学习建议：** 这一章先当成 LangChain 的地图，不急着记 API。读完最好能说清三件事：LangChain 帮你组织哪些能力、它不负责哪些底层能力、1.x 写法和旧资料里的 0.x 写法为什么会不一样。看完后直接进入 [第 10 章](10-LangChain快速上手与HelloWorld.md) 跑一次最小调用，抽象概念会落得更稳。

**官方文档与资源**：详见 [工具导航与参考资料索引 - LangChain](工具导航与参考资料索引.md#LangChain)。

---

## 1、LangChain 简介

### 1.1 定义

**LangChain** 是一个面向 **LLM 应用开发**的开源框架。它本身**不是大模型**，也**不是数据库**，更**不是知识库平台**；它更像一层“**应用编排层**”，负责把模型、提示词、外部知识、工具、记忆、输出解析、调试追踪等能力组织成一个完整、可维护、可扩展的 AI 应用。

举个例子，在一个“企业知识库问答助手”里，用户提问后，系统需要先去向量库检索相关资料，再把检索结果和问题一起组装成 Prompt，随后调用大模型生成答案，最后把结果整理后返回前端。这里真正扮演“连接者”和“组织者”角色的，就是 LangChain。

一句话来说，**LangChain = 用代码把大模型和外部世界连接起来的应用开发框架。**

其中，**Lang** 指 Language Model，**Chain** 指把多个环节串起来形成流程。最早的 LangChain 确实以“链式调用”闻名，但发展到今天，它已经不只是“链”，而是围绕 **Agent、RAG、工具调用、状态管理、可观测性** 形成了一整套生态。官方在发展历程中提到，LangChain 作为 Python 包公开发布于 **2022 年**，比 ChatGPT 正式发布还早约一个月，因此它几乎伴随了生成式 AI 应用开发的整个爆发期。

LangChain 在 GitHub 上的热度变化如下图所示：

![LangChain 主仓库（langchain-ai/langchain）GitHub Star 历史增长曲线，2023 初至 2025 初由近零增长至约 10 万+（star-history.com 风格图）](images/9/9-1-1-1.png)

从工程视角看，LangChain 的价值不在于“替你发一次请求”，而在于帮你把下面这些原本零散的东西组织起来：

- 不同厂商的大模型调用方式
- Prompt 与多角色消息
- 结构化输出与解析
- 检索增强生成（RAG）
- 工具调用、Agent、多步任务
- 记忆、会话状态、持久化
- 日志、追踪、调试、评估

这也是为什么它会被很多人看作 AI 应用开发里的“基础框架”。

### 1.2 为什么需要 LangChain

如果你只是偶尔调一下模型 API，直接用 OpenAI、阿里百炼、DeepSeek、智谱等厂商 SDK 完全没问题；但一旦进入真实项目，单纯“把一个字符串发给模型，再拿回一段文本”的开发方式很快就会暴露出一批工程问题。

![大语言模型单独使用时的典型局限：知识截止、无实时联网、难接私有数据与数据库、输出稳定性与工具调用等（示意图）](images/9/9-1-2-1.png)

常见问题包括：

- **模型接口不统一**：不同厂商 SDK、参数命名、返回结构各不相同，切换模型成本高。
- **输入输出不稳定**：今天让它输出 JSON 成功，明天稍微换个问题就可能跑偏。
- **很难连接外部知识**：企业文档、数据库、向量库、内部 API 都需要手动接。
- **多步任务难维护**：例如“先检索，再总结，再调用工具，再组织回复”，靠手写流程容易乱。
- **多轮对话难管理**：你需要决定哪些历史消息保留、何时裁剪、何时持久化。
- **线上排查困难**：模型为什么答错、工具为什么没调、哪一步慢、哪里丢上下文，光看日志很难定位。

LangChain 并不会神奇地消灭这些复杂度，但它给你提供了一套统一抽象，让你能用更规范的方式去解决它们。

### 1.3 已经能直接调模型了，为什么还要学 LangChain

答案很简单：**直接调 API 可以，做简单任务时甚至更直接；但只要你开始做“应用”，框架就会越来越有价值。**

最典型的类比，就是 Java 里的 **JDBC** 或 **Spring**。你的业务代码不想被某一个数据库或某一个中间件写死，于是你希望中间有一层统一接口来隔离差异。在大模型应用里，这一层统一抽象、统一编排、统一接入的角色，LangChain 很大程度上就在承担。

![JDBC 与 LangChain 的类比：左侧为 Java 经 JDBC 对接多种数据库；右侧为 AI 应用经 LangChain 对接多种模型 API（直连单一 API「可行但不建议」的示意）](images/9/9-1-3-1.jpg)

放到项目开发里，两种路线的边界大致是：

- **只调 API**：适合单次文本生成、简单脚本、快速验证。
- **用 LangChain**：适合做成真实应用，例如客服助手、知识库问答、数据分析助手、工具调用 Agent、多轮对话系统。

所以，LangChain 不是“必须学”，但如果你的目标是做 **RAG、Agent、企业级 AI 应用、AI 服务接入现有业务系统**，它会显著降低你后续的组织成本。

### 1.4 LangChain 与 Coze / Dify 的区别

很多人第一次接触 LangChain 时，都会问一句：**“我不是已经会用 Coze 或 Dify 了吗，为什么还要学这个？”**

本质上，它们不是同一类东西：

| 维度         | Coze / Dify 等平台                                                            | LangChain                                                                 |
| ------------ | ----------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
| **是什么**   | **产品 / 平台**：通过网页可视化界面、工作流节点、知识库管理等方式搭建 AI 应用 | **代码框架 / 库**：在 Python 或 JS 中以代码方式编排模型、工具、RAG、Agent |
| **使用方式** | 打开浏览器，拖拽节点、配置模型、填写提示词、连接知识库，最后发布应用或 API    | 在本地或服务器写代码，安装依赖，调用 LangChain API 构建自己的 AI 应用     |
| **适合谁**   | 产品、运营、低代码开发者，或希望快速验证业务想法的人                          | 开发者、后端、算法工程师，需要把 AI 能力深度接入已有系统的人              |
| **灵活性**   | 受限于平台已有节点、插件、部署方式和权限设计                                  | 由代码完全控制，可接内部 API、自建数据库、私有模型、定制工具链            |
| **典型场景** | 快速做一个客服机器人、知识库问答、流程自动化 Demo                             | 做企业内部 AI 中台、复杂 RAG 服务、可定制 Agent、与业务系统深度耦合的服务 |

实际项目里，这两类工具经常不是“二选一”，而是**先平台、后框架；先低代码验证，再代码化落地**：

- 在业务探索阶段，用 **Coze / Dify** 快速验证需求。
- 在需要深度定制、接公司内部系统、做复杂编排时，用 **LangChain / LangGraph** 重构为代码服务。

这个思路，和你在本套教程里前半部分先学 Coze / Dify，后半部分再进入 LangChain / LangGraph，正好是一致的。

### 1.5 为什么现在更适合学

现在学习 LangChain，时机其实比前两年更合适。原因不是“它更简单了”，而是**它的边界变清晰了**。

- **官方主线已经进入 1.x 时代**：相比早期 0.x 快速迭代、命名变动频繁的阶段，1.x 的学习入口更清晰，重点放在 `create_agent`、统一模型初始化、消息、工具、记忆、检索和可观测性上。
- **LangChain、LangGraph、LangSmith 的分工更明确**：你更容易理解“什么时候用高层框架，什么时候用底层图编排，什么时候做调试与评估”。
- **生态成熟**：官方文档、Reference、Learn 教程、Academy 课程已经形成闭环，不再只是零散博客和社区笔记。
- **应用场景更真实**：过去很多教程停留在 Demo 级别；现在官方内容和社区实践都更强调生产可用性，例如人审、持久化、Tracing、评估、部署等。

简单说，**现在学 LangChain，不再只是学一个“会不会调模型”的库，而是在学一套 AI 应用工程化方法。**

### 1.6 优势、边界与不足

LangChain 的优势很明显，但它也不是银弹。学习时要同时看到它的“能做什么”和“不能替你做什么”。

**优势：**

- 统一模型接口，降低模型切换和多模型共存成本。
- 提供 Prompt、Message、Parser、Retriever、Tool、Agent 等常用抽象。
- 能把“单次调用”提升为“可维护流程”。
- 与 LangGraph、LangSmith、MCP 等生态衔接紧密，利于走向复杂应用。
- 资料多、案例多、社区活跃，适合建立体系化认知。

**边界：**

- 它**不会替你设计业务逻辑**，只是帮你更好地实现。
- 它**不会替你训练模型**，模型能力强弱仍取决于底层模型。
- 它**不会替你存业务数据**，向量库、数据库、对象存储仍要你自己选型。
- 它**不会天然让效果变好**，Prompt、知识质量、工具设计、评估流程依然是关键。

**不足与槽点：**

1. **版本变化快**：老教程里的类名、导入路径、写法，很可能在新版本里已经迁移。
2. **抽象多，学习成本不低**：初学时容易觉得“明明只是调个模型，为什么多了这么多概念”。
3. **历史包袱真实存在**：很多文章还在讲 `LLMChain`、`ConversationChain`、旧版 AgentExecutor，但新项目未必应照搬。
4. **文档存在新旧并存现象**：官方文档已经比早期稳定很多，但生态广，仍会碰到版本语境不一致的问题。

所以结论很明确：**LangChain 适合做 AI 应用，但要用“工程框架”的心态去学，不要把它当成一个简单工具函数库。**

### 1.7 扩展：LangChain4J 简介

如果你的技术栈主要是 Java，可以了解 **LangChain4J**。它本质是“Java 生态里的 LangChain 风格框架”，常与 Spring Boot、Spring AI、企业中台场景搭配使用，适合 Java 团队把 LLM、RAG、Tools、Agent 等能力整合进现有系统。

- **等价理解**：LangChain for Java
- **官方地址**：https://github.com/langchain4j/langchain4j
- **补充学习**：若你未来要做企业 Java 项目接入大模型，LangChain4J 会是一个很常见的关键词
- **视频教程**：https://www.bilibili.com/video/BV1mX3NzrEu6/ （尚硅谷-周阳）

---

## 2、LangChain 定位

### 2.1 大模型开发体系分类

如果把大模型相关工作从底到顶做一个粗略分层，大致可以分为三类：

- **基础模型层**：预训练、对齐、推理优化、模型架构设计，例如 GPT、Qwen、DeepSeek、GLM 等背后的模型研发。门槛高、投入大，通常要求较强的数学、深度学习和大规模工程背景。
- **模型定制层**：在「基础模型层」的基础上做领域微调或专用优化（金融、医疗、法律等），偏模型训练/微调与行业落地。
- **应用开发层**：把模型接入业务流程，做成聊天助手、知识库问答、Agent、工作流系统、数据助手等应用。

**LangChain 主要服务的，就是第三层：应用开发层。**

它不负责训练模型，也不直接替代推理服务平台；它负责的是：**如何把模型能力变成一个能工作的应用系统。**这里要先分清边界：LangChain 更接近 **AI 应用开发框架**，不是模型研究工具。

### 2.2 应用技术架构

下面这张图可以帮助你理解 LangChain 在系统架构中的位置：

![LLM 应用四层架构：UI 交互层、服务/链层、模型层、存储层及数据流方向；LangChain 主要处于服务/链层](images/9/9-2-2-1.png)

| 层级              | 这层负责什么                                                                 | 常见对象 / 产品                                     | LangChain 在哪里                       |
| ----------------- | ---------------------------------------------------------------------------- | --------------------------------------------------- | -------------------------------------- |
| **UI 交互层**     | 用户交互入口，例如网页、App、管理后台、聊天界面、表单页面、可视化工作流界面  | Web 前端、管理后台、Langflow、聊天窗口              | 不在这一层                             |
| **服务 / 编排层** | 负责把模型、Prompt、检索、工具、记忆、输出解析、状态流转等能力组织成业务流程 | **LangChain**、LangGraph、自研 AI 服务层            | **LangChain 主要就在这一层**           |
| **模型层**        | 提供 LLM、Embedding、Rerank、多模态模型等基础能力                            | OpenAI、阿里百炼、DeepSeek、Ollama、Hugging Face 等 | LangChain 通过统一接口调用这一层       |
| **存储层**        | 存储原始文档、向量、会话、用户状态、业务数据                                 | MySQL、Redis、Pinecone、Chroma、Milvus、对象存储等  | LangChain 会访问这一层，但不替代这一层 |

**数据流**：请求 **自上而下**（用户 → 服务/链 → 模型 → 存储），结果 **自下而上**返回用户；LangChain 处在 **服务/编排层**，串联 UI、模型与存储，而不是替代其中任一层。

> **为什么说 LangChain 相当于 Java 里的 Spring Boot？**  
> 因为**干的事很像**：都是「**把多种异构组件整合到一个应用里，用统一抽象让你写业务逻辑，框架管连接和编排**」。
>
> - **Spring Boot**：在 Java 里整合数据库（MySQL）、缓存（Redis）、消息队列（Kafka）、HTTP 接口等——你写业务代码，Spring 管配置、依赖注入、生命周期；换数据源或加中间件时改配置即可，不必手写一堆连接代码。
> - **LangChain**：在大模型应用里整合各种模型（GPT、通义）、向量库（Pinecone）、工具、记忆等——你写「链怎么串、Agent 用什么工具」，LangChain 管何时调模型、何时查库、怎么拼 prompt；换模型或加 RAG 时改配置与链即可，不必手写每次请求和拼装。  
>   所以常说：**LangChain 是 AI 应用开发里的「Spring」**——站在「服务/链层」，把下层模型和存储、上层交互串起来，你专注业务编排，框架负责对接各组件。

### 2.3 使用场景

理解“位置”之后，再看“职责”就会清晰很多。真实项目里，LangChain 往往承担下面几件事：

1. **统一接模型**：同一个项目同时接入通义、DeepSeek、OpenAI、Ollama，本质上是在做多模型编排。
2. **统一处理输入输出**：用 PromptTemplate、消息对象、输出解析器来规范请求与结果。
3. **组织固定流程**：把“提问 → 检索 → 生成 → 解析”做成稳定链路。
4. **接入工具与外部系统**：比如天气查询、数据库查询、内部 API、工单系统、邮件系统。
5. **管理状态与记忆**：多轮聊天、会话上下文、用户偏好、长期记忆。
6. **做调试和评估**：把调用过程 trace 出来，定位哪一步出了问题。

如果结合你这套教程的项目场景来看，就非常好理解了：

- 在 **Coze / Dify** 阶段，我们做了商品评论分析、客户投诉分类、客服对话记录分析等平台化应用。
- 进入 **LangChain** 阶段后，我们开始把这些“AI 能力”落到代码服务里，例如多模型接入、输出解析、记忆管理、Tools、RAG、MCP、Agent。
- 再往后到 **LangGraph** 阶段，本质上是在进一步解决“流程更复杂、状态更多、控制更细”的问题。

这条路线，本质是从“会用 AI 平台”走向“会做 AI 系统”。

### 2.4 岗位与招聘对标

目前在招聘平台上，越来越多岗位会明确写出：

- 熟悉 LangChain / LangGraph / RAG / Agent
- 有大模型应用开发经验
- 能接入向量库、知识库、工具调用
- 熟悉 Prompt、模型调用、可观测性、评估

换句话说，**LangChain 已经不是“可选了解项”，而是很多 AI 应用工程岗位的高频关键词**。当然，不同公司未必只用 LangChain，但你一旦掌握这套思维，再迁移到其他框架会快很多。

> 附：从事「基础通用大模型」开发者简历（示意）

![招聘场景中简历片段示意](images/9/9-2-4-1.png)

---

## 3、LangChain 包与版本对比

### 3.1 版本演进：从“链”到“Agent + 图 + 生态”

LangChain 的演进大致可以分成三个阶段来理解：

**第一阶段：0.0.x / 0.1 早期阶段，特点是“链优先”。**  
这一时期大家更多把 LangChain 理解成“Prompt + LLM + Chain”的组合工具，很多经典写法例如 `LLMChain`、`ConversationChain`、各种旧版 AgentExecutor 都是从这里来的。

![LangChain V0.1 时期架构示意：以链（Chain）与组件组合为主线的经典教学图](images/9/9-3-1-1.gif)

**第二阶段：0.2 / 0.3 阶段，开始重视生态拆分和工程边界。**  
这一时期官方逐渐把 LangChain、集成包、部署与调试能力拆开，形成更清晰的产品层次。你也会在很多 2024 年左右的教程里看到这套结构图。

![LangChain V0.2/V0.3 生态：架构、组件、部署三层示意](images/9/9-3-1-2.gif)

> **说明**：上图将 LangChain 生态分为三层——**架构（Architecture）**、**组件（Components）**、**部署（Deployment）**。
>
> - **最底层（架构）**：LangChain + LangGraph，均开源。LangChain 负责链式编排与基础抽象，LangGraph 提供图结构、循环与多步推理。
> - **中间层（组件）**：Integrations 等与外部 API、数据库、第三方模型的集成。
> - **最顶层（部署）**：LangGraph Cloud（云部署）、LangSmith（调试、测试、监控、提示管理等商业化能力）。

**第三阶段：1.x 阶段，重点变成“精简主包、强化 Agent、与 LangGraph 深度融合”。**  
官方文档在 1.x 里强调：`langchain` 主包只保留核心高层能力，集成拆到独立 provider 包，旧能力迁到 `langchain-classic`，Agent 则建立在 LangGraph runtime 之上。

![LangChain 1.x 轻核心示意：langchain-core 为底座，主包精简、集成拆至各 provider 包并与 LangGraph 等协作](images/9/9-3-1-3.gif)

如果记一个时间点即可：

- **2024 年 2 月**：LangGraph 开源发布
- **2025 年 10 月 20 日**：LangChain 官方发布 **v1.0.0**
- **现在**：学习 LangChain 应以 **1.x 文档语境**为主

### 3.2 当前官方产品线理解

现在官方已经不只是在讲一个 `langchain` 包，而是在讲一整套产品线。在入门阶段来说，最重要的是把这几个名字区分开：

| 名称            | 角色定位                       | 你可以怎么理解                                                       |
| --------------- | ------------------------------ | -------------------------------------------------------------------- |
| **LangChain**   | 高层应用框架                   | 快速构建 Agent 和 AI 应用的主入口，屏蔽大量底层细节                  |
| **LangGraph**   | 低层图编排与运行时             | 当你的流程更复杂、需要强状态控制、循环、持久化、人审时使用           |
| **LangSmith**   | 可观测性、评估、调试、部署平台 | 用来追踪、调试、评估和上线应用                                       |
| **Deep Agents** | “开箱即用”的复杂 Agent 方案    | 官方当前推荐的复杂 Agent 起步方案，建立在 LangChain / LangGraph 之上 |

这和早期“LangChain = 一切”的印象已经不一样了。现在可以这样区分：

- 想快速做 Agent：可以从 **LangChain** 入手
- 想做更复杂、更可控的 Agentic Workflow：用 **LangGraph**
- 想做追踪、评估、部署：用 **LangSmith**
- 想快速做更“重型”的复杂 Agent：可以关注 **Deep Agents**

**本套教程的主线仍然是：LangChain → LangGraph → MCP / 多智能体。**这条路线对入门更友好，因为你先掌握基础抽象，再进入图编排，知识是连贯的。

### 3.3 0.x 与 1.x 的核心差异

下面这张图对应的是大家最容易感受到的变化：**写法变了，重点也变了。**

![LangChain 0.x 与 1.x 核心差异：旧写法多步组装，新主线强调统一入口、create_agent 与 LangGraph Runtime](images/9/9-3-3-1.jpeg)

先用一句话总结：

> **0.x 更像“很多高层类 + 组合式积木”，1.x 更像“精简主包 + 统一入口 + Agent 建立在 LangGraph 之上”。**

以 Agent 为例，变化尤其明显：

```text
# 约 0.x：常见需要分多步组装
[Model] → [Tools] → [Prompt] → [Agent] → [Executor]

# 约 1.x：常见收敛为高层入口
create_agent(模型、工具、提示等) → [Agent]
```

核心变化可以概括为：

| 对比项          | 0.x / 旧写法                          | 1.x / 新写法                             |
| --------------- | ------------------------------------- | ---------------------------------------- |
| **Agent 创建**  | 常见要手动组装 Agent + Executor       | 以 `create_agent` 为主入口               |
| **模型初始化**  | 常见直接记忆具体类或旧导入路径        | 更强调统一入口，如 `init_chat_model`     |
| **主包内容**    | `langchain` 中内容很多，历史包袱重    | `langchain` 主包被精简，只聚焦核心能力   |
| **旧能力去向**  | `LLMChain`、老 Retriever 等混在主包里 | 迁到 `langchain-classic`                 |
| **底层运行时**  | 以前很多人只感受到“链”                | 现在 Agent 明确建立在 **LangGraph** 之上 |
| **Python 版本** | 老资料中常见 3.8 / 3.9                | 官方 1.x 要求 **Python 3.10+**           |

这里有一个容易混淆的点：
**并不是说 1.x 以后“链”就没用了，而是说很多旧式高层 Chain 类不再是官方推荐主线。**课程后面的 [第 15 章 LCEL 与链式调用](15-LCEL与链式调用.md) 仍然是主线内容，因为“把多个步骤组合起来”的思想从来没有过时，只是实现方式从“某个现成 Chain 类”逐渐转向 **Runnable / LCEL / Graph**。

### 3.4 LangChain 常见包分类

这一部分是原来最容易写乱的地方，因为 **1.x 的包划分和早期已经不一样了**。下面按当前官方主线重新梳理一遍。

| 包 / 模块                                                        | 作用                    | 说明                                                                     |
| ---------------------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------ |
| **langchain-core**                                               | 核心抽象层              | 包含消息、Runnable、工具基础、Prompt 基础、模型接口等，是整个生态的底座  |
| **langchain**                                                    | 高层应用框架主包        | 1.x 中聚焦核心高层能力，如 Agent、统一模型初始化、消息与工具等           |
| **langchain-openai / langchain-anthropic / langchain-ollama** 等 | 厂商 / provider 集成包  | 每个模型厂商或平台通常有自己的独立集成包，便于独立版本管理               |
| **langchain-community**                                          | 社区集成包              | 放置大量社区维护的集成，例如某些工具、loader、向量库、第三方连接器等     |
| **langchain-classic**                                            | 旧版 / 兼容包           | 承载许多从主包迁出的经典能力，如旧 Chains、旧 Retrievers、旧 Indexing 等 |
| **langgraph**                                                    | 图编排与运行时          | 用于构建更复杂、可控、可持久化的 Agentic Workflow                        |
| **langsmith**                                                    | 调试、评估、Tracing SDK | 对接 LangSmith 平台，常用于可观测性与实验评估                            |
| **langchain-text-splitters**                                     | 文本切分组件            | RAG 常用，负责把长文本拆分成合适片段                                     |
| **langchain-mcp-adapters**                                       | MCP 适配包              | 用于在 LangChain / LangGraph 应用中接入 MCP 工具                         |

这里特别纠正一个常见误区：

> **`langchain-openai`、`langchain-anthropic` 这类包不是 `langchain-community` 里的别名，它们现在是独立 provider 包。**

这也是官方当前强调“独立集成包”的原因：模型厂商变化太快，拆开后更利于单独维护。

### 3.5 学习时如何面对版本差异

因为互联网上大量资料还停留在 0.x 语境，所以你学习时几乎一定会碰到“视频里这样写，为什么我这里不一样”的情况。建议按下面的原则处理：

1. **新项目、新代码，优先学习 1.x。**
2. **看到 `LLMChain`、`ConversationChain`、旧 AgentExecutor，先把它们理解为历史写法。**
3. **看到旧教程时，重点学“思路”，不要死记“类名”。**
4. **以官方文档的当前导入路径和当前 API 为准。**
5. **如果课程示例兼容旧写法，目的是帮助你读懂旧生态，不代表新项目都要这么写。**

---

## 4、LangChain 核心模块

### 4.1 先建立一张“全景图”

学习 LangChain 时，最容易乱的地方在于：一会儿看到 **Model I/O**，一会儿看到 **Chains**，一会儿又看到 **Messages、Tools、Memory、Retrieval、Callbacks**，感觉像一堆名词堆在一起。其实它们可以放回同一条主线里理解。

先用下面这张图把知识块铺开。它不要求你现在全部掌握，只需要看懂后面章节会沿着哪条路线展开：

![LangChain 完整知识体系：从模型接入、Prompt、Parser、LCEL 到 Retrieval、Tools、MCP、Agent 的学习路线](images/9/9-4-1-1.png)

你可以先把一个典型 AI 应用想成这样一条链路：

1. 用户发来问题
2. 系统决定要不要带上提示词、历史记录、外部知识
3. 如果需要，先检索文档或调用工具
4. 把整理后的上下文交给模型
5. 得到输出后做解析、格式化或后处理
6. 整个过程中记录日志、追踪执行链路

从这个视角看，LangChain 的核心模块其实是在回答六个问题：

- **怎么接模型**：Model / Model I/O
- **怎么组织固定流程**：Chains / LCEL
- **怎么记住上下文**：Memory
- **怎么接外部知识**：Retrieval / RAG
- **怎么让模型会做事**：Tools / Agents
- **怎么观测与调试**：Callbacks / LangSmith

下面按这个顺序来理解。

### 4.2 Model I/O（模型输入输出）

Model I/O 说的就是“**围绕模型调用本身的一圈能力**”。它解决的是：**输入怎么组织、模型怎么调、输出怎么拿得稳。**

![LangChain Model I/O：Format（输入格式化）→ Predict（调用模型）→ Parse（解析输出）三阶段关系示意](images/9/9-4-2-1.png)

从学习路径上看，它主要包含三件事：

- **Format（输入格式化）**：把原始输入组织成 Prompt 或多角色消息
- **Predict（模型调用）**：用统一接口调用不同厂商模型
- **Parse（输出解析）**：把自然语言输出转成更稳定的结构化结果

对应章节：

- [第 10 章 HelloWorld](10-LangChain快速上手与HelloWorld.md)：先学会把模型调起来
- [第 11 章 Model I/O](11-Model-I-O与模型接入.md)：理解模型接入与参数
- [第 13 章 提示词与消息模板](13-提示词与消息模板.md)：理解 Prompt、Message
- [第 14 章 输出解析器](14-输出解析器.md)：理解结构化输出

从真实开发角度看，**Model I/O 是所有 LangChain 学习的基础层**。后面学的链、记忆、RAG、Agent，本质上都还是围绕“如何更好地调用模型”展开。

### 4.3 Chains（链）：固定流程编排

**Chain** 的核心思想很简单：把多个步骤按固定顺序串起来。例如“用户问题 → Prompt 模板 → 模型调用 → 输出解析”就是一个最基础的链；“先检索，再生成”也是链；“先分类，再走不同分支”依然是链。

早期 LangChain 之所以叫 LangChain，就是因为它最著名的能力就是“把这些步骤串起来”。到了今天，虽然很多旧式高层 Chain 类已经不是主角，但**链式思维仍然是 LangChain 的基础能力**。

你需要重点区分两个概念：

- **固定流程**：更适合用 Chain / LCEL
- **动态决策流程**：更适合用 Agent / Graph

也就是说，如果你的业务过程是确定的，例如：

- 先提炼关键词，再查库，再总结
- 先清洗输入，再分类，再结构化输出
- 先识别意图，再调用特定处理链

这类流程通常优先考虑 **Chain / LCEL**，因为它更稳定、可控、好调试。

对应章节：

- [第 15 章 LCEL 与链式调用](15-LCEL与链式调用.md)

### 4.4 Memory（记忆）：记忆与上下文状态

**Memory** 指的是应用如何“记住”过去发生过什么。注意，这里的“记忆”不是让模型变得更聪明，而是让系统在多轮交互中保留必要上下文，例如历史对话、用户偏好、会话状态、阶段性结果等。

初学者常见误区是把 **Memory** 和 **RAG** 混在一起，实际上它们关注点不同：

- **Memory**：更偏“这次会话里发生过什么、这个用户之前说过什么”
- **RAG**：更偏“系统到外部知识库里查到了什么”

举个真实项目里的例子：

- 用户前一轮说“我开的是淘宝店”
- 当前轮又问“那我这个退款率高吗”

如果系统没有记忆，就不知道“这个”指的是哪个店铺、哪个上下文。  
这时需要 Memory 来保存对话历史或用户状态，而不是去知识库里做文档检索。

在官方当前语境里，记忆通常会区分为 **Short-term Memory** 和 **Long-term Memory**。在本教程里，你会先学最常见的会话历史管理，再接触 Redis 持久化等更贴近项目实战的做法。

对应章节：

- [第 16 章 记忆与对话历史（含 Redis 基础）](16-记忆与对话历史（含Redis基础）.md)

### 4.5 Retrieval（检索）：检索与 RAG

**Retrieval** 模块解决的是“模型不知道的知识从哪里来”的问题。它是 RAG 的核心组成部分，负责从外部知识源中检索和当前问题相关的信息，再把检索结果交给模型辅助生成答案。
![LangChain Retrieval：外部知识接入与检索增强生成（RAG）在应用中的位置示意](images/9/9-4-5-1.png)

这一块你可以先把它拆成两段理解：

1. **索引阶段**：把文档加载进来，切分、向量化、存入向量库
2. **查询阶段**：用户提问时，先检索相关片段，再交给模型生成答案

这也是为什么 RAG 学习通常不会只讲一个 Retriever，而是会串起整条流程：

- Document Loaders
- Text Splitters
- Embeddings
- Vector Stores
- Retrievers
- 最终生成

对应章节：

- [第 18 章 向量数据库与 Embedding 实战](18-向量数据库与Embedding实战.md)
- [第 19 章 RAG 检索增强生成](19-RAG检索增强生成.md)

并且你已经能在源码目录里看到很多具体案例，例如：

- TXT / Markdown / JSON / CSV / PDF / Word 文档加载
- 文本切分
- Redis 向量存储
- RAG 问答链路

这也说明一件事：**RAG 不是一个单点 API，而是一条完整工程链路。**

### 4.6 Tools/Agents（工具/智能体）：让模型不只是“会说”，还“会做”

如果说 RAG 让模型“会查”，那么 **Tools 与 Agents** 则让模型进一步“会做事”。

#### 4.6.1 Tool 是什么

**Tool** 本质上是一个可以被模型调用的外部能力。它可以是：查询天气，调数据库，调公司内部 API，发邮件，查订单，做数值计算，调搜索引擎。也就是说，Tool 负责把“语言世界”连接到“行动世界”。

#### 4.6.2 Agent 是什么

**Agent** 则是在 Tool 之上再多一层：它不是简单执行固定步骤，而是让模型根据当前任务自主决定“下一步该做什么”。例如：先判断是否需要查天气；如果需要，就调用天气工具；看到结果后，再决定是否需要继续问用户；最后组织最终回复。

![LangChain Agents：在工具（Tools）之上由模型进行规划、选工具与多步执行的典型关系示意](images/9/9-4-6-1.png)

在 1.x 官方语境下，**LangChain 的 Agent 已经明确建立在 LangGraph 运行时之上**。这意味着你即使只是调用 `create_agent`，底层也不再只是一个松散的“工具循环”，而是带有状态、节点、流转、持久化能力的图式运行逻辑。

所以，可以这样区分：

| 场景                               | 更适合什么   |
| ---------------------------------- | ------------ |
| 步骤固定、顺序明确                 | Chain / LCEL |
| 需要模型动态决策                   | Agent        |
| 需要更强状态控制、循环、分支、人审 | LangGraph    |

对应章节与案例：

- [第 17 章 Tools 工具调用](17-Tools工具调用.md)
- [第 21 章 Agent 智能体](21-Agent智能体.md)

### 4.7 Callbacks（回调）：日志、调试与可观测性

在很多老资料里，你会看到 **Callback** 被列为 LangChain 的六大模块之一。这个说法在教学上仍然有价值，因为它提醒你：**一个可用的 AI 应用，不只是“能跑”，还要“能看见它怎么跑”。**

旧语境下，Callback 更像“运行时钩子”：

- 记录模型输入输出
- 统计耗时与 Token
- 打印中间步骤
- 追踪工具调用
- 上报日志与监控

到了现在，官方更强调的是 **LangSmith + Tracing + Evaluation** 这一整套可观测性能力。也就是说，Callback 的思想还在，但它在工程实践中往往已经进一步体现在：Tracing；Runtime events；Middleware hooks；LangSmith 可视化调试。

这一块在真实项目里很关键。AI 应用最难排查的问题，通常不是“程序报错”，而是：为什么这次没检索到？为什么调了错误工具？为什么模型理解偏了？为什么这轮成本突然变高？为什么线上效果和本地不一致？

如果没有可观测性，很多问题只能靠猜。所以，对企业项目来说，**Callbacks / Tracing / LangSmith 不是可有可无的附属能力，而是系统可维护性的关键。**

### 4.8 六大模块总览

虽然官方当前文档导航不再严格使用老版本那种“六大模块总图”来组织内容，但在入门阶段，这套图依然有助于建立整体认知，因此本教程继续保留这套视图。

四大块侧重“**模型 I/O → 链 → 检索 → 智能体**”这条主线；六大模块则补上 **Memory** 和 **Callbacks**，让你的系统视角更完整。

![LangChain 六大核心模块关系总览：Models、Memory、Retrieval、Chains、Agents、Callbacks（教学向总图，与官方 1.x 文档栏目划分是粗粒度对应关系）](images/9/9-4-8-1.jpeg)

> **说明**：这张图属于“教学视图”，适合入门时建立全局感。到了官方 1.x 文档中，你会看到这些能力被拆到 Agents、Models、Messages、Tools、Memory、Retrieval、Streaming、Structured Output、Middleware、Runtime、LangSmith 等更细的栏目里。两者不是冲突关系，而是“粗粒度总图”和“细粒度产品化视图”的区别。

这六块可以重新对应为：

- **Models**：模型与模型调用，对应本教程的 Model I/O、模型接入
- **Memory**：对话历史、会话状态、长期记忆
- **Retrieval**：文档加载、切分、向量化、检索、RAG
- **Chains**：固定流程组合、LCEL、Runnable
- **Agents**：工具调用、自主决策、多步任务
- **Callbacks**：日志、Tracing、调试、监控、评估

下面这张图把这些模块进一步展开了：

![LangChain 六大模块展开小结：Agent、Chain、Memory、Data Connection、Model I/O、Callbacks 及其子组件在一页上的关系](images/9/9-4-8-2.jpg)

**虚线表示什么**：图中虚线表示**数据流或依赖关系**——例如链会用到 Memory 和 Data Connection，会通过 Model I/O 调模型；Document Loaders 产出给 Transformers/Splitters，再进 Vector Stores；Document Retrievers 从 Vector Stores 里查。看虚线就能看出「谁用谁、数据怎么流」。

| 图中区域             | 对应能力                     | 应该怎么理解                                     | 图中在说什么                                                                                                                                                                                                                                                                                                                                                                                 |
| -------------------- | ---------------------------- | ------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **最上方（紫色）**   | **Agents 智能体**            | 负责决策、规划、选择工具，是最「像智能体」的部分 | 最上层是「做决策、选动作」的智能体。下面挂了两类东西：**Executors（执行器/链）**——如 ReAct（先推理再行动）、Plan-Execute（先规划再执行）、OpenAI 等；**Tools（工具）**——Standalone 单工具、Collection 工具集。箭头 in/out 表示工具可以接收输入、返回输出。                                                                                                                                   |
| **中间偏上（粉色）** | **Chains 链**                | 负责把固定步骤串起来，是稳定流程编排层           | 链是把「调模型、查文档、多步流程」串起来的编排。图中包括：Foundational LLM（直接调基座模型）、Conversational QA（带对话记忆的问答）、Retrieval QA（先检索再回答，即 RAG）、Document（文档处理）、Sequential（按顺序执行的多步链）。虚线连到右侧 LangSmith，表示链的执行可被监控、追踪。                                                                                                      |
| **左侧（绿色）**     | **Memory 记忆**              | 负责保存对话历史、用户状态、阶段性上下文         | 存「对话历史、会话状态」等。图中列了：Buffer（简单缓冲）、Vector DB（用向量存对话/上下文，可语义检索）、KV DB、SQL DB。链和智能体在需要时会从这些记忆里读、写。                                                                                                                                                                                                                              |
| **中间（橙色）**     | **Data Connection 数据连接** | 负责文档加载、切分、向量化、检索，是 RAG 的底盘  | 负责「数据从哪来、怎么加工、存到哪」。包含：**Vector Stores**（Embedding 把文本变向量 → 存进 Vector DB / Memory / Self-Hosted / BaaS）；**Document Retrievers**（用 Vector DB、Web API、BaaS 按查询取文档）；**Document Loaders**（从 Folder、File、Web 加载原始数据）；**Document Transformers/Splitters**（对文档做切分、转换，如按 Text/Code/Token 切块）。RAG 的「建库、检索」都在这块。 |
| **右侧偏下（蓝色）** | **Model I/O 模型输入输出**   | 负责 Prompt、模型调用、输出解析                  | 和「怎么调大模型」有关：**Prompts**（Template 模板、Selector 动态选提示）；**Language Models**（Chat 对话模型、LLM 通用模型）；**Output Parsers**（把模型输出变成结构化，如 Structured、JSON）。链和智能体通过这里把「提示 → 模型 → 解析结果」串起来。                                                                                                                                       |
| **最右侧（灰色）**   | **Callbacks 回调**           | 负责日志、追踪、调试、监控                       | 在链/智能体执行过程中「插一脚」做日志、监控、调试。图中：LangSmith（官方调试与监控平台）、Console（控制台输出）、Custom（自定义回调）。虚线表示这些回调可以挂到链、模型等环节。                                                                                                                                                                                                              |

这页图的作用，不是让你死记每个框，而是帮你建立一个直觉：

> **LangChain 做的不是某一件事，而是把“模型调用、知识接入、流程编排、状态管理、工具执行、调试追踪”这些原本分散的环节串成一个工程系统。**

### 4.9 怎么记这套框架

如果你现在看完还是觉得概念多，可以只记住这套口诀：

- **想把模型调起来**：先学 **Model I/O**
- **想把固定步骤串起来**：学 **Chain / LCEL**
- **想让系统记住上下文**：学 **Memory**
- **想让模型接外部知识**：学 **Retrieval / RAG**
- **想让模型调用工具、做多步任务**：学 **Tools / Agents**
- **想知道系统为什么答成这样**：学 **Callbacks / Tracing / LangSmith**

---

**章节思考题：**

1. 如果不用“框架”这个词，你会怎样向新人解释 LangChain 在应用里做什么？

   **参考思路：** 可以说它是一层把模型、提示词、输出解析、知识检索、工具、记忆和追踪组织起来的代码工具箱。它不提供模型参数，而是帮你把模型接进业务流程。

2. 为什么学习 LangChain 时要同时知道 1.x、provider 包和 LangGraph？

   **参考思路：** 1.x 是当前主线，provider 包负责具体模型接入，LangGraph 承担复杂流程和 Agent 的底层编排。只看旧版链式 API，会读不懂现在的项目结构和官方推荐路径。

3. 六大模块里，你会先从哪条最小闭环开始？为什么？

   **参考思路：** 通常先从 Model I/O、Prompt、Parser 开始，形成 `prompt | model | parser` 的最小闭环。能稳定输入、调用和解析后，再扩展到 RAG、Tools、Memory、Agent 和可观测性。

4. 什么时候不需要引入 LangChain，直接用模型 SDK 反而更合适？

   **参考思路：** 如果只是一次简单模型调用、没有复杂编排、没有多模型切换、没有检索和工具链路，原生 SDK 可能更轻。框架的价值在复杂度上来以后才明显。

**本章小结：**

- **LangChain** 不是大模型本身，而是位于 AI 应用架构中“**服务 / 编排层**”的开源框架，核心作用是把模型、Prompt、知识、工具、记忆、输出解析和调试能力组织成一个可维护的应用系统。它与 **Coze / Dify** 的关系不是替代，而是分工不同：前者偏代码框架，后者偏低代码平台；真实项目里常常先用平台验证，再用框架落地。
- 现阶段学习 LangChain，应以 **1.x 官方文档**为主线。要重点理解：`langchain` 主包已精简，很多旧能力迁移到了 `langchain-classic`；Agent 以 `create_agent` 为高层入口，底层建立在 **LangGraph** 之上；集成能力则通过 `langchain-openai`、`langchain-ollama` 等独立 provider 包扩展。
- 在入门阶段，最重要的不是一开始记住所有 API，而是先建立 **六块认知地图**：**Model I/O、Chains、Memory、Retrieval、Tools / Agents、Callbacks**。后续章节会按这张地图一块一块展开，并且已经在项目目录中配好了对应案例源码。

**建议下一步：** 直接进入 [第 10 章 LangChain 快速上手与 HelloWorld](10-LangChain快速上手与HelloWorld.md)，先把 **API Key、模型名、Base URL、HelloWorld 调用、多模型共存、企业级封装与流式输出** 跑通。等你真正把第一个 LangChain 调用写出来，再回头看这一章的“定位、架构、模块”，理解会明显更扎实。
