Skip to content

中间件总览 (Middleware overview) ​

在执行的每一步精确控制与定制智能体行为

中间件提供了一种深度控制智能体内部运转的机制。中间件通常用于实现以下需求:

在创建智能体时将其传入 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 钩子构建你自己的专属中间件。