引言:为什么你的 AI Agent 需要“交通警察”?
在构建复杂 AI 应用时,我们常常遇到这些问题:
- Agent 无限调用工具,陷入死循环?
- 用户输入包含敏感信息(如手机号、身份证),却直接传给大模型?
- 想在关键步骤暂停,让人工审核后再继续?
- 多轮对话上下文太长,Token 超限?
- 大模型MCP工具调用时怎样动态修改参数?
这些问题的根源在于:Agent 缺乏运行时的“监管机制”。
LangChain 的Middleware(中间件)正是为此而生——它就像 Agent 执行流程中的“交通警察”,在关键时刻介入、检查、修改甚至终止流程,让你对 AI 行为拥有完全掌控权。
本文将带你从零理解 Middleware 原理,并在数据问答场景实战!
一、整体架构概览
LangChain 的Middleware机制基于Hook(钩子)模型,在智能体执行流程的关键节点注入自定义逻辑,实现对运行行为的精细干预。
智能体在运行过程中会经历多个重要阶段——从接收输入、调用模型或工具,到生成响应。LangChain 在这些节点开放了高度灵活的扩展点,开发者可借此实现动态提示词调整、对话历史自动摘要、按需筛选工具、运行状态追踪以及敏感内容拦截等能力。
二、核心模块拆解
步骤 1:认识内置 Middleware(开箱即用)
LangChain 已提供多个高价值中间件:
| 中间件 | 用途 |
|---|---|
| ShellToolMiddleware | Shell工具中间件使Agent运行沙箱环境进行隔离如Docker容器隔离 |
SummarizationMiddleware | 自动摘要长对话历史,防止上下文溢出 |
HumanInTheLoopMiddleware | 在关键操作前暂停,等待人工审批(需配合 Checkpointer) |
AnthropicPromptCachingMiddleware | 缓存 Anthropic 模型的系统提示,降低成本 |
ModelCallLimitMiddleware | 限制模型调用次数,防无限循环 |
ToolCallLimitMiddleware | 限制特定工具或所有工具的调用次数 |
| ModelFallbackMiddleware | 主模型失败时自动切换备用模型 |
PIIMiddleware | 检测并处理敏感信息(如邮箱、信用卡号) |
TodoListMiddleware | 为复杂任务添加待办事项管理能力 |
LLMToolSelectorMiddleware | 用 LLM 动态筛选相关工具(适合工具很多的场景) |
ToolRetryMiddleware | 对失败的工具调用自动重试(支持指数退避) |
LLMToolEmulator | 用 LLM 模拟工具响应,用于测试 |
ContextEditingMiddleware | 清理或压缩对话上下文(如清除旧的工具调用) |
示例1: 运行Docker沙箱环境进行隔离操作
from langchain.agents import create_agent# 假设 ShellToolMiddleware 和 DockerExecutionPolicy 定义在 your_module.py 中from your_module import ShellToolMiddleware, DockerExecutionPolicy# 配置执行策略以提高安全性execution_policy = DockerExecutionPolicy( image="python:3.11-slim", # 使用轻量级 Python Docker 镜像 read_only_root=True, # 设置根文件系统为只读模式,增强安全性 user_remap=True # 启用用户 ID 映射,限制容器内操作权限)# 创建 Shell 工具中间件实例,配置安全策略shell_middleware = ShellToolMiddleware( execution_policy=execution_policy # 应用 Docker 策略来执行 shell 命令)# 创建代理,自动包含由中间件提供的持久化 shell 工具agent = create_agent( model="gpt-4o", # 指定使用的模型 tools=[], # 其他自定义工具可以在此处添加 middleware=[shell_middleware] # 注册我们的 shell 工具中间件)# 使用 agent 执行一个具体的任务:下载一个网页并查找其中的关键字task_instructions = """使用 curl 下载 https://example.com 并保存为 example.html,然后使用 grep 查找页面中的 "data science" 关键字。"""response = agent.run(task_instructions) # 执行任务并获取结果print(response)缺点: 目前没有Kubernetes策略支持、容器拉起慢,缺乏快速 attach 机制等
示例2:
ModelFallbackMiddleware的作用是在主模型调用失败(如超时、限流、API 错误等)时,自动降级到备用模型
from langchain.agents import create_agentfrom langchain.agents.middleware import ModelFallbackMiddlewareagent = create_agent( model="gpt-4o", # 主模型(首选) tools=[...], middleware=[ ModelFallbackMiddleware( "gpt-4o-mini", # 首选备用模型:出错时首先尝试此模型 "claude-3-5-sonnet-20241022", # 次选备用模型:若上一个也失败,则尝试此模型 ), ],)步骤 2:自定义 Middleware —— 装饰器方式(快速上手)
数据问答场景执行工具时动态修改mcp-server-chart图表渲染参数:
@wrap_tool_callasync def modify_args(request, handler): """ 动态修改mcp-server-chart 图表参数 :param request: :param handler: :return: """ if not (hasattr(request, "tool_call") and request.tool_call is not None): return await handler(request) tool_call = request.tool_call tool_name = None if isinstance(tool_call, dict): tool_name = tool_call.get("name") or tool_call.get("tool") else: tool_name = getattr(tool_call, "name", None) # 只有当工具名称包含 "mcp-server-chart" 时才修改 theme 值 if not (tool_name and "mcp-server-chart"in tool_name): return await handler(request) try: if isinstance(tool_call, dict): args = tool_call.setdefault("args", {}) if not isinstance(args, dict): tool_call["args"] = {} args = tool_call["args"] args["theme"] = "academy"# 修改渲染的主题 academy学院风 dark 黑色 style = args.setdefault("style", {}) if not isinstance(style, dict): args["style"] = {} style = args["style"] style["texture"] = "rough" except Exception as e: print(f"[Warning] Failed to modify chart args: {e}") # 调用原始处理函数 return await handler(request)运行效果如下:
学院派风格
黑色风格
- 支持的装饰器:
| 装饰器 | 触发时机 | 说明 |
|---|---|---|
@before_agent | Agent 开始执行前 | 可用于初始化状态、校验输入或加载上下文 |
@after_agent | Agent 执行完成后 | 适合保存结果、清理资源或记录日志 |
@before_model | 每次调用大模型之前 | 可动态修改提示词、压缩消息历史等 |
@after_model | 每次大模型返回响应后 | 可验证输出内容、应用安全过滤或格式化结果 |
@before_tool | 每次调用工具之前 | 可校验参数、记录调用意图或拦截高危操作 |
@after_tool | 每次工具执行完成后 | 可处理工具返回值、更新状态或记录执行结果 |
@wrap_model_call | 包裹整个模型调用过程 | 支持完全拦截或替换模型调用逻辑(如 mock) |
@wrap_tool_call | 包裹整个工具调用过程 | 可实现重试、降级、模拟响应等高级控制 |
步骤 3:自定义 Middleware —— 类方式(生产级)
- 根据当前状态或上下文动态筛选相关工具
from langchain.agents import create_agentfrom langchain.agents.middleware import AgentMiddleware, ModelRequestfrom typing import Callableclass ToolSelectorMiddleware(AgentMiddleware): def wrap_model_call( self, request: ModelRequest, handler: Callable[[ModelRequest], ModelResponse], ) -> ModelResponse: """中间件:根据当前状态或上下文动态筛选相关工具""" # 基于请求的状态(state)和运行时上下文(runtime), # 从全部工具中选出一个精简且相关的子集 relevant_tools = select_relevant_tools(request.state, request.runtime) request.tools = relevant_tools # 替换为筛选后的工具列表 return handler(request) # 继续执行模型调用# 创建 agentagent = create_agent( model="gpt-4o", tools=all_tools, # 需预先注册所有可用工具 # 中间件可在每次运行时动态选择与当前任务最相关的部分工具, # 避免将大量无关工具传给模型,提升效率和准确性 middleware=[ToolSelectorMiddleware()],)三、总结
通过Middleware,你不再只是“调用 AI”,而是真正 驾驭 AI —— 让其更安全、更可靠、更符合业务需求。
🔗 推荐阅读:LangChain 官方 Middleware 文档https://docs.langchain.com/oss/python/langchain/middleware#model-fallback
📚 完整代码
开源项目地址:
- https://github.com/apconw/sanic-web
- 版本: v1.2.0
🌈 项目亮点
- ✅ 集成 MCP 多智能体架构
- ✅ 支持 Dify /LangChain1.0.x/ LlamaIndex / Ollama / vLLM /Neo4j
- ✅ 前端采用 Vue3 + TypeScript + Vite5,现代化交互体验
- ✅ 内置 ECharts / AntV 图表问答 + CSV 表格问答
- ✅ 支持对接主流 RAG 系统 与 Text2SQL 引擎
- ✅ 轻量级 Sanic 后端,适合快速部署与二次开发
- ✅项目已被蚂蚁官方推荐收录
AntV
运行效果:
数据问答
四、在大模型时代,我们如何有效的去学习大模型?
现如今大模型岗位需求越来越大,但是相关岗位人才难求,薪资持续走高,AI运营薪资平均值约18457元,AI工程师薪资平均值约37336元,大模型算法薪资平均值约39607元。
掌握大模型技术你还能拥有更多可能性:
• 成为一名全栈大模型工程师,包括Prompt,LangChain,LoRA等技术开发、运营、产品等方向全栈工程;
• 能够拥有模型二次训练和微调能力,带领大家完成智能对话、文生图等热门应用;
• 薪资上浮10%-20%,覆盖更多高薪岗位,这是一个高需求、高待遇的热门方向和领域;
• 更优质的项目可以为未来创新创业提供基石。
一直在更新,更多的大模型学习和面试资料已经上传带到CSDN的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇
一、AGI大模型系统学习路线
很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,下面是我整理好的一套完整的学习路线,希望能够帮助到你们学习AI大模型。
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
三、AI大模型经典PDF书籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。
四、AI大模型各大场景实战案例
结语
【一一AGI大模型学习 所有资源获取处(无偿领取)一一】
所有资料 ⚡️ ,朋友们如果有需要全套 《LLM大模型入门+进阶学习资源包》,扫码获取~