从 Vue 生命周期与 Spring AOP 理解 LangChain Middleware

起因

看 B 站的 LangChain 视频时学到了 Middleware(中间件),于是想到一个问题:前端 Vue、后端 Spring Boot 和 Agent 开发中,有没有相似的设计思想?

先说结论:Vue 生命周期钩子、Spring AOP 和 LangChain Middleware 不是同一个概念,但都允许开发者在不改动主流程的情况下,在框架预留的执行节点插入扩展逻辑。

LangChain 中的 Hook 与 Middleware

Hook(钩子)是框架在执行流程中暴露的扩展点。开发者可以把自己的逻辑挂到这些节点上,在不修改 Agent Loop 主流程的情况下,完成日志、校验、状态更新、重试或权限控制等工作。

LangChain 的 Middleware 则是对这些扩展逻辑的封装。一个 Middleware 可以实现一个或多个 Hook,并作为可复用模块添加到 Agent 中:

text 复制代码
Hook:Agent 执行流程中的一个介入点
Middleware:利用一个或多个 Hook 封装出来的完整功能

LangChain 当前提供两类 Middleware Hook:

类型 Hook 执行时机 适合处理
节点式 before_agent Agent 每次调用开始前 请求校验、初始化状态
节点式 before_model 每次调用模型前 修改状态、限制消息数量
节点式 after_model 每次收到模型响应后 检查响应、更新状态
节点式 after_agent Agent 每次调用结束后 最终校验、记录结果
包裹式 wrap_model_call 包裹每次模型调用 重试、缓存、模型切换
包裹式 wrap_tool_call 包裹每次工具调用 权限检查、异常处理、监控

它们大致位于下面这条执行链路中:

text 复制代码
用户输入
   ↓
before_agent(一次)
   ↓
before_model → wrap_model_call → 模型 → after_model
                                  ↓
                       wrap_tool_call → 工具
                                  ↓
                         回到模型继续判断
   ↓
after_agent(一次)
   ↓
最终结果

因此,Hook 更像一个具体的"检查点",Middleware 更像安装在一个或多个检查点上的"完整功能模块"。

Spring Boot 中的 AOP

AOP(Aspect-Oriented Programming,面向切面编程)是 Spring 中的重要概念。它将日志、事务、权限检查等横切关注点从业务逻辑中分离出来,避免在大量业务方法中重复编写相同代码。

以 Service 方法为例:

text 复制代码
Controller 调用
   ↓
Spring AOP 代理
   ├── 方法执行前:开启事务、检查权限、记录日志
   ↓
真正的 Service 方法
   ↓
Spring AOP 代理
   └── 方法执行后:提交或回滚事务、记录结果

Spring 的 @Transactional 是常见例子:在默认代理模式下,Spring 通过 AOP 代理在方法调用前开启事务,成功后提交,发生符合回滚规则的异常时回滚。

Spring AOP 与 LangChain Middleware 的相似点是:二者都适合封装日志、监控、权限和异常处理等横切逻辑。区别是,Spring AOP 主要围绕 Spring Bean 的方法调用工作,而 LangChain Middleware 围绕 Agent、模型和工具的执行流程工作。

IoC 与这条类比的关系

IoC(Inversion of Control,控制反转)负责把对象的创建、依赖组装和生命周期管理交给 Spring 容器。它是 Spring 的重要基础,但不是一种流程拦截机制,因此不能直接对应 LangChain Hook。

可以简单记成:

text 复制代码
IoC:管理对象和依赖
AOP:在方法调用前后织入横切逻辑

Spring 容器先管理 Bean,Spring AOP 再为符合条件的 Bean 创建代理并应用切面逻辑。

Vue 中的生命周期 Hook

Vue 组件会经历创建、挂载、更新和卸载等阶段。生命周期 Hook 让开发者可以在这些固定阶段执行自己的逻辑。

text 复制代码
创建组件
   ↓
setup 阶段:创建响应式状态并同步注册生命周期 Hook
   ↓
onBeforeMount:即将首次渲染,组件 DOM 还没有创建
   ↓
生成并插入 DOM
   ↓
onMounted:组件已经挂载,可以访问 DOM
   ↓
响应式数据变化
   ↓
onBeforeUpdate:数据已经变化,DOM 还没有完成更新
   ↓
更新 DOM
   ↓
onUpdated:DOM 已经完成更新
   ↓
onBeforeUnmount:组件即将卸载,此时组件仍然可用
   ↓
移除组件
   ↓
onUnmounted:清理定时器、事件监听器和连接

需要注意,setup 是组件的设置阶段,不是 onXxx 形式的生命周期 Hook;生命周期 Hook 需要在 setup 阶段同步注册。

Vue 生命周期 Hook 与 LangChain Hook 的相似点是:框架先定义执行流程和扩展节点,开发者再决定是否在这些节点注册逻辑。区别是,Vue Hook 关注组件和 DOM 的生命周期,LangChain Hook 关注 Agent 的推理与工具调用流程。

三者的共同点与区别

领域 介入对象 主要机制 常见用途
Vue 生命周期 Hook 组件生命周期 在固定生命周期节点执行回调 操作 DOM、初始化资源、清理副作用
Spring AOP Spring Bean 的方法调用 通过切点匹配方法,由代理执行通知 事务、日志、权限、监控
LangChain Middleware Agent、模型和工具执行流程 通过节点式或包裹式 Hook 介入 Guardrail、重试、状态更新、模型与工具控制

所以,三者最准确的关系不是"相同概念",而是共享了相似的扩展思想:

框架负责主流程,开发者通过预留的扩展点加入横切逻辑,让核心业务保持清晰。

进一步记忆:Hook 是一个执行节点;Middleware 或 Aspect 是利用这些节点组织起来的功能模块;IoC 则负责对象与依赖管理,属于另一条设计主线。

相关推荐
子兮曰6 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
回眸&啤酒鸭6 天前
【回眸】Minicart 电商购物车核心功能落地指南
人工智能
一隅论数智6 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
AI的探索之旅6 天前
97 个 OpenCV 实例(三十):双目立体,从标定到点云
人工智能·opencv·计算机视觉
AlbertZein6 天前
Step-5-Preview 上手实测:3D 游戏、金融分析、网页设计一次跑完
人工智能·aigc
LaughingZhu6 天前
Product Hunt 每日热榜 | 2026-09-19
人工智能·深度学习·神经网络·搜索引擎·百度
美狐美颜SDK开放平台6 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
1点东西6 天前
做了近两年的Agent开发,其实真正要学的就是这五件事
llm·agent·ai编程
wukangjupingbb6 天前
智能网联汽车安全能力框架
人工智能