news 2026/10/14 12:15:46

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/10/13 14:05:46

做1688批发系统5年,被商品详情API坑到连夜改代码的实战手记

在电商开发圈混了快十年,1688的商品详情API绝对是最“特立独行”的存在。作为批发平台,它的接口返回里藏着太多零售平台没有的“暗门”——从阶梯价的诡异格式到混批规则的嵌套逻辑,每次对接都像拆盲盒。今天就把这些年踩过的坑、攒的实战代码…

作者头像 李华
网站建设 2026/10/11 1:08:25

结合Jupyter Notebook实现数据科学问答分析

结合 Jupyter Notebook 实现数据科学问答分析 在企业数据分析实践中,一个老生常谈的问题是:业务人员有明确的分析需求,却无法直接操作数据;而数据团队忙于响应各类临时查询,疲于奔命。更糟糕的是,每次分析结…

作者头像 李华
网站建设 2026/10/7 4:19:57

【AI模型部署新突破】:为什么顶级开发者都在用Win+Open-AutoGLM组合?

第一章:WinOpen-AutoGLM组合的崛起背景近年来,人工智能与自动化技术的深度融合推动了新一代智能工作流系统的诞生。其中,“WinOpen-AutoGLM”组合因其在Windows平台上的高效集成能力、开源生态的灵活扩展性以及AutoGLM驱动的自然语言自动化执…

作者头像 李华
网站建设 2026/10/13 15:40:49

anything-llm前端界面体验报告:美观与实用兼备的设计理念

AnythingLLM前端界面体验报告:美观与实用兼备的设计理念 在大语言模型(LLM)技术席卷各行各业的今天,一个尖锐的问题浮出水面:我们是否真的需要每个人都成为AI工程师才能用好这些强大的工具?显然不是。越来越…

作者头像 李华
网站建设 2026/10/11 7:19:29

如何加强对客户选择华为云国际站代理商CloudDC专区的保障?

加强客户选择华为云国际站代理商 CloudDC 专区的保障,核心是构建 “资质 - 技术 - 服务 - 合规 - 成本 - 应急” 的全链路闭环,叠加代理商专属权益与落地兜底,用可量化的 SLA 与可执行的保障动作打消客户顾虑,提升决策确定性。以下…

作者头像 李华