Middleware 提供了一种更精细地控制代理内部行为的方式。Middleware 适用于以下场景: 通过将 middleware 传给 create_agent 来添加:
from langchain.agents import create_agent
from langchain.agents.middleware import SummarizationMiddleware, HumanInTheLoopMiddleware

agent = create_agent(
    model="gpt-5.4",
    tools=[...],
    middleware=[
        SummarizationMiddleware(...),
        HumanInTheLoopMiddleware(...)
    ],
)

代理循环

核心代理循环包括调用模型、让模型选择要执行的 tools,然后在模型不再调用 tools 时结束: 核心代理循环图 Middleware 会在每个步骤前后暴露 hooks: Middleware 流程图

在 LangGraph workflow 中使用 middleware

Middleware 不是单独的 runtime:hooks 会在 create_agent 返回的已编译 LangGraph 内运行。你可以将整个 agent(包括 middleware)作为节点或 subgraph 放入更大的 StateGraph 中,并且每个 middleware hook 都会继续运行。 当周围拓扑不只是标准的“循环直到完成”时,可以使用这种模式:例如在路由到多个 agents 之一之前对输入分类,并行扇出工作,或用确定性步骤串接 agent calls。 HumanInTheLoopMiddleware 会根据每个 tool 的 .name 进行匹配。在 Python 中,使用 @tool 装饰的函数会从函数名获取名称(因此下面的 key 是 "send_email");在 TypeScript 中,key 会匹配你传给 tool({...}, { name })name
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 interrupt、summarization、PII redaction、retries 以及任何自定义 hooks 都会随 agent node 一起运行。完整组合模式请参阅 Use subgraphs,其中包括 subgraph checkpointer 的作用域(按 invocation 或按 thread)。

其他资源

Built-in middleware

探索常见用例的内置 middleware。

Custom middleware

使用 hooks 和 decorators 构建自己的 middleware。

Middleware API reference

Middleware 的完整 API reference。

Middleware integrations

Anthropic、AWS、OpenAI 等 provider-specific middleware。

Testing agents

使用 LangSmith 测试 agents。