中间件总览
在智能体执行的每个步骤中精准控制与定制 Agent 行为
中间件提供了一种更紧密地控制 Agent 内部运行机制的方式。中间件适用于以下场景:
通过将中间件传递给 createAgent 来添加它们:
typescript
import {
createAgent,
summarizationMiddleware,
humanInTheLoopMiddleware,
} from "langchain";
const agent = createAgent({
model: "gpt-5.5",
tools: [...],
middleware: [summarizationMiddleware, humanInTheLoopMiddleware],
});Agent 循环
核心 Agent 循环包括调用模型、让模型选择要执行的工具,并在模型不再调用任何工具时完成执行:

中间件在这些步骤的每一步之前和之后暴露钩子:

在 LangGraph 工作流中使用中间件
中间件并不是一个独立的运行时:钩子在 create_agent 返回的编译后的 LangGraph 内部运行。你可以将整个 Agent(包含所有中间件)作为一个节点或子图放入更大的 StateGraph 中,每个中间件钩子都会继续运行。
当外围拓扑结构不仅是标准的“循环直到完成”时,可以使用这种模式:在路由到多个 Agent 之一前先对输入进行分类、并行分发工作,或者将 Agent 调用与确定性步骤拼接在一起。
HumanInTheLoopMiddleware 会与每个工具的 .name 进行匹配。
该键与传递给 tool({...}, { name }) 的 name 匹配。
typescript
import { AgentState, createAgent, humanInTheLoopMiddleware } from "langchain";
import { StateGraph, START } from "@langchain/langgraph";
// 假定 readEmail、sendEmail、classifyNode 和 route 已在其他地方定义。
// readEmail / sendEmail 注册时的 name 为 "read_email" / "send_email"。
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();HITL 中断、摘要生成、PII 脱敏、重试以及任何自定义钩子都会随该 Agent 节点一同流转。有关完整的组合模式集合,包括子图检查点保存器(checkpointer)作用域(每次调用与每个线程),请参阅使用子图。
其他资源
探索适用于常见用例的内置中间件。
使用钩子与装饰器构建属于你自己的中间件。
完整的中间件 API 参考。
适用于 Anthropic、AWS、OpenAI 等特定提供商的中间件。
使用 LangSmith 测试你的 Agent。
