avatar

命令行小屋

A text-focused Halo theme

  • Ai
  • Linux
  • 游戏
  • 数据库
  • Apache Hadoop
  • Windows
  • 手机
主页 LangChain Agent 中间件完全指南:从拦截器设计到自定义钩子实战
文章

LangChain Agent 中间件完全指南:从拦截器设计到自定义钩子实战

发表于 最近 更新于 最近
作者 KennethCheng
483~621 分钟 阅读

读懂中间件机制,让你的 Agent 从"能跑"走向"可控、可观测、可生产"。

写在前面

如果你已经用 LangChain 搭过 Agent,大概率会遇到这些痛点:

  • 想给 Agent 加上日志,却不知道在哪一层埋点
  • 想做调用次数限流,防止 token 成本失控
  • 想在关键工具调用前让人工把关,但不想重写整个 Agent
  • 想要更细粒度地控制提示词、工具选择和输出格式

这些需求,中间件(Middleware) 都能优雅地解决。它是 LangChain Agent 体系里最值得掌握的扩展机制之一,今天这篇文章就把它彻底讲清楚。


一、什么是中间件?

中间件作为核心组件,为 Agent 执行流程提供了强大的可扩展性和控制能力。

本质上,它是一种拦截器模式(Interceptor Pattern) 的实现:把 Agent 的执行管道拆成若干关键节点,在每个节点前后留出"钩子",让开发者注入自定义业务逻辑,实现对代理行为的细粒度控制和功能扩展。

Agent 执行流程总览

决定调用工具
📋 任务
before_agent
before_model
🧠 模型
wrap_tool_call
🔧 工具列表
after_model
💬 最终回复
after_agent
👤 用户

注意模型和工具调用之间的循环结构——这是 Agent 能"边想边做"的关键,也是中间件为什么必须存在的原因:没有拦截器,你就根本没办法在这个循环里插入逻辑。

中间件能做什么?

中间件的四大作用行为记录日志记录分析调试跟踪 Agent 行为格式约束转换提示工具选择输出格式逻辑控制重试后备提前终止资源限制速率限制保护栏PII 身份识别检测

简单说,中间件帮你解决 Agent 走向生产时的四大难题:可观测、可控制、可约束、可降本。


二、怎么创建中间件?

中间件在 Agent 运行的每一步之前和之后,为用户暴露钩子(hooks),方便进行跟踪与控制。创建方式非常直观:把中间件实例放进 create_agent 的 middleware 参数即可。

最小可运行示例

from langchain.agents import create_agent
from langchain.agents.middleware import SummarizationMiddleware, HumanInTheLoopMiddleware
from langchain.chat_models import init_chat_model

model = init_chat_model("openai:gpt-4")

agent = create_agent(
    model=model,
    tools=[...],
    middleware=[
        SummarizationMiddleware(...),
        HumanInTheLoopMiddleware(...)
    ],
)

创建步骤

开始
导入 create_agent
初始化模型
init_chat_model
调用 create_agent
传入 model 参数
传入 tools 列表
传入 middleware 列表
SummarizationMiddleware
HumanInTheLoopMiddleware
组装 Agent
✅ 完成 Agent 创建

两步搞定:先建代理,再传中间件。

关于"多个中间件"的一个重要细节

middleware 参数是一个列表,可以传多个中间件。当同一位置有多个中间件时,会严格按照列表中的先后顺序触发。来看时序图:

模型Middleware 2Middleware 1Agent用户模型Middleware 2Middleware 1Agent用户发起请求触发中间件 1触发中间件 2调用模型返回响应传递结果返回结果最终回复

💡 实战建议:中间件的顺序很关键。典型的最佳实践是日志/监控类放最外层,限流/熔断类放最外层靠前,业务校验类放中间——这样异常能最早被捕获。


三、中间件的两大分类

LangChain 把中间件分成了预制和自定义两类,覆盖从"开箱即用"到"深度定制"的全部需求。

整体分类结构

中间件 Middleware
Built-in Middleware
预制中间件
Custom Middleware
自定义中间件
Summarization
自动总结对话
Human-in-the-loop
人工审批
To-do list
任务规划跟踪
Model call limit
调用次数限制
节点型钩子
环绕型钩子
before_agent
before_model
after_model
after_agent
wrap_model_call
wrap_tool_call

1. Built-in Middleware(预制中间件)

LangChain 为常见场景提供了预构建的中间件,每个都已准备好生产环境,并可根据你的具体需求配置。

中间件功能适用场景
Summarization触发时自动总结对话列表记录长对话导致上下文爆炸
Human-in-the-loop暂停执行以供人工批准或修改工具调用涉及删除/支付/发送等高风险操作
To-do list为代理提供复杂多步骤任务的任务规划和跟踪能力多步任务执行与可追溯
Model call limit限制模型调用次数,以防止过高成本成本敏感的生产环境

✅ 实战建议:大多数项目从 Model call limit + Summarization 起步,就能解决 80% 的生产化问题。

2. Custom Middleware(自定义中间件)

LangChain 允许通过代理执行流程中特定节点的钩子来构建自定义中间件。钩子分两类:

钩子触发位置

环绕型钩子
节点型钩子
wrap_model_call
围绕模型调用
wrap_tool_call
围绕工具调用
before_agent
Agent 开始前
before_model
模型调用前
after_model
模型响应后
after_agent
Agent 完成后

节点型钩子(Node Hooks)

钩子触发时机典型用途
before_agentAgent 开始前(每次查询一次)鉴权、初始化上下文
before_model每次模型调用前提示词改写、敏感词过滤
after_model每次模型响应后输出格式化、敏感信息脱敏
after_agent代理完成后(每次调用一次)清理资源、记录指标

环绕型钩子(Wrap Hooks)

钩子触发时机典型用途
wrap_model_call围绕每次模型调用重试、降级到备用模型、缓存
wrap_tool_call围绕每次工具调用工具调用审批、参数校验、结果缓存

💡 节点型 vs 环绕型:节点型是"在节点前后挂个钩子",环绕型是"把整个调用包起来",后者天然适合做重试 / fallback / 缓存这类需要拦截输入输出的场景。


四、总结:一张图看懂中间件

Agent 中间件核心拦截器模式可扩展性细粒度控制四大作用行为记录格式约束逻辑控制资源限制两大类Built-inSummarizationHuman-in-the-loopTo-do listModel call limitCustom节点型before/after hooks环绕型wrap hooks关键钩子before_agentbefore_modelafter_modelafter_agentwrap_model_callwrap_tool_call

中间件是 LangChain Agent 体系中的核心扩展机制,通过拦截器模式在关键执行节点注入自定义逻辑,覆盖行为记录、格式约束、逻辑控制、资源限制四大方向。

  • 想快速上手?→ 用 Built-in 中间件,5 行代码搞定生产化
  • 想深度定制?→ 选 Custom 钩子,6 个位置任你组合

掌握了它,你的 Agent 才真正具备了可观测、可控制、可生产的能力。


如果觉得有帮助,欢迎点赞 / 收藏 / 评论交流~

Ai, LangChain
LangChain Ai Python
许可协议:  CC BY 4.0
分享

相关文章

7月 30, 2026

LangChain Agent 中间件完全指南:从拦截器设计到自定义钩子实战

读懂中间件机制,让你的 Agent 从"能跑"走向"可控、可观测、可生产"。 写在前面 如果你已经用 LangChain 搭过 Agent,大概率会遇到这些痛点: 想给 Agent 加上日志,却不知道在哪一层埋点 想做调用次数限流,防止 token 成本失控 想在关键工具调用前让人工把关,但不想重写

7月 30, 2026

一文搞懂 LangChain Message:从 4 种消息类型到 Agent 状态流转

如果你正在学习 LangChain 或基于 LangChain 搭建 Agent,那么「Message(消息)」是绕不开的第一道坎。 它既是模型的输入输出,也是对话的上下文单元,更是 Agent 状态机的"燃料"。 本文将带你系统掌握 Message 的全部要点:4 种消息类型 → 工具调用流程 →

7月 30, 2026

一文读懂 LangChain Tools:从 @tool 装饰器到 StructuredTool,让大模型真正'动手'

写在前面 大语言模型(LLM)很强,但"只会说话"是它最大的短板。Tools(工具) 就是 LangChain 给出的解法——通过标准化的接口让模型能够调用外部能力,从而真正"动手"。 本文从一张概念图出发,系统讲清楚: @tool 装饰器如何把一个普通函数变成工具 模型发出 tool_calls

下一篇

上一篇

一文搞懂 LangChain Message:从 4 种消息类型到 Agent 状态流转

最近更新

  • LangChain Agent 中间件完全指南:从拦截器设计到自定义钩子实战
  • 一文搞懂 LangChain Message:从 4 种消息类型到 Agent 状态流转
  • 一文读懂 LangChain Tools:从 @tool 装饰器到 StructuredTool,让大模型真正'动手'
  • LangChain Agent 完全指南:从 Tools 到 ReAct 循环的工程实践
  • 故障排查记录:阿里云 fnOS 网络不可达 (Network is Unreachable)

热门标签

samsung WireGuard Chevereto docker 破解 llama LangChain Ai Python Gemma

目录

©2026 命令行小屋. 保留部分权利。

使用 Halo 主题 Chirpy