LangChain 实战:什么是MiddleWare(中间件)?

1、什么是中间件?

Middleware(中间件),简单说就是Agent 执行过程中的钩子函数,是 LangChain 1.x 的"王牌"工程化能力

借助中间件,开发者可以高度定制和控制Agent运行的每一个环节,是处理 Agent 生命周期的标准方式

中间件的使用场景:

  • 通过日志记录、分析和调试跟踪Agent行为
  • 转换提示符、工具选择和输出格式
  • 添加重试、回退和提前终止逻辑
  • 应用速率限制、防护栏和 PII 检测

2、怎么调用中间件

通过 create_agent 来添加中间件:

Python 复制代码
from langchain.agents import create_agent
from langchain.agents.middleware import SummarizationMiddleware, HumanInTheLoopMiddleware

agent = create_agent(
    model="gpt-5.5",
    tools=[...],
    middleware=[
        SummarizationMiddleware(...),
        HumanInTheLoopMiddleware(...)
    ],
)

3、Agent 调用中间件 VS. 无调用中间件

Agent 核心循环流程:调用模型,由模型选择要执行的工具,当模型不再调用工具时,流程结束。

中间件会在每一个步骤的前后暴露钩子函数:

在 LangGraph 工作流中使用中间件

中间件并非独立运行时 :钩子函数运行在 create_agent 返回的已编译对象内部。

可以将整个Agent(连同中间件全部逻辑)作为节点或子图,嵌入到更大的 StateGraph 当中,所有中间件钩子仍会正常执行。

当整体拓扑结构超出标准的「循环直至完成」模式时,可以采用该方案:例如路由到多个智能体之前对输入做分类并行分发任务 ,或是把Agent调用和确定性步骤拼接组合

4、为什么需要中间件?

如果没有中间件,Agent 的执行流程通常比较直接:

Python 复制代码
用户输入 → 拼接提示词/消息 → 调用模型 → 如有需要调用工具 → 返回结果

这种方式对于简单场景已经足够,但一旦进入真实项目,往往会遇到很多额外需求,例如:

  • 想根据问题复杂度动态切换模型
  • 想限制某些用户只能调用部分工具
  • 想在工具报错时自动重试或返回兜底结果
  • 想在模型调用前插入额外的系统提示
  • 想记录每一步的执行日志,方便排查问题
  • 想在敏感信息出现时阻断执行
  • 想在正式执行工具前增加人工审批

5、中间件的分类

自定义中间件:允许开发者自定义,

内置中间件:LangChain实现并提供的

  • 模型供应商定制的中间件:依赖于特定模型服务的实现
  • 模型供应商无关的中间件:由LangChian提供

6、LangChain官方提供的中间件

参考链接:https://docs.langchain.com/oss/python/langchain/middleware/built-in

7、LangChain官方提供的中间件分类

LangChain 提供了六类与模型供应商无关的内置中间件,分别解决 Agent 在生产环境中的不同问题:

1. 成本与资源控制类

核心目标:控成本、控配额、避免无限调用

解决 Agent 太贵、太能跑、停不下来的问题,包括:

  • Model call limit:限制模型调用次数,防止费用失控
  • Tool call limit:限制工具调用次数,避免死循环
  • Summarization:上下文快满时自动总结,减少 token 消耗
  • Context editing:裁剪上下文,节省成本

适用场景:生产环境成本治理、长会话优化、SaaS 产品控费。

2. 稳定性与容错保障类

核心目标:保证服务不中断,失败后自动恢复

解决调用失败、模型挂了、工具超时的问题,包括:

  • Model fallback:主模型失败时切换备用模型
  • Model retry / Tool retry:调用失败后自动重试

适用场景:线上生产系统,尤其是多模型、多工具依赖的 Agent,本质是构建高可用、容灾能力。

3. 安全与合规风控类

核心目标:让 Agent 可控、可审、合规

解决乱执行、泄露敏感信息、做危险操作的问题,包括:

  • Human-in-the-loop:关键工具调用前暂停,等待人工审批
  • PII detection:检测和处理个人敏感信息

适用场景:企业内部系统、客服系统、审批流,尤其是涉及发邮件、调数据库、导出敏感信息等高风险操作。

4. 决策增强与智能编排类

核心目标:提升 Agent 的决策质量和任务拆解能力

解决不够聪明、不会规划、不会筛选工具的问题,包括:

  • To-do list:增强任务规划和状态跟踪
  • LLM tool selector:工具过多时,用子模型筛选最相关的工具
  • Subagent:生成子 Agent,拆分复杂任务给不同角色

适用场景:研究型 Agent、多步骤分析、多角色协作等复杂任务流,本质是增强 Agent 的"组织能力"。

5. 执行能力扩展类

核心目标:给 Agent 更多"手脚"

解决**只能聊天,不能操作环境**的问题,包括:

  • Shell tool:提供持久 shell,执行命令
  • File search:提供 Glob/Grep 文件搜索能力
  • Filesystem:提供文件读写与长期存储能力

适用场景:工程 Agent、代码 Agent、运维自动化,本质是将 Agent 从"纯推理"扩展为"可操作环境的执行体"。

6. 开发调试与测试辅助类

核心目标:方便开发、测试、验证 Agent 行为

主要**服务研发和调试阶段**,包括:

  • LLM tool emulator:用 LLM 模拟工具执行,便于测试
  • Summarization / Context editing:辅助调试长会话和上下文裁剪效果
  • Human-in-the-loop:调试高风险步骤

适用场景:开发阶段快速验证流程、做 mock、减少对真实工具的依赖。

8、总结

  • 中间件是什么? 它是 Agent 执行过程中的钩子函数,是 LangChain 1.x 最核心的工程化能力。它让开发者能在 Agent 生命周期的每一个环节"插手干预"。
  • 为什么需要它? 没有中间件,Agent 只是个"直来直去"的聊天机器人;有了中间件,才能应对真实生产环境中的动态路由、容错重试、安全风控和成本控制
  • 怎么用? 通过 create_agentmiddleware 参数注入,像搭积木一样组合。并且它可以无缝嵌入更大的 LangGraph 工作流中,作为子图或节点运行。
  • 官方六件套:LangChain 提供了六大类与供应商无关的内置中间件,覆盖了从**控本(限流/摘要)、维稳(降级/重试)、安保(人工审批/PII检测)、提智(任务拆解/工具筛选)、扩能(Shell/文件操作)到调试(Mock测试)**的全链路需求。

一句话概括:如果说 Agent 是大脑,工具是手脚,那中间件就是神经系统和免疫系统------它决定了这个 Agent 是只能在实验室里跑跑,还是能真正扛住生产环境的压力。

中间件用得好,下班回家早。 你在实际项目中用过哪些中间件?又踩过哪些坑?欢迎在评论区 分享你的实战经验,如果觉得这篇总结够干,别忘了点赞、在看、转发三连支持~

相关推荐
王国强20091 小时前
LangChain 1.0 之后:从 Agent 框架走向 AI 应用运行时
langchain
XGeFei3 小时前
【LangChain—Advanced usage—Guardrails】
langchain
Darling噜啦啦5 小时前
LangGraph 实战:从 StateGraph 基础到多 Agent 编排,分支循环中断恢复全掌握
langchain·agent
NineData6 小时前
NineData智能数据管理平台新功能发布|2026年8月
数据库·人工智能·oracle·中间件·agent·数据库开发·ninedata
李洱9 小时前
LangChain 基础知识
langchain
2601_962297489 小时前
基于LangChain+LLM大模型+机器学习的恶意域名(流量)智能检测系统
机器学习·langchain·llm·恶意域名·流量检测
老猿讲编程10 小时前
【Eclipse OpenSOVD学习之十一】网关二进制与部署
学习·中间件·rust·eclipse·汽车
Terra.K11 小时前
JAVA职业探索和学习----中间件开发目标
java·学习·中间件
XGeFei11 小时前
【LangChain—Frontend—Overview】
langchain