概述
为什么需要中间件
智能体在实际应用中,仅依靠 “模型 + 工具” 的基础架构难以应对复杂需求,会面临以下关键问题:
- 资源与成本失控:无限制的模型调用(如 API 费用)、工具调用(如外部 API 高频请求)可能导致成本飙升,甚至因 “无限循环调用” 耗尽资源;
- 可靠性与容错能力弱:模型故障(如 API 超时、服务下线)、工具调用失败(如网络波动、外部服务异常)会直接导致智能体中断,缺乏备用方案;
- 上下文管理困难:长对话场景下,token 数量易超出模型上下文窗口,导致历史信息丢失,影响对话连贯性;
- 合规与安全风险:用户输入或工具返回中可能包含个人身份信息(PII,如邮箱、信用卡号),若未处理会违反数据合规要求;
- 效率与精准度低:当智能体关联大量工具时,模型可能频繁调用无关工具,浪费 token 且降低响应速度;
- 开发与测试效率低:实际工具(如数据库查询、邮件发送)可能存在调用成本高、环境依赖强的问题,难以快速测试智能体逻辑。
中间件的核心作用,就是通过模块化、可配置的组件,针对性解决上述痛点,让智能体从 “基础可用” 升级为 “生产级可靠”。
使用场景
官方文档中列举了中间件的 4 类核心使用场景,覆盖智能体开发与运行的关键需求:
- 行为追踪:通过日志(Logging)、数据分析(Analytics)、调试(Debugging)功能,实时监控智能体的执行状态(如模型调用次数、工具选择逻辑),便于问题定位与优化;
- 内容转换:对智能体的关键环节进行格式 / 内容调整,包括 “提示词(Prompt)改造”“工具选择过滤”“输出结果格式化”,适配不同场景的需求(如统一输出格式、筛选无关工具);
- 容错与终止控制:添加 “重试(Retries)”“降级(Fallbacks)” 逻辑(如工具调用失败后自动重试、模型故障时切换备用模型),同时支持 “提前终止”(如达到调用次数上限时停止执行),提升智能体可靠性;
- 安全与资源管控:通过 “速率限制(Rate Limits)” 防止工具 / 模型过度调用,“安全护栏(Guardrails)” 规避违规操作,“PII 检测” 识别并处理敏感信息,满足合规与成本控制需求。
使用方法
在通过 <code>create_agent</code> 函数创建智能体时,通过 <code>middleware</code> 参数传入一个或多个中间件实例。如下方代码:
from langchain.agents import create_agent
from langchain.agents.middleware import SummarizationMiddleware, HumanInTheLoopMiddleware
agent = create_agent(
model="gpt-4o",
tools=[...], # 智能体关联的工具列表
middleware=[ # 传入中间件实例列表
SummarizationMiddleware(...), # 对话总结中间件
HumanInTheLoopMiddleware(...) # 人机协同中间件
],
)
The agent loop 智能体循环
什么是Agent Loop
智能体循环是 LangChain 智能体完成任务的基础执行框架,其本质是 “模型决策 - 工具执行 - 结果反馈” 的闭环流程,具体作用可概括为 3 点:

核心循环为:<code>接收请求(request)→ 模型推理(model)→ 选择工具(action)→ 执行工具(tools)→ 反馈结果(result)→ (若需继续则重复循环,直至无工具调用)</code>
为什么需要Agent Loop
1. 明确智能体的 “任务执行逻辑”:简言之,智能体循环是智能体 “能完成任务” 的基础 —— 没有循环,智能体无法实现 “多轮决策 + 工具协作”,只能单次调用模型或工具。
2.支撑 “复杂任务的拆解与执行”:若没有循环,智能体无法串联多步操作,只能处理 “单次模型调用” 或 “单次工具调用” 的简单需求。
3. 确保 “结果的准确性与完整性”:若没有循环,智能体无法根据中间结果调整决策,可能直接返回 “未查天气的模糊回答”,导致结果不准确。
Agent Loop与中间件的关系
LangChain 中间件的核心目标是 “对智能体执行过程进行精细化控制”(如日志监控、重试、PII 检测等),而这种 “控制能力” 必须基于Agent Loop —— 因为中间件的所有功能,都需要嵌入到循环的特定节点中实现。
中间件在Agent Loop中的使用

明确“嵌入位置”
文档中明确了中间件的 “钩子(Hooks)” 与循环节点的对应关系:
| 循环节点 | 中间件钩子 | 中间件可实现的功能示例 |
|---|---|---|
| 智能体启动前 | <code>before_agent</code> | 初始化日志、检查用户权限 |
| 模型调用前 | <code>before_model</code> | 检测用户输入中的 PII(如手机号)、修改 Prompt |
| 模型调用过程中 | <code>wrap_model_call</code> | 为模型调用添加缓存(如 Anthropic Prompt 缓存)、模型降级(主模型故障时切换备用模型) |
| 工具调用过程中 | <code>wrap_tool_call</code> | 为工具调用添加重试(网络超时后重试)、工具调用次数限制 |
| 模型调用后 | <code>after_model</code> | 记录模型输出日志、过滤模型返回的违规内容 |
| 智能体执行结束后 | <code>after_agent</code> | 汇总本次执行的调用次数、清理临时文件 |
明确”具体功能“
中间件的所有功能,本质是 “在循环的特定节点插入自定义逻辑”,而循环是这些逻辑的 “载体”。例如:
- “工具重试中间件(Tool Retry)”:需嵌入<code>wrap_tool_call</code>钩子(工具调用过程中),当工具调用失败时,触发重试逻辑;
- “对话总结中间件(Summarization)”:需嵌入<code>before_model</code>钩子(模型调用前),当对话 token 接近上限时,自动总结历史内容;
- “人机协同中间件(Human-in-the-loop)”:需嵌入<code>wrap_tool_call</code>钩子(工具调用前),当调用高风险工具(如发送邮件)时,暂停循环等待人工审批。
知识点
- 定义与定位:Middleware 是插入 Agent 循环(模型→选工具→执行→终止)各环节的钩子,用于观测与控制。
- 主要用途:日志/分析、提示与工具拦截或改写、输出格式化、重试/回退、提前终止、限流、Guardrails、PII 检测。
- 接入方式:在 <code>create_agent</code> 时传入 <code>middleware=[...]</code>;顺序即执行顺序。
- 生命周期钩子:在模型调用前后、工具选择前后、最终收敛前后插入逻辑,实现逐步治理。
- 内置 vs 自定义:官方提供常用中间件(如摘要、人类介入等);业务可扩展自定义中间件(装饰器+钩子)。
- 与其他模块的关系:
- Agent Loop:Middleware 监控或改写 loop 中的每一环。
- Models/Tools:可对模型提示、工具选择/输入输出做过滤或注入。
- 监控/审计:结合日志、埋点、报警工具输出。
常见问题(10)
1) Middleware 主要解决什么痛点?
- 解决 Agent 链路不可观测、不可控、难回滚的问题。
2) 会影响模型输出质量吗? - 不直接提升模型能力,但通过提示/工具拦截与回退策略提高整体成功率与稳定性。
3) 与 Guardrails 有何区别? - Guardrails 更偏响应安全与约束;Middleware 覆盖更广,包括日志、限流、重试、提示改写等。
4) 执行顺序如何定义? - 按 <code>middleware</code> 列表顺序执行,可在 PRD 中要求可配置优先级。
5) 是否会增加延迟? - 会有额外开销;需在需求中说明可观测指标与阈值,必要时做采样或只在高风险场景开启。
6) 如何做回退策略? - 在钩子中检测异常/超时,切换到备用模型或直接降级为规则回复。
7) 怎么做 PII/合规拦截? - 在模型调用前或工具执行后检测并脱敏,必要时阻断或进入人工审核。
8) 人工介入怎么设计? - Human-in-the-loop Middleware:检测需要人工确认的场景,路由到审核界面,确认后再继续 Agent。
9) 如何与监控平台集成? - 在钩子中发送埋点/日志到 Observability(如 LangSmith)或内部 APM;记录 run_id、耗时、错误码。
10) 如何测试与灰度?- 提供开关与分组,先在测试环境或部分用户开启;记录对比指标(成功率、延迟、异常率)。
适用场景
- 合规审计与敏感信息防护
- 问题:对话或工具调用中可能泄露 PII/涉敏信息。
- 方案:中间件在模型输入/输出和工具结果后做 PII 检测与脱敏,必要时中断或转人工。
- 价值:降低合规风险,形成审计留痕。
- 运营实验与质量提升(A/B + 回退)
- 问题:新模型/工具上线需控制风险。
- 方案:中间件按流量分组应用新策略,失败时自动回退到旧模型或安全回复;记录埋点供评估。
- 价值:在不影响主业务的情况下迭代,透明对比效果。
扩展信息
- 官方 Middleware 总览及 API 参考:https://docs.langchain.com/oss/python/langchain/middleware/overview
- 建议同时阅读:Built-in middleware、Custom middleware 章节,规划可复用与自定义的策略库。