中间件 (Middleware)
一句话
中间件(Middleware)提供了一种更紧密控制代理执行过程的方式,可用于跟踪行为、转换提示、添加重试逻辑和应用速率限制等。
什么时候翻这页
当你需要更精细地控制代理执行流程,添加日志记录、调试功能、提示转换、重试机制、回退逻辑、速率限制、护栏和PII检测等功能时。
核心概念
- 中间件(Middleware):一种机制,允许在代理执行的每个步骤前后插入自定义逻辑
- 代理循环(agent loop):涉及调用模型、选择工具执行、在不再调用工具时结束的核心流程
- 钩子(hooks):中间件在代理循环各个步骤前后提供的扩展点
怎么做
- 通过传递中间件给
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(...)
],
)
- 在 LangGraph 工作流中使用中间件代理:
from langchain.agents import AgentState, create_agent
from langchain.agents.middleware import HumanInTheLoopMiddleware
from langgraph.graph import START, StateGraph
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()
)
命令 / API 速查
create_agent(model, tools, middleware=[...]): 创建带有中间件的代理SummarizationMiddleware(...): 摘要中间件HumanInTheLoopMiddleware(...): 人在循环中间件middleware=[...]: 传递中间件列表给 create_agent
与 LangGraph / RAG 手册的联系
中间件不是独立的运行时,而是在 create_agent 返回的编译 LangGraph 内部运行。可以将整个代理(包括所有中间件)作为节点或子图放入更大的 StateGraph 中,每个中间件钩子继续运行。当周围拓扑结构比标准的"循环直到完成"更复杂时,可以使用这种模式,例如在路由到多个代理之前对输入进行分类、并行分派工作,或使用确定性步骤将代理调用缝合在一起。
初学者易错点
- 中间件不是独立的运行时,而是在 LangGraph 内部运行
HumanInTheLoopMiddleware匹配每个工具的.name,在 Python 中,@tool装饰的函数从函数名获取名称- 中间件钩子会随着代理节点一起传递,包括在子图中的使用
相关词条
- create_agent: 创建代理的工厂函数
- LangGraph: 用于编排代理的运行时
- StateGraph: LangGraph 中的状态图
- tool: 代理可使用的工具
- middleware: 控制代理执行过程的中间件
- hooks: 中间件提供的扩展点