LangGraph的interrupt机制实现工作流暂停与恢复,使Agent在节点处暴露状态并等待外部输入。它通过checkpoint持久化保存状态和执行位置,支持人工审批、高风险工具调用等场景,区别于普通return的结束行为,实现可持久化的状态机式长周期人机协同。
在LangGraph的体系里,interrupt机制是实现“人工介入”和“流程暂停/恢复”的核心工具。它允许一个正在运行的Agent工作流在某个节点上主动停下来,将当前状态和上下文完整暴露,等待外部输入,再从暂停处继续执行。

长期稳定更新的攒劲资源: >>>点此立即查看<<<
可以将其理解为:
传统Agent工作流是直线:用户请求 → LLM → 调用工具 → 返回结果。问题在于,一旦Agent做出危险操作(如直接删库),根本来不及人工干预。
例如:
用户: 帮我删除 AWS 上所有测试服务器
Agent: 调用 delete_server() 执行完成
可见,没有机会让人确认。
有了interrupt,流程变为:
用户请求 → Agent推理 → 准备调用delete_server() → interrupt() → 暂停 → 人工确认“是否真的删除” → 继续执行 → delete_server()
这正是关键:在危险操作前,提供了一个“踩刹车”的入口。
代码层面,用法非常直接:
from langgraph.types import interrupt
def approval_node(state):
answer = interrupt(
{
"question": "是否允许执行删除操作",
"action": "delete_user"
}
)
if answer["approved"]:
return {"result": "执行删除"}
return {"result": "取消删除"}
当执行到interrupt(...)时,整个流程暂停。它返回一个结构:
{
"question":"是否允许执行删除操作",
"action":"delete_user"
}
外部系统看到后,可展示界面:
是否允许执行删除操作 [允许] [拒绝]
用户点击“允许”,传回:
{"approved":true}
然后流程恢复,继续执行。
普通return的节点,生命周期是:
node → return → 结束
一次性的,执行完即结束。
而interrupt的节点,生命周期分为两段:
第一次:
node → interrupt → 保存状态 → 暂停
第二次(恢复后):
恢复 → value = 用户输入 → 继续执行
这是本质区别:普通return是“结束”,interrupt是“暂停,等待续集”。
核心思想可以用一句话概括:“可持久化的暂停点”。
LangGraph本质上是一个图执行引擎,大致结构如下:
+-------+
| start |
+---+---+
|
v
+----+----+
| Agent |
+----+----+
|
v
+----+----+
| Tool |
+----+----+
|
v
END
每个节点执行:State → Node → New State。状态不断变化,例如:
{
"messages":["用户请求删除服务器"],
"current_step":"tool_call"
}
当执行interrupt()时,LangGraph内部执行以下操作:
类似于:
checkpoint:{
state:{
messages:[...],
current_node:"approval"
}
}
记录当前停在哪个节点,下一步是什么:
graph position:node = approval_node
next_step = after_interrupt
内部相当于触发GraphInterrupt(),但这不是普通异常,而是专门用于暂停。
外部通过调用:
Command(
resume={"approved":True}
)
来唤醒。
checkpoint → approval_node → interrupt返回值 → 继续执行
因为Agent可能运行很久。例如:
Agent:搜索网页 → 分析数据 → 调用数据库 → 生成报告 → 等待审批 → 发送邮件
审批可能5分钟后,也可能1天后,甚至一个月后。不能让服务一直等待,因为:
所以LangGraph使用checkpoint storage来持久化:
State + 执行位置 + 线程ID
例如:
thread_id=abc123
checkpoint:{
node:"approval",
state:{
order_id:10001,
amount:50000
}
}
不少人容易混淆这两个概念。
消息队列(MQ)解决的是“异步通信”和“削峰填谷”,例如Kafka、RabbitMQ。重点在于解耦生产者和消费者,确保消息不丢失。
而interrupt解决的是“有状态暂停和恢复”。它关注整个工作流的执行状态,特别是中间状态(state)的保存和恢复。例如:
订单流程:创建订单 → 付款 → interrupt → 人工审核 → 发货
这里interrupt之后,整个订单的状态都要保留,等审核结果回来再继续,这远不是MQ能单向传递的。
这是最常见的:AI生成合同 → interrupt → 律师审核 → 继续签署。
AI准备执行“DELETE DATABASE”时,interrupt等待确认,给运维提供紧急刹车机会。
AI说“我要帮你订机票”,但缺少“出发城市”信息,通过interrupt向用户提问:“请输入出发城市”。
Planner Agent → Research Agent → interrupt(专家审核) → Writer Agent。interrupt在此充当不同角色之间的“交接点”。
可总结为四点:
不是传统函数调用链,而是状态机(State Machine)。
类似于数据库事务:begin → 执行 → checkpoint → commit。每一步都可以从中间状态恢复。
普通LLM调用是秒级完成,而LangGraph的Agent可以跨越小时、天、甚至月。
不是“AI替代人”,而是“AI执行80%的常规工作,人只在关键节点做决策”。这是实际落地中最现实、最有价值的模式。
传统LangChain Agent是一个循环:
while True:
思考 → action → observation
状态主要在内存中,运行结束后即消失。
而LangGraph的Agent是:
State Graph Node → Checkpoint → Interrupt → Resume
这种设计更适合企业级应用:工作流自动化、审批流程、数据处理Pipeline。它专为“真正需要人工兜底”的复杂场景而生。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述