news 2026/2/23 13:24:31

LangChain1.0 中间件实战:构建可控、安全、高效的AI Agent全攻略!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LangChain1.0 中间件实战:构建可控、安全、高效的AI Agent全攻略!

引言:为什么你的 AI Agent 需要“交通警察”?

在构建复杂 AI 应用时,我们常常遇到这些问题:

这些问题的根源在于:Agent 缺乏运行时的“监管机制”

LangChain 的Middleware(中间件)正是为此而生——它就像 Agent 执行流程中的“交通警察”,在关键时刻介入、检查、修改甚至终止流程,让你对 AI 行为拥有完全掌控权。

本文将带你从零理解 Middleware 原理,并在数据问答场景实战!

一、整体架构概览

LangChain 的Middleware机制基于Hook(钩子)模型,在智能体执行流程的关键节点注入自定义逻辑,实现对运行行为的精细干预。

智能体在运行过程中会经历多个重要阶段——从接收输入、调用模型或工具,到生成响应。LangChain 在这些节点开放了高度灵活的扩展点,开发者可借此实现动态提示词调整、对话历史自动摘要、按需筛选工具、运行状态追踪以及敏感内容拦截等能力。

二、核心模块拆解

步骤 1:认识内置 Middleware(开箱即用)

LangChain 已提供多个高价值中间件:

中间件用途
ShellToolMiddlewareShell工具中间件使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_agentAgent 开始执行前可用于初始化状态、校验输入或加载上下文
@after_agentAgent 执行完成后适合保存结果、清理资源或记录日志
@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

📚 完整代码

开源项目地址:

🌈 项目亮点

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大模型入门+进阶学习资源包》,扫码获取~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/22 13:31:36

毕业设计 基于Astart的寻路算法设计与实现

文章目录 0 简介算法介绍广度优先搜索Dijkstra算法最佳优先搜索A*算法 启发函数关于距离曼哈顿距离对角距离欧几里得距离 算法实现坐标点与地图算法主体测试入口实现效果最后 0 简介 今天学长向大家分享一个毕业设计项目 毕业设计 基于Astart的寻路算法设计与实现 项目运行效…

作者头像 李华
网站建设 2026/2/16 2:19:00

好写作AI:学术语言教练,助你掌握更地道的学科表达

你是否曾收到这样的反馈:“表述不够专业”或“缺少学科味道”?学术写作不仅需要正确的语法,更需要符合特定学科社群的表达惯例。好写作AI全新角色——你的专属学术语言教练,将助你跨越这道隐形的专业门槛,掌握更地道、…

作者头像 李华
网站建设 2026/2/14 22:46:27

好写作AI:文献海洋导航员,快速梳理核心提炼研究立足点

面对成堆的PDF文献,你是否感到无从下手?下载了数十篇论文,却仍不清楚研究空白在哪里?好写作AI全新上线 “文献智能导航” 功能,化身你的专属研究导航员,助你在浩瀚文献中精准定位,快速提炼出真正…

作者头像 李华