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 脱敏、重试以及任何自定义钩子都会随智能体节点一起传递。请参阅使用子图了解完整的组合模式,包括子图检查点作用域(按调用与按线程)。
其他资源
中间件集成
针对 Anthropic、AWS、OpenAI 等的特定提供商中间件。
测试智能体
使用 LangSmith 测试你的智能体。
连接这些文档到 Claude、VSCode 等,通过 MCP 获取实时答案。