9000张天气分类数据集实战:从数据清洗到模型上线全流程
2026/9/1 0:52:08
中断允许图执行在特定节点暂停,等待外部输入(如人类反馈)后再继续。这实现了“人机协同”模式,图会自动保存状态,直到被恢复。
在编译时配置,对特定节点生效:
graph.compile(interrupt_before=["node_a"],# 在node_a执行前中断interrupt_after=["node_b"]# 在node_b执行后中断)在节点内部通过interrupt()函数动态触发,更灵活。
interrupt()函数作用:暂停当前节点执行,返回resume值(当图恢复时)。
参数:接受任何可JSON序列化的值,作为中断信息。
行为:
resume值(来自Command),直接返回该值。GraphInterrupt异常,图暂停。示例:
defmy_node(state):# 执行一些操作...value=interrupt("请提供反馈")# 中断并等待输入# 使用value继续处理...return{"result":value}Interrupt类表示中断的元数据,包含:
value:中断时传递的值。id:中断的唯一标识符(默认自动生成)。Command类用于恢复图执行:
fromlanggraph.typesimportCommand# 恢复图,传递resume值command=Command(resume="用户反馈内容")graph.invoke(command,config)fromlanggraph.graphimportStateGraphfromlanggraph.typesimportCommand,interrupt# 定义图builder=StateGraph(dict)builder.add_node("human_review",lambdas:{"output":interrupt("等待审核")})builder.add_node("process",lambdas:{"final":s["output"]+" 处理完成"})builder.add_edge("__start__","human_review")builder.add_edge("human_review","process")graph=builder.compile()# 第一次调用:在human_review节点中断result=graph.invoke({})# result包含interrupt信息# 恢复图final_result=graph.invoke(Command(resume="审核通过"))interrupt()之前的代码会重新运行)。interrupt()前不要执行不可逆操作。Command(goto=...)进行路由,避免静态边与动态路由冲突。__interrupt__键,存储中断值。interrupt()调用都会按顺序处理。Command统一管理路由和恢复。