Skip to content

中间件总览 ​

在智能体执行的每个步骤中精准控制与定制 Agent 行为

中间件提供了一种更紧密地控制 Agent 内部运行机制的方式。中间件适用于以下场景:

通过将中间件传递给 createAgent 来添加它们:

typescript
import {
  createAgent,
  summarizationMiddleware,
  humanInTheLoopMiddleware,
} from "langchain";

const agent = createAgent({
  model: "gpt-5.5",
  tools: [...],
  middleware: [summarizationMiddleware, humanInTheLoopMiddleware],
});

Agent 循环 ​

核心 Agent 循环包括调用模型、让模型选择要执行的工具,并在模型不再调用任何工具时完成执行:

Core agent loop diagram

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

Middleware flow diagram

在 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 参考

完整的中间件 API 参考。

中间件集成

适用于 Anthropic、AWS、OpenAI 等特定提供商的中间件。

测试 Agent

使用 LangSmith 测试你的 Agent。