当 Agent 开始调用真实工具,自动化就不再只是流程效率问题。、发送邮件、删除文件等操作一旦判断失误,往往难以撤回。LangGraph 提供的 Interrupt 可以在关键节点暂停工作流,保存当前状态并等待人工输入,随后再从原位置继续执行。
前面我们已经解决了:
但是实际 Agent 还有一个重要问题:
不是所有事情都应该让 Agent 自动完成。
有些操作需要人确认。
例如:
这时候就需要:
Human-in-the-loop(人在循环中)
假设一个自动 Agent:
用户:
帮我给张三100元
Agent:
调用工具
完成
如果 Agent 判断错误:
转错账户
转错金额
后果很严重。
所以更合理:
用户
↓
Agent准备执行
↓
暂停
↓
用户确认
↓
继续执行
LangGraph 提供:
interrupt()
它的作用:
暂停当前 Graph 执行,并等待外部输入。
例如:
const awaitConfirm = (state)=>{
const input = interrupt({
action:"向张三100元"
});
}
执行:
Node
↓
interrupt()
↓
暂停
注意:
interrupt 不是普通函数返回。
它不会:
return "等待"
而是:
暂停 Graph
此时:
当前 State
+
当前执行位置
需要保存。
所以:
interrupt
必须依赖
checkpointer
State:
const StateAnnotation = Annotation.Root({
actionSummary:Annotation({
reducer:(prev,next)=>next,
default:()=> ""
}),
userInput:Annotation({
reducer:(prev,next)=>next,
default:()=> ""
})
});
保存两个数据:
actionSummary
用户要确认的动作
userInput
用户输入
const showTransfer = ()=>({
actionSummary:
"向张三 $100"
});
执行:
State:
{
actionSummary:
"向张三 $100"
}
const awaitConfirm=(state)=>{
const text=interrupt({
actionSummary:
state.actionSummary
});
return {
userInput:text
}
}
读取:
state.actionSummary
得到:
向张三 $100
然后:
interrupt()
暂停。
第一次:
await graph.invoke({},config)
执行:
START
↓
showTransfer
↓
awaitConfirm
↓
interrupt暂停
返回:
类似:
{
__interrupt__:[
{
value:{
actionSummary:
"向张三 $100"
}
}
]
}
此时:
Agent 等待用户。
例如:
终端:
是否确认?
> 确认
恢复需要:
Command
例如:
await graph.invoke(
new Command({
resume:"确认"
}),
config
);
含义:
告诉 LangGraph:
上次暂停的位置继续执行,并把这个值交给 interrupt。
恢复后:
原来的:
const text = interrupt(...)
会得到:
text="确认"
然后继续:
return {
userInput:"确认"
}
最终:
{
actionSummary:
"向张三 $100",
userInput:
"确认"
}
流程结束。
因为可能有很多用户同时暂停:
例如:
用户A:
等待确认
用户B:
等待确认删除文件
LangGraph 必须知道:
恢复哪个任务。
所以:
{
configurable:{
thread_id:"user-a"
}
}
表示:
恢复 user-a 的那一次执行。
用户请求
↓
Agent执行
↓
准备执行危险操作
↓
interrupt()
↓
保存 State + 执行位置
↓
等待用户
↓
Command(resume)
↓
恢复 Graph
↓
继续执行
↓
结束
普通代码:
function test(){
console.log("开始");
await input();
console.log("继续");
}
如果程序关闭:
状态没了。
LangGraph:
interrupt
↓
checkpointer保存现场
↓
之后恢复
它保存的是:
所以它适合长流程 Agent。
现在完整模型:
State
↓
START
↓
Node
↓
Edge
↓
Conditional Edge
↓
Loop
↓
Checkpointer
↓
Interrupt
↓
Resume
↓
END
一句话:
Interrupt 让 LangGraph 支持人工介入,它可以暂停 Agent 工作流,保存当前状态,等待用户输入后继续执行,是构建安全可靠 Agent 系统的重要能力。
从会议录音整理出可编辑的 Visio 流程图
借助 AI 将 Swagger 文档自动生成 TypeScript 类型与请求函数
Debian11电脑锁屏快捷键是什么? Debian11锁定电脑屏幕的三种方法
Ubuntu 21.10等旧版本升级Ubuntu 22.04 LTS的操作方法
conda环境下ubuntu 20.04 jupyter添加或删除内核的方法
Ubuntu怎么换壁纸? Ubuntu中设置自己照片为桌面的技巧