首页 > 编程语言 >LangGraph interrupt 实例教程

LangGraph interrupt 实例教程

来源:互联网 2026-07-24 08:17:46

LangGraph的interrupt机制实现工作流暂停与恢复,使Agent在节点处暴露状态并等待外部输入。它通过checkpoint持久化保存状态和执行位置,支持人工审批、高风险工具调用等场景,区别于普通return的结束行为,实现可持久化的状态机式长周期人机协同。

在LangGraph的体系里,interrupt机制是实现“人工介入”和“流程暂停/恢复”的核心工具。它允许一个正在运行的Agent工作流在某个节点上主动停下来,将当前状态和上下文完整暴露,等待外部输入,再从暂停处继续执行。

LangGraph interrupt 实例教程

长期稳定更新的攒劲资源: >>>点此立即查看<<<

可以将其理解为:

  • 调试器中的断点
  • 工作流引擎中的人工审批节点
  • 操作系统中的sleep后resume
  • 或分布式任务中的checkpoint加recovery

1. 为什么需要 interrupt?

传统Agent工作流是直线:用户请求 → LLM → 调用工具 → 返回结果。问题在于,一旦Agent做出危险操作(如直接删库),根本来不及人工干预。

例如:

用户: 帮我删除 AWS 上所有测试服务器
Agent: 调用 delete_server() 执行完成

可见,没有机会让人确认。

有了interrupt,流程变为:

用户请求 → Agent推理 → 准备调用delete_server() → interrupt() → 暂停 → 人工确认“是否真的删除” → 继续执行 → delete_server()

这正是关键:在危险操作前,提供了一个“踩刹车”的入口。


2. interrupt 的基本使用

代码层面,用法非常直接:

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}

然后流程恢复,继续执行。


3. interrupt 和普通 return 有什么区别?

普通return的节点,生命周期是:

node → return → 结束

一次性的,执行完即结束。

而interrupt的节点,生命周期分为两段:

第一次:

node → interrupt → 保存状态 → 暂停

第二次(恢复后):

恢复 → value = 用户输入 → 继续执行

这是本质区别:普通return是“结束”,interrupt是“暂停,等待续集”。


4. interrupt 的设计原理

核心思想可以用一句话概括:“可持久化的暂停点”

LangGraph本质上是一个图执行引擎,大致结构如下:

 +-------+
 | start |
 +---+---+
     |
     v
+----+----+
|  Agent  |
+----+----+
     |
     v
+----+----+
| Tool   |
+----+----+
     |
     v
    END

每个节点执行:State → Node → New State。状态不断变化,例如:

{
 "messages":["用户请求删除服务器"],
 "current_step":"tool_call"
}

当执行interrupt()时,LangGraph内部执行以下操作:

1. 保存当前 state

类似于:

checkpoint:{
 state:{
   messages:[...],
   current_node:"approval"
 }
}

2. 保存执行位置

记录当前停在哪个节点,下一步是什么:

graph position:node = approval_node
next_step = after_interrupt

3. 抛出特殊异常

内部相当于触发GraphInterrupt(),但这不是普通异常,而是专门用于暂停。

4. 等待 resume

外部通过调用:

Command(
    resume={"approved":True}
)

来唤醒。

5. 恢复执行

checkpoint → approval_node → interrupt返回值 → 继续执行


5. interrupt 为什么需要 checkpoint?

因为Agent可能运行很久。例如:

Agent:搜索网页 → 分析数据 → 调用数据库 → 生成报告 → 等待审批 → 发送邮件

审批可能5分钟后,也可能1天后,甚至一个月后。不能让服务一直等待,因为:

  • 服务可能重启
  • 机器可能挂掉
  • 内存会丢失

所以LangGraph使用checkpoint storage来持久化:

State + 执行位置 + 线程ID

例如:

thread_id=abc123
checkpoint:{
 node:"approval",
 state:{
    order_id:10001,
    amount:50000
 }
}

6. interrupt 和消息队列有什么区别?

不少人容易混淆这两个概念。

消息队列(MQ)解决的是“异步通信”和“削峰填谷”,例如Kafka、RabbitMQ。重点在于解耦生产者和消费者,确保消息不丢失。

而interrupt解决的是“有状态暂停和恢复”。它关注整个工作流的执行状态,特别是中间状态(state)的保存和恢复。例如:

订单流程:创建订单 → 付款 → interrupt → 人工审核 → 发货

这里interrupt之后,整个订单的状态都要保留,等审核结果回来再继续,这远不是MQ能单向传递的。


7. interrupt 在 Agent 中的典型场景

① 人工审批

这是最常见的:AI生成合同 → interrupt → 律师审核 → 继续签署。

② 高风险工具调用

AI准备执行“DELETE DATABASE”时,interrupt等待确认,给运维提供紧急刹车机会。

③ 信息补充

AI说“我要帮你订机票”,但缺少“出发城市”信息,通过interrupt向用户提问:“请输入出发城市”。

④ 多 Agent 协作

Planner Agent → Research Agent → interrupt(专家审核) → Writer Agent。interrupt在此充当不同角色之间的“交接点”。


8. interrupt 的核心设计理念

可总结为四点:

① 图执行模型

不是传统函数调用链,而是状态机(State Machine)。

② 可恢复计算

类似于数据库事务:begin → 执行 → checkpoint → commit。每一步都可以从中间状态恢复。

③ 长生命周期 Agent

普通LLM调用是秒级完成,而LangGraph的Agent可以跨越小时、天、甚至月。

④ 人机协同

不是“AI替代人”,而是“AI执行80%的常规工作,人只在关键节点做决策”。这是实际落地中最现实、最有价值的模式。


9. 和 LangChain Agent 的区别

传统LangChain Agent是一个循环:

while True:
    思考 → action → observation

状态主要在内存中,运行结束后即消失。

而LangGraph的Agent是:

State Graph Node → Checkpoint → Interrupt → Resume

这种设计更适合企业级应用:工作流自动化、审批流程、数据处理Pipeline。它专为“真正需要人工兜底”的复杂场景而生。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备14008430号-1 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。