LangGraph 人工审核:暂停、批准、修改与恢复工作流
《Agent 大模型 0 到 1 系统课》 · 程序员 Sunday
你正在阅读本节的免费试读。完整课程 ¥499,可在文末添加作者微信购买。
上一小节,咱们解决了服务中断以后继续执行的问题。
不过,在演示文稿制作流程中,还有一种更常见的 暂停操作。
Agent 生成大纲以后,需要等待让用户确认(回一下之前学过的 Human-in-the-loop 的案例)。
那么想要实现这样的等待功能,咱们就必须要满足是三个条件:
- 第一:工作流可以在审核位置暂停
- 第二:暂停状态可以保存到数据库
- 第三:用户提交决定以后,可以继续原来的工作流
那么怎么做呢?
咱们来看下~
人工审核到底怎样暂停一条工作流
第四章的项目里面,咱们通过 Human-in-the-loop 实现过暂停操作:
当时的逻辑时,当 Agent 准备执行 delete_file 时,Runtime 会保存待执行的 Action,把 Run 状态改成 waiting_approval,然后通过 break 结束当前 Agent Loop
用户点击批准以后,服务端再把 Run 改回 running,重新调用 schedule(runId),让 execute() 继续执行。
这套暂停和恢复逻辑,是咱们在自定义 Agent Runtime 中手动实现的。
但是,它还有一个没有解决的问题。
那就是,当时的 RunStoreService 虽然会把 Run 写入工作区文件,但正在运行的任务主要保存在进程内的 Map 中,服务启动时也没有重新加载这些 Run。
所以,第四章实现的是:在服务仍然运行的情况下,暂停 Agent Loop,等待用户批准或者拒绝一个高风险 Action。
但是,咱们现在要处理的任务会持续更长时间。
大纲生成以后,用户可能过几个小时才回来审核。在等待期间,电脑可能都重启了。。。
所以,这一次需要实现的是:
把暂停位置、工作流 State 和待审核内容全部持久化。即使原来的服务进程已经结束,新的进程仍然可以恢复同一条工作流。
因此,这一小节不会重新讲一遍 Human-in-the-Loop 的基本概念。
咱们真正要学习的是:怎样把人工审核放进一条可以持久化的 LangGraph 工作流中。
那么,LangGraph 怎么让一条工作流持久化暂停呢?
这里就要使用到一个方法,叫做 interrupt() 中断
给大家写个伪代码,大家可以看下:
const decision = interrupt({
type: 'out本节试读已结束
继续学习,解锁完整课程
购买《Agent 大模型 0 到 1 系统课》,
继续阅读本节剩余内容与后续课程。
