前两篇讲了 middleware 的概念和钩子点。你可能觉得「要自己写 middleware 了」——先别急。最常见的横切能力,LangChain 已经写好预置 middleware 了,你直接拿来用。
这一篇做个全景,让你知道有哪些现成的可以用。
为什么要预置
上一篇讲的 beforeModel/afterModel 适合做什么——注入历史、压缩上下文、护栏检查……这些需求几乎每个 Agent 都有。如果每个开发者都自己写一遍,是巨大的重复劳动。
预置 middleware 的意义就在这:把最常见的横切能力标准化、写好,开箱即用。你要做记忆、做压缩、做护栏,不用从零写,配置一下预置的就行。
几类预置 middleware
LangChain 提供的预置 middleware,大致分这几类:
记忆类
- 历史注入 middleware:自动把对话历史注入 messages(第 35 篇详讲)
- 长期记忆 middleware:跨会话记住用户偏好
上下文管理类
- 上下文压缩 middleware:消息太多时自动压缩/摘要,避免超窗口
- 上下文裁剪 middleware:按策略裁掉太老的消息
治理类
- 护栏 middleware:检查输出是否违规、越界,违规就拦截或改写
- 工具校验 middleware:工具执行前校验参数、权限
可观测类
- 追踪 middleware:自动埋点,配合 LangSmith
怎么用
用法很简单——create_agent 时把要用的 middleware 传进去:
agent = create_agent(
model=model,
tools=tools,
middleware=[
历史注入mw(...),
上下文压缩mw(...),
护栏mw(...),
],
)
这些 middleware 会叠加生效,按顺序在各自的钩子点执行。你不用关心它们内部怎么实现,只管配置。
预置 vs 自己写
什么时候用预置,什么时候自己写?
- 需求标准(普通记忆、简单压缩、基础护栏)→ 用预置,省事
- 需求特殊(特殊的记忆策略、自定义的护栏规则、特殊的压缩逻辑)→ 自己写
预置 middleware 通常支持配置——比如压缩 middleware 可以配压缩阈值、压缩策略。先看预置的能不能配置满足你,不行再自己写。多数情况,预置 + 配置就够了。
一个重要观念:middleware 是生态
预置 middleware 的存在,透露出一个重要趋势:LangChain 的 Agent 能力正在「middleware 化」。
过去这些能力(记忆、压缩、护栏)散落在各处,甚至和核心耦合。现在统一收口成 middleware——这意味着能力变成可插拔、可组合、可复用的标准化模块。未来第三方也能发布自己的 middleware(比如某家的「高级护栏 mw」),你像装插件一样用。
收束:先用预置,不够再写
这一篇做了预置 middleware 全景:
- 常见横切能力(记忆、压缩、护栏、追踪)官方已写好,开箱即用
- 分记忆、上下文管理、治理、可观测几类
- 用法:create_agent 时传 middleware 列表,叠加生效
- 标准需求用预置,特殊需求自己写
- 趋势:Agent 能力 middleware 化,成为可插拔生态
下一篇聚焦其中最热门的一类——Context Engineering(上下文工程):怎么用 middleware 管理越来越长的上下文,这是 2026 年 Agent 工程的核心议题。
关于十三Tech
我是十三,All in AI Agent 方向的架构师,专注 AI 工程实践。我相信 AI 是程序员的最佳搭档。
如果你想跟完这套「图解 LangChain」,欢迎关注公众号 「十三Tech」。全系列 42 篇,会按认识基础、LangGraph 状态机、Agent 与 middleware、RAG 检索、Tools/MCP/记忆、生产化收束这条线更新。

