一、核心事件:LangGraph 引入人工介入机制
LangGraph(LangChain 子项目)正式完善其 Interrupt 中断机制,允许 Agent 在执行流程中主动暂停、等待人工确认后再恢复执行。该功能无需等待额外版本发布,作为 LangGraph 核心能力已整合进当前主干版本,旨在解决 Agent 执行敏感操作时的安全 oversight 问题。
核心事实要点:
- 功能依赖项:必须配合 Checkpointer(检查点)机制保存暂停现场
- 恢复方式:通过
Command({ resume: "用户输入" })唤醒 - 多用户支持:需通过
thread_id区分不同用户的暂停任务 - 无并发冲突:不同线程的中断状态互不干扰
二、技术原理与工作流解析
Interrupt 在 LangGraph 中并非普通函数返回,而是一个协作式暂停点。当 GRAPH 执行流到达 interrupt() 调用时,发生三件事:
- 当前 State(包括所有字段快照)与执行位置被持久化到 Checkpointer
- Graph 返回带
__interrupt__字段的响应对象,标注暂停原因与上下文 - 外部用户收到暂停提示(如终端交互提示),输入确认后触发恢复
恢复机制依赖 Command API,它允许调用方将外部输入注入原暂停位置:
| |
这使得原 interrupt() 调用返回“确认”字符串,执行流得以继续。
关键设计哲学是“状态保存”而非普通函数暂停:过程中若系统崩溃或服务重启,恢复后仍能从断点继续,这是区别于传统 await input() 等异步暂停的核心优势。
三、典型应用场景与 State 设计
常见需人工介入的操作包括:转账、删除文件、发布文章、发送邮件、修改数据库。以转账案例为例,State 注解设计为:
| |
典型三节点流程:
- showTransfer 节点生成
actionSummary: "向张三转账 $100" - awaitConfirm 节点调用
interrupt({ actionSummary: state.actionSummary })暂停 - 用户输入确认后,Resume 节点接收
text="确认"并完成状态更新
四、落地建议
立即适合使用的场景:
- 金融操作类 Agent:需确认金额/账户/收款方的转账流程
- 系统运维工具:涉及文件删除、服务重启等高风险操作
- 内容管理系统:发布前需人工审核的文章流程
建议暂缓的场景:
- 单次调用超时严格受限的在线交互(中断会阻塞当前会话)
- 无持久化存储后端的轻量级 Agent 实现(Checkpointer 依赖存储介质)
写在最后
Interrupt 的引入标志着 LLM Agent 从“自动化优先”向“可控自动化”演进。当 Agent 不再默认执行所有操作,而是按风险等级触发人工校验,系统可靠性与用户信任度将同步提升——这正是生产级 Agent 安全架构的必经之路。
