Skip to main content

Documentation Index

Fetch the complete documentation index at: https://nvd-54.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

中间件提供了一种更精细地控制智能体内部行为的方式。中间件适用于以下场景: 通过将中间件传递给 createAgent 来添加:
import {
  createAgent,
  summarizationMiddleware,
  humanInTheLoopMiddleware,
} from "langchain";

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

智能体循环

核心智能体循环包括调用模型、让模型选择要执行的工具,然后在不再调用工具时结束: 核心智能体循环示意图 中间件在这些步骤的前后暴露了钩子: 中间件流程示意图

在 LangGraph 工作流中使用中间件

中间件不是独立的运行时:钩子在 create_agent 返回的已编译 LangGraph 内部运行。你可以将整个智能体(包括中间件)作为节点或子图放入更大的 StateGraph 中,所有中间件钩子仍会继续运行。 当周围的拓扑结构超出标准的”循环直到完成”模式时,可以使用这种方式:在路由到多个智能体之前对输入进行分类、并行扇出工作,或将智能体调用与确定性步骤串联起来。 HumanInTheLoopMiddleware 通过每个工具的 .name 进行匹配。在 Python 中,@tool 装饰的函数从函数名获取名称(因此下面的键是 "send_email");在 TypeScript 中,键匹配你传递给 tool({...}, { name })name
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();
人机协作中断、摘要、PII 脱敏、重试以及任何自定义钩子都会随智能体节点一起传递。请参阅使用子图了解完整的组合模式,包括子图检查点作用域(按调用与按线程)。

其他资源

内置中间件

探索常见用例的内置中间件。

自定义中间件

使用钩子和装饰器构建你自己的中间件。

中间件 API 参考

中间件的完整 API 参考。

中间件集成

针对 Anthropic、AWS、OpenAI 等的特定提供商中间件。

测试智能体

使用 LangSmith 测试你的智能体。