中间件总览 (Middleware overview)
在执行的每一步精确控制与定制智能体行为
中间件提供了一种深度控制智能体内部运转的机制。中间件通常用于实现以下需求:
- 通过日志记录、行为分析和指标监控来追踪智能体执行。
- 动态改写提示词、工具选择过滤与输出格式转换。
- 添加重试机制、故障回退和早期终止短路逻辑。
- 应用速率限制、安全护栏与 PII 个人隐私数据过滤。
在创建智能体时将其传入 middleware 参数:
typescript
import {
createAgent,
summarizationMiddleware,
humanInTheLoopMiddleware,
} from "langchain";
const agent = createAgent({
model: "gpt-5.5",
tools: [...],
middleware: [summarizationMiddleware, humanInTheLoopMiddleware],
});智能体循环结构 (The agent loop)
核心智能体循环包括:调用大语言模型、让模型自主决定执行哪些工具,并在不再调用工具时结束:

中间件在这些步骤的前后均暴露了拦截钩子(Hooks):

在 LangGraph 工作流中使用中间件
中间件并非独立的外部运行时:所有拦截钩子都直接运行在 create_agent 返回的编译后 LangGraph 图内部。你可以将整个智能体(包含其全部中间件)作为节点或子图放入更大的 StateGraph 中,所有中间件钩子依然会正常触发。
当外围拓扑超出标准的单智能体循环时(例如在路由前对输入进行分类、并行任务扇出、或将智能体调用与确定性业务步骤编排在一起),这种模式非常强大:
typescript
import { AgentState, createAgent, humanInTheLoopMiddleware } from "langchain";
import { StateGraph, START } from "@langchain/langgraph";
// 假定 readEmail, sendEmail, classifyNode, route 在别处定义
const emailAgent = createAgent({
model: "claude-sonnet-4-6",
tools: [readEmail, sendEmail],
middleware: [humanInTheLoopMiddleware({ interruptOn: { send_email: true } })],
});
const graph = new StateGraph(AgentState)
.addNode("classify", classifyNode)
.addNode("emailAgent", emailAgent)
.addEdge(START, "classify")
.addConditionalEdges("classify", route)
.compile();人在回路中断、上下文摘要、敏感信息脱敏、失败重试以及任何自定义钩子都会随智能体节点一同流转。有关包含子图检查点作用域在内的完整组合模式,请参阅使用子图。
延伸参考
探索适用于常见场景的内置中间件。
使用 Hook 钩子构建你自己的专属中间件。
