题目
LangGraph 中断后恢复时,哪些代码可能重新执行,如何保护外部副作用?
答案
使用 `interrupt()` 的节点恢复时,会从该节点开头重新执行,而不是从中断的那一行继续。因此中断前的发邮件、写数据库等代码可能再次运行。 若父节点调用子图,子图内部发生中断,恢复时父节点中调用子图之前的代码也可能重新执行。设计时不能把普通函数调用当作天然只执行一次的边界。 更稳妥的做法是先获取审批,再进入独立的执行步骤;对必须提前执行的动作使用稳定幂等键、持久化回执和状态查询。不要用会吞掉中断信号的通用异常捕获把 `interrupt()` 包住。 恢复应使用相同线程标识,并按框架要求通过 `Command(resume=...)` 提供输入。保持中断顺序和状态版本兼容,部署升级后尤其要测试旧任务恢复。 ![中断恢复可能从节点开头重新执行](https://cs-wiki.oss-cn-shanghai.aliyuncs.com/question/agent-development/extra-interrupt-replay-4b7b16d2d206d2ae.png) 参考:[LangGraph 中断与恢复](https://docs.langchain.com/oss/python/langgraph/interrupts)。