创建时间: 2026-04-01最后更新: 2026-09-12作者: yangbo(839d1655f)
1. 为什么需要 Middleware
一个 Agent 会反复调用模型、执行 Tool,并把 Tool 结果交回模型。这个循环能完成任务,在真实应用中还要处理一些贯穿整个运行过程的规则。
例如,同一个生活助理在白天可以查询日程、创建提醒;深夜处理请求时,我们可能希望它先照顾用户情绪,并暂时隐藏取消日程这类高风险 Tool。这些需求没有改变 Tool 的业务职责,只为当前运行场景增加了限制。
这类同时影响模型调用和 Tool 执行的规则,适合放到 Middleware 中。常见用途包括:
- 根据本次运行的上下文生成动态 system prompt
- 在模型调用前筛选当前可见的 Tool
- 为 Tool 增加权限校验、重试、日志和错误兜底
- 在 Agent 的开始、模型调用前后或运行结束时更新状态
Middleware 通过 createAgent({ middleware }) 挂载到 Agent 上,在原有执行过程周围增加可复用的控制逻辑。
LangChain 同时提供两类 Middleware。dynamicSystemPromptMiddleware()、toolErrorMiddleware() 等函数会返回已经实现好的 Middleware;需要自定义行为时,可以用 createMiddleware() 声明相应的 Hook。Hook 可以理解为 Agent 运行到特定位置时自动调用的回调函数。无论采用哪一种,最终都放进 middleware 数组中使用。
正在验证登录状态
请稍候,验证完成后将继续显示文章内容