主题
概述
在每一步控制和自定义智能体执行
中间件提供了一种更精细地控制智能体内部行为的方式。中间件适用于以下场景:
通过将中间件传给 create_agent 来添加它们:
python
from langchain.agents import create_agent
from langchain.agents.middleware import SummarizationMiddleware, HumanInTheLoopMiddleware
agent = create_agent(
model="gpt-5.5",
tools=[...],
middleware=[
SummarizationMiddleware(...),
HumanInTheLoopMiddleware(...)
],
)智能体循环
核心智能体循环包括:调用模型,让它选择要执行的工具,然后当它不再调用工具时结束:

中间件在上述每个步骤之前和之后都暴露了钩子:

在 LangGraph 工作流中使用中间件
中间件不是一个独立的运行时:钩子运行在 create_agent 返回的编译后的 LangGraph 内部。你可以把整个智能体(连同中间件等全部内容)作为一个节点或子图放入更大的 StateGraph 中,而每个中间件钩子都会继续运行。
当外围拓扑不只是标准的「循环直到完成」时,可以采用这种模式:在路由到多个智能体之一之前对输入进行分类、并行展开工作,或用确定性步骤把智能体调用串联起来。
HumanInTheLoopMiddleware 会与每个工具的 .name 进行匹配。
被 @tool 装饰的函数以其函数名作为名称,因此下面的键是 "send_email"。
python
from langchain.agents import AgentState, create_agent
from langchain.agents.middleware import HumanInTheLoopMiddleware
from langgraph.graph import START, StateGraph
# Assumes read_email, send_email, classify_node, and route are defined elsewhere.
email_agent = create_agent(
model="claude-sonnet-4-6",
tools=[read_email, send_email],
middleware=[HumanInTheLoopMiddleware(interrupt_on={"send_email": True})],
)
graph = (
StateGraph(AgentState)
.add_node("classify", classify_node)
.add_node("email_agent", email_agent)
.add_edge(START, "classify")
.add_conditional_edges("classify", route)
.compile()
)HITL 中断、摘要、PII 脱敏、重试以及任何自定义钩子都会随智能体节点一起传递。完整的组合模式请参阅使用子图,其中包括子图检查点器的作用域(每次调用与每个线程)。
其他资源
Built-in middleware
探索适用于常见用例的内置中间件。
Custom middleware
使用钩子和装饰器构建你自己的中间件。
Middleware API reference
中间件的完整 API 参考。
Middleware integrations
适用于 Anthropic、AWS、OpenAI 等的服务商特定中间件。
Testing agents
使用 LangSmith 测试你的智能体。