LangChain 1.0的Agent框架引入了中间件(Middleware)机制,作为增强智能体可扩展性和管理性的关键组件。这一入门文章将详细阐述中间件的概念、工作原理、内置支持、自定义开发以及最佳实践。无论你是初学者还是经验开发者,本文都能帮助你快速上手中间件,构建更健壮的Agent系统。
1、LangChain Agent 中间件概述
在LangChain 1.0的Agent框架中,中间件被定义为一种可插拔的扩展机制,类似于“神经系统”,它允许开发者在Agent的生命周期中介入逻辑,如模型调用前后或工具执行过程中。根据官方文档(Middleware Overview),中间件的核心作用是拦截和修改请求/响应流,从而实现日志记录、速率限制、内容审查等功能,而不破坏核心Agent逻辑。
中间件的重要性在于它提升了Agent的灵活性和生产就绪性。在LangChain 0.x时代,扩展Agent行为往往需要重写整个流程;而在1.0中,通过中间件,你可以轻松添加自定义逻辑,使Agent更像一个可管理的“微型操作系统进程”。例如,中间件可以动态选择模型、处理工具错误或压缩记忆状态,确保Agent在复杂任务中高效运行。
官方文档强调,中间件集成于LangGraph-based的Agent Runtime中,支持在create_agent API中直接配置。它适用于各种场景,如企业级应用中的PII(个人身份信息)审查或AI系统的速率控制。通过中间件,LangChain Agent从静态执行体转变为高度可定制的自治系统。
2、中间件工作原理与集成方式
中间件在Agent Runtime中的工作机制基于LangGraph的图结构:每个中间件作为一个节点或装饰器,拦截状态流转。官方文档(Middleware Overview)描述了其核心流程——中间件可在模型调用(Model Call)、工具调用(Tool Call)或提示生成(Prompt Generation)阶段介入,修改输入/输出参数或添加侧效逻辑。
中间件Middleware是本次LangChain 1.0更新中上线的一个重大功能,根据官网的说明,借助中间件,开发者可以高度定制和控制Agent运行的每一个环节。简而言之,借助中间件,一个ReAct Agent的运行模型如下:通过在Agent实际运行过程中设置一些钩子,来更改原始程序运行的行为。钩子是框架或系统在某些关键执行点暴露的扩展接口。开发者可以“挂上”自己的逻辑,在那些点上插入、修改或替换行为,而无需改变主流程代码。就像在流水线上某个环节设置了一个“检查点”或“插入器”。在LangChain的Agent执行循环中,比如“模型调用前”“模型调用后”“工具调用前后”都是可能挂钩子的点。
为了更好理解这一点,我们用流程图来理解:
这是之前的智能体调用流程:

LangChain v1.0引入中间件Middleware后,智能体调用流程变更如下:

集成方式也比较简单,主要通过装饰器(如@wrap_model_call、@wrap_tool_call)或create_agent的参数传入。中间件支持链式组合,允许多个中间件顺序执行。
以下是一个极简调用流程实例,演示如何集成一个内置中间件(日志记录)到Agent中:
# 1. 导入相关库from langchain.agents import create_agentfrom langchain_openai import ChatOpenAI # 示例模型,可替换from langchain_community.tools.tavily_search import TavilySearchResults # 示例工具from langchain.middleware import wrap_model_call # 中间件装饰器# 2. 定义一个简单日志中间件(自定义示例)def log_middleware(inputs): print(f"Model input: {inputs}") return inputs # 返回修改后的输入,或直接传递# 3. 初始化模型、工具和中间件model = ChatOpenAI(model="gpt-4o")web_search = TavilySearchResults(max_results=2)wrapped_model = wrap_model_call(model, log_middleware) # 应用中间件到模型# 4. 创建Agent并集成中间件agent = create_agent( model=wrapped_model, # 使用包装后的模型 tools=[web_search], system_prompt="你是一名智能助手,使用工具解决问题。")# 5. 运行Agentresult = agent.invoke( {"messages": [{"role": "user", "content": "2024年诺贝尔物理学奖得主是谁?"}]})print(result['messages'][-1].content) # 输出结果
在这个示例中,wrap_model_call装饰器拦截模型输入并打印日志。官方文档指出,中间件通过LangGraph的状态图实现:输入流经中间件节点后,继续到模型或工具节点,支持异步和流式操作(如stream模式)。这确保了无缝集成,同时保持Agent的ReAct(Reasoning + Acting)循环。
3、内置中间件详解
LangChain 1.0提供了若干内置中间件,覆盖常见生产需求。根据官方文档(Built-in Middleware),这些中间件可直接导入并应用,无需自定义开发。它们包括日志、速率限制、记忆管理和内容审查等。以下表格列出关键内置中间件,按领域分类,包括名称和功能说明:
| 领域 | 中间件名称 | 功能说明 |
|---|---|---|
| 日志与监控 | Logging Middleware | 在模型/工具调用前后记录输入输出,支持自定义日志级别和格式,便于调试和审计。应用场景:开发阶段追踪Agent决策过程。 |
| 速率控制 | Rate Limiting Middleware | 限制调用频率(如每秒N次),防止API滥用或成本超支。支持令牌桶算法。应用场景:集成高成本模型如GPT-4时控制支出。 |
| 记忆管理 | Memory Compression Middleware | 压缩历史消息,减少上下文长度,优化模型性能。支持摘要或截断策略。应用场景:长对话Agent中防止令牌溢出。 |
| 内容安全 | PII Detection Middleware | 检测并屏蔽个人身份信息(如邮箱、手机号),确保合规。支持正则或ML-based检测。应用场景:企业应用中隐私保护。 |
| 错误处理 | Error Handling Middleware | 捕获工具/模型错误,重试或回退到备用逻辑。支持自定义重试次数。应用场景:不稳定API集成时提升鲁棒性。 |
| 提示优化 | Prompt Rewriting Middleware | 动态重写提示模板,注入上下文或优化查询。应用场景:多语言支持或个性化提示生成。 |
例如,使用内置日志中间件的一个代码片段(参考官网):
from langchain.middleware.built_in import logging_middleware# 应用到模型wrapped_model = logging_middleware(model, level="DEBUG")
这些内置中间件可组合使用,如先应用PII审查再日志记录,确保Agent安全高效。官方建议从简单场景起步,逐步扩展。
4、自定义中间件开发指南
对于特定需求,LangChain 1.0允许开发者创建自定义中间件。自定义中间件本质是一个可调用函数,接受输入字典并返回修改版,支持装饰器模式。
LangChain 1.0的中间件能实现如下功能,这里以列表形式呈现:功能列表、功能说明、常用钩子。
-
功能列表:模型相关钩子归纳为三种:before_model、modify_model_request、after_model(可三选其一或组合实现)。它们对应“模型调用前 → 请求修改 → 模型返回后”的三个阶段。
-
功能说明:
before_model:总结/裁剪历史、注入系统指令、敏感信息脱敏、状态校验、条件分支跳转。
modify_model_request:对即将发送的请求做精准改写(模型名、参数、工具列表、messages 等)。
after_model:做人审(HITL)、输出校验/重写、添加安全标签或生成可观测数据。 -
常用钩子:此外,开发者还能用包装器把一次模型/工具调用整体“包起来”,实现重试、熔断、缓存、降级与动态路由:
wrap_model_call:在一次模型调用外层加壳,可动态换模型/改温度/改 tools,也可做 A/B、回退策略。v1 把“动态模型选择”正式迁入这里。
wrap_tool_call:统一处理工具调用的超时、重试、白/黑名单、错误上报,或在人审批准前阻断高风险工具(写文件、SQL、HTTP)。
开发步骤:
- 定义中间件函数:输入为字典(如
{"input": ..., "context": ...}),输出为修改后的字典或None(表示中断)。 - 使用装饰器包装:如
@wrap_model_call用于模型、@wrap_tool_call用于工具。 - 集成到Agent:传入
create_agent或直接包装组件。
以下是一个自定义中间件示例,实现动态模型选择(根据任务复杂度切换模型,参考官网自定义示例):
from langchain.middleware import wrap_model_callfrom langchain_openai import ChatOpenAI# 定义自定义中间件函数(结合modify_model_request钩子)def dynamic_model_selector(inputs): # 根据输入复杂度选择模型 if len(inputs.get("messages", [])) > 5: # 复杂任务用强大模型 inputs["model"] = ChatOpenAI(model="gpt-4o") else: inputs["model"] = ChatOpenAI(model="gpt-3.5-turbo") return inputs# 包装模型base_model = ChatOpenAI(model="gpt-3.5-turbo") # 默认模型wrapped_model = wrap_model_call(base_model, dynamic_model_selector)# 然后用于create_agent,如上文示例
另一个示例:工具错误处理中间件(结合wrap_tool_call和after_model钩子):
from langchain.middleware import wrap_tool_calldef error_retry_middleware(inputs, max_retries=3): for attempt in range(max_retries): try: # 模拟工具调用 return inputs["tool"].invoke(inputs["args"]) except Exception as e: if attempt == max_retries - 1: raise e print(f"Retry {attempt + 1} due to: {e}")# 包装工具wrapped_tool = wrap_tool_call(web_search, error_retry_middleware)
官方文档强调,自定义中间件应保持轻量,避免引入性能瓶颈。测试时,使用LangGraph的检查点功能验证状态流。
5、中间件的最佳实践与注意事项
在生产环境中使用中间件时,遵循以下最佳实践:
首先,优先使用内置中间件减少自定义代码;
其次,链式组合时注意顺序(如先安全审查再日志);
最后,监控性能——过多中间件可能增加延迟,使用异步模式缓解。
潜在注意事项包括:兼容性问题(确保中间件与模型/工具API匹配);性能开销(基准测试每个中间件);以及状态管理(中间件应无副作用或正确处理共享状态)。官方文档建议结合LangServe部署中间件增强Agent,实现云端可观察性。
此外,与LangChain生态集成时,可将中间件扩展到LangGraph节点,支持多Agent协作。避免过度使用,以免复杂化系统。
总之,LangChain 1.0的Agent中间件机制标志着智能体开发的成熟化,通过内置和自定义支持,不仅简化了扩展流程,还显著提升了系统的安全性和效率。这一功能将Agent从基础执行者转变为高度可控的智能平台,能够应对从简单查询到企业级自动化等多种挑战。开发者们可参考官方文档实践,探索中间件的潜力,构建更可控更可靠的AI智能体应用。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套 AI 大模型突围资料包:
- ✅ 从零到一的 AI 学习路径图
- ✅ 大模型调优实战手册(附医疗/金融等大厂真实案例)
- ✅ 百度/阿里专家闭门录播课
- ✅ 大模型当下最新行业报告
- ✅ 真实大厂面试真题
- ✅ 2025 最新岗位需求图谱
所有资料 ⚡️ ,朋友们如果有需要 《AI大模型入门+进阶学习资源包》,下方扫码获取~

① 全套AI大模型应用开发视频教程
(包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点)

② 大模型系统化学习路线
作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!

③ 大模型学习书籍&文档
学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。

④ AI大模型最新行业报告
2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

⑤ 大模型项目实战&配套源码
学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。

⑥ 大模型大厂面试真题
面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

以上资料如何领取?

为什么大家都在学大模型?
最近科技巨头英特尔宣布裁员2万人,传统岗位不断缩减,但AI相关技术岗疯狂扩招,有3-5年经验,大厂薪资就能给到50K*20薪!

不出1年,“有AI项目经验”将成为投递简历的门槛。
风口之下,与其像“温水煮青蛙”一样坐等被行业淘汰,不如先人一步,掌握AI大模型原理+应用技术+项目实操经验,“顺风”翻盘!


这些资料真的有用吗?
这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。


以上全套大模型资料如何领取?


被折叠的 条评论
为什么被折叠?



