人机协同:用 interrupt 把控制权交给你
个人主页 for_ever_love__ 欢迎各位大佬莅临其他栏目: 大模型开发从0到1 其他栏目: iOS项目总结大全 其他栏目: 我想学python了 其他栏目: iOS UI 文章目录人机协同用 interrupt 把控制权交给你一、在节点里调用 interrupt二、第一次跑图停在中断处三、人给答复用 Command 恢复四、为什么比「在外面 if 判断」好人机协同用 interrupt 把控制权交给你很多 Agent 场景不能让模型「自己一路跑到黑」发邮件前要确认、执行删除前要授权、关键决策要人拍板。LangGraph 用interrupt中断机制让图在某个节点暂停、把控制权交还给调用方等人给出答复后再继续。一、在节点里调用 interruptfromlanggraph.typesimportinterrupt,Commandfromlanggraph.graphimportStateGraph,START,END,MessagesStatefromlanggraph.checkpoint.memoryimportMemorySaverfromlangchain_core.messagesimportHumanMessage,AIMessagedefhuman_review(state:MessagesState):# 运行到这里会暂停把问题抛给外部decisioninterrupt({question:确定要发送这封邮件吗})return{messages:[AIMessage(contentf人类决定{decision})]}graphStateGraph(MessagesState)graph.add_node(human_review,human_review)graph.add_edge(START,human_review)graph.add_edge(human_review,END)appgraph.compile(checkpointerMemorySaver())cfg{configurable:{thread_id:h-1}}二、第一次跑图停在中断处app.invoke({messages:[HumanMessage(content发邮件给老板)]},cfg)# 图在这里暂停human_review 还没返回此时app.get_state(cfg).next会是(human_review,)表示正卡在这个节点。三、人给答复用 Command 恢复app.invoke(Command(resume确认发送),cfg)# human_review 里的 interrupt 收到 确认发送节点继续执行Command(resume...)把人输入的值塞回interrupt的返回值节点从这行往下跑完图正常结束。四、为什么比「在外面 if 判断」好把「等待人」做成图里的一个节点有几个实在好处状态被 Checkpointer 完整保存重启后还能 resume暂停点清晰可追溯多个中断点可以同时存在于不同分支。它把「人机交互」从脚本外的胶水代码变成图的一等公民。典型用法敏感操作前interrupt要授权、生成结果后interrupt让人审核、工具调用前interrupt让人改参数。让人在最关键的地方点一下比全自动驾驶稳得多。