Skip to content
LangChain 文档版本 跟随上游 源快照 8cd7a7d3 更新于 2026-10-08

概述

在每一步控制和自定义智能体执行

中间件提供了一种更精细地控制智能体内部行为的方式。中间件适用于以下场景:

通过将中间件传给 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(...)
    ],
)

智能体循环

核心智能体循环包括:调用模型,让它选择要执行的工具,然后当它不再调用工具时结束:

Core agent loop diagram

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

Middleware flow diagram

在 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 脱敏、重试以及任何自定义钩子都会随智能体节点一起传递。完整的组合模式请参阅使用子图,其中包括子图检查点器的作用域(每次调用与每个线程)。

其他资源


BytesRouter 是社区翻译站点,所有译文仅供参考,一切以官方英文原文为准。