🎯 课程主题
深入理解 LangChain 中间件(Middleware)的概念、价值与分类体系,为后续学习具体中间件的使用奠定基础。
📝 核心知识点
1. 什么是中间件
- 概念说明:中间件是 Agent 执行过程中的钩子函数(Hook)集合,允许开发者在 Agent 执行流程的关键节点进行拦截、控制与增强。在
create_agent中通过middleware参数配置,支持传入列表(可同时使用多个中间件)。 - 关键细节:中间件相当于 Agent 的"神经中枢",是 LangChain v1.0 最重要也最新增的特性,体现了面向切面编程(AOP)思想。
2. 中间件相关的钩子函数
在 Agent 的执行流程中,中间件可以在以下关键节点进行拦截:
| 钩子函数 | 触发时机 |
|---|---|
before_agent | Agent 整体执行前 |
before_model | 每次调用模型前 |
after_model | 每次调用模型后 |
after_agent | Agent 整体执行后 |
wrap_model_call | 包裹模型调用(前后均可控制) |
wrap_tool_call | 包裹工具调用(前后均可控制) |
3. 为什么需要中间件
核心痛点:真实业务场景中,除了主流程(输入→模型→工具→输出)外,还有大量横切关注点需要处理,如:
- 根据问题复杂度动态切换模型
- 限制用户只能调用部分工具
- 工具报错时自动重试或返回兜底结果
- 模型调用前插入额外系统提示
- 记录每步执行日志
- 敏感信息脱敏或阻断
- 关键操作增加人工审批
中间件的价值:将这些与业务无关但执行必须的横切逻辑从 Agent 主流程中分离出来,让主体代码聚焦业务逻辑,实现关注点分离。
没有中间件的痛点:
- 主流程会迅速变乱(日志、鉴权、重试、风控全塞进去)
- 横切逻辑难以复用(多个 Agent 需要相同的能力)
- 流程控制粒度不够细(无法精确在模型调用前后执行逻辑)
- 后期维护成本高
4. 中间件的分类体系
中间件分为两大类:
中间件 (Middleware)
├── 内置中间件(LangChain 官方提供,共16个)
│ ├── 与模型供应商相关(非本章重点)
│ └── 与模型供应商无关(本章重点,16个)
│ ├── ① 成本与资源控制类
│ │ ├── 限制工具调用次数
│ │ ├── 上下文快满时自动摘要
│ │ └── 裁剪上下文、清理工具调用痕迹
│ ├── ② 稳定性与容错保障类
│ │ ├── 主模型失败时切换备用模型
│ │ ├── 模型调用失败自动重试
│ │ └── 工具调用失败自动重试
│ ├── ③ 安全与合规风控类
│ │ ├── Human-in-the-loop(人在环,关键操作人工审核)
│ │ ├── 敏感信息检测与脱敏(PII处理)
│ │ └── 工具/模型调用次数限制
│ ├── ④ 决策增强与智能编排类
│ │ ├── TodoListMiddleware(任务规划与分步执行)
│ │ ├── 子模型筛选最相关工具
│ │ └── 生成子Agent处理复杂任务
│ ├── ⑤ 执行能力扩展类
│ │ ├── Shell命令执行
│ │ ├── 本地文件搜索与读写
│ │ └── 操作系统交互能力
│ └── ⑥ 开发调试与测试辅助类
│ ├── 模拟工具执行(便于测试)
│ ├── 长会话调试辅助
│ └── 上下文裁剪效果测试
└── 自定义中间件(开发者自行编写)
🏗️ 架构与工作流
无中间件的 Agent 架构
用户输入 → [Model] ⇄ [Tools] → 输出
↑模型调工具 ↑工具返回结果
(可能有多次循环)
有中间件的 Agent 架构
┌── 中间件钩子 ──┐
│ before_agent │
│ before_model │
用户输入 → [Model] ⇄ [Tools] → 输出
│ │
│ wrap_model_call
│ │
│ wrap_tool_call
│
after_model / after_agent
💻 代码实战
本节课以理论讲解为主,无代码实战。
⚠️ 常见问题与避坑指南
- 中间件在
create_agent的middleware参数中传入,该参数接收一个列表,可以同时配置多个中间件,按顺序依次执行。 - 不是所有场景都需要中间件,简单场景直接使用基础 Agent 即可;当出现日志、重试、风控、鉴权等横切需求时再引入。
- 内置中间件共有 16 个,重点掌握 4 个常用的(后续章节讲解),其余 12 个了解即可。
💡 个人总结与延伸
中间件是 LangChain v1.0 工程化能力的核心体现,本质上是 AOP(面向切面编程)思想在 Agent 领域的落地。理解"为什么需要中间件"比记住所有中间件名称更重要——核心就是"关注点分离":让 Agent 主体专注业务逻辑,让中间件处理日志、安全、容错等横切关注点。后续学习应当重点掌握 SummarizationMiddleware(成本控制)、Human-in-the-loop(安全审核)等高频场景的中间件。