上一篇讲了 create_agent——一行代码搭出标准 Agent。但标准 Agent 只有「调工具回答」这一个核心能力。真实 Agent 还要:记住上文、压缩超长上下文、加护栏防止越界……这些能力往哪加?

这就是 Middleware 要解决的。它是 v1.0 最重要的设计,这一篇讲它的概念。

问题:核心 loop 是固定的

create_agent 把核心 loop 封装好了:模型 → 判断 → 工具 → 循环。这个 loop 是固定的,你没法随便往里塞东西。

但 Agent 真实需要的能力,很多都该「插在 loop 的某个位置」:

  • 记忆管理:每次调模型前,要把历史消息注入进去
  • 上下文压缩:消息太多时,调用前先压缩
  • 护栏:模型输出后,检查有没有违规
  • 日志/追踪:每一步前后都要记录

这些能力都该插在 loop 的某个位置

如果核心 loop 固定,要加这些怎么办?传统做法是继承重写——但那意味着你要 fork 整个 loop 的实现,框架一升级你就得跟着改。

Middleware:横切注入,不动 loop

Middleware 的思路完全不同:核心 loop 保持不动,你通过「钩子」在 loop 的固定位置插入自己的逻辑

就像 Web 框架的中间件(Express、Koa、Django):核心请求处理循环不变,你加日志中间件、鉴权中间件、限流中间件,各管各的,叠加生效。

Middleware 像 Web 中间件,横切注入

LangChain 的 middleware 能 hook 的位置(下一篇 20 详讲)主要有:

  • 模型调用前(beforeModel):注入历史、压缩上下文
  • 模型调用后(afterModel):检查输出、做护栏
  • 工具执行前后:校验、日志

为什么这个设计重要

Middleware 之所以是 v1.0 的灵魂,因为它解决了三个老大难:

1. 可组合。多个 middleware 能叠加,互不干扰。一个 Agent 可以同时有「记忆 middleware + 压缩 middleware + 护栏 middleware」,像叠积木。

多个 middleware 叠加

2. 可复用。一个 middleware 写一次,能跨多个 Agent 用。写好一个「上下文压缩 middleware」,所有 Agent 都能用。

3. 不动核心 loop。你加 middleware 不用碰 create_agent 的核心实现,框架升级不会破坏你的定制。

这三点合起来,意味着定制 Agent 从「重写」变成了「配置」——这是工程上巨大的进步。

一个心智模型

理解 middleware,记住这个心智模型:

核心 loop 是一条流水线,middleware 是流水线旁边的工位。产品(每次模型调用/工具调用)经过流水线时,经过这些工位,每个工位干自己的事(加料、检查、记录),但不改变流水线本身的走向。

流水线工位的心智模型

产品还是按流水线的方向走(这是核心 loop),但每个工位(middleware)能在产品经过时做点处理。这个模型让你直观理解 middleware 为什么「能定制却不改 loop」。

和 LangGraph 的关系

一个自然的疑问:middleware 和 LangGraph 是什么关系?

记住:create_agent 底层是 LangGraph,middleware 是 create_agent 这一层提供的扩展机制。所以:

  • create_agent 时,用 middleware 定制(高层)
  • 自己用 LangGraph 手搭时,直接在图里写 node/edge(底层,更灵活但要自己搭)

middleware 是「在封装好的标准品上加能力」的捷径。如果你完全自己搭 LangGraph,就不需要 middleware——你直接在图里加节点就行。middleware 的价值,是让用 create_agent 的人也能定制,而不必下沉到手搭。

收束:从重写到配置

这一篇讲了 Middleware 的概念:

  • 它解决「核心 loop 固定,怎么加能力」的问题
  • 思路:不动 loop,通过钩子横切注入(像 Web 中间件)
  • 三个价值:可组合、可复用、不动核心 loop
  • 心智模型:流水线旁边的工位
  • 它是 create_agent 层的扩展机制,手搭 LangGraph 不需要

下一篇讲 middleware 具体能 hook 在哪些位置——beforeModel / afterModel,以及每个位置适合做什么。


关于十三Tech

我是十三,All in AI Agent 方向的架构师,专注 AI 工程实践。我相信 AI 是程序员的最佳搭档。

如果你想跟完这套「图解 LangChain」,欢迎关注公众号 「十三Tech」。全系列 42 篇,会按认识基础、LangGraph 状态机、Agent 与 middleware、RAG 检索、Tools/MCP/记忆、生产化收束这条线更新。

十三Tech公众号二维码