前两篇讲了 middleware 的概念和钩子点。你可能觉得「要自己写 middleware 了」——先别急。最常见的横切能力,LangChain 已经写好预置 middleware 了,你直接拿来用。

这一篇做个全景,让你知道有哪些现成的可以用。

为什么要预置

上一篇讲的 beforeModel/afterModel 适合做什么——注入历史、压缩上下文、护栏检查……这些需求几乎每个 Agent 都有。如果每个开发者都自己写一遍,是巨大的重复劳动。

预置 middleware 的意义就在这:把最常见的横切能力标准化、写好,开箱即用。你要做记忆、做压缩、做护栏,不用从零写,配置一下预置的就行。

预置 middleware:把常见能力标准化

几类预置 middleware

LangChain 提供的预置 middleware,大致分这几类:

记忆类

  • 历史注入 middleware:自动把对话历史注入 messages(第 35 篇详讲)
  • 长期记忆 middleware:跨会话记住用户偏好

上下文管理类

  • 上下文压缩 middleware:消息太多时自动压缩/摘要,避免超窗口
  • 上下文裁剪 middleware:按策略裁掉太老的消息

治理类

  • 护栏 middleware:检查输出是否违规、越界,违规就拦截或改写
  • 工具校验 middleware:工具执行前校验参数、权限

可观测类

  • 追踪 middleware:自动埋点,配合 LangSmith

几类预置 middleware

怎么用

用法很简单——create_agent 时把要用的 middleware 传进去:

agent = create_agent(
    model=model,
    tools=tools,
    middleware=[
        历史注入mw(...),
        上下文压缩mw(...),
        护栏mw(...),
    ],
)

这些 middleware 会叠加生效,按顺序在各自的钩子点执行。你不用关心它们内部怎么实现,只管配置。

预置 vs 自己写

什么时候用预置,什么时候自己写?

  • 需求标准(普通记忆、简单压缩、基础护栏)→ 用预置,省事
  • 需求特殊(特殊的记忆策略、自定义的护栏规则、特殊的压缩逻辑)→ 自己写

预置 middleware 通常支持配置——比如压缩 middleware 可以配压缩阈值、压缩策略。先看预置的能不能配置满足你,不行再自己写。多数情况,预置 + 配置就够了。

预置 vs 自己写

一个重要观念:middleware 是生态

预置 middleware 的存在,透露出一个重要趋势:LangChain 的 Agent 能力正在「middleware 化」

过去这些能力(记忆、压缩、护栏)散落在各处,甚至和核心耦合。现在统一收口成 middleware——这意味着能力变成可插拔、可组合、可复用的标准化模块。未来第三方也能发布自己的 middleware(比如某家的「高级护栏 mw」),你像装插件一样用。

middleware 生态化

收束:先用预置,不够再写

这一篇做了预置 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/记忆、生产化收束这条线更新。

十三Tech公众号二维码