长任务 Agent 怎样暂停和恢复:检查点必须对应真实业务结果

以设备巡检汇总与维修工单为演练,设计持久检查点、等待状态、幂等请求和结果核对,避免恢复任务时重复执行外部动作。

可恢复任务的四步处理:保存状态(阶段、版本与证据、记下待处理事项);标记外部动作(稳定请求标识、区分未知与完成);恢复前查询(核对权威业务结果、重验权限与条件);继续或转交(只做未完成动作、记录新的检查点)
原创示意:恢复流程与外部系统状态需要共同核对。为本文原创示意图,不代表产品界面或客户案例。

先说结论

长任务检查点应持久保存任务目标、阶段、版本、证据引用、待处理决定及外部动作记录。恢复时先验证身份与状态版本,查询已提交动作的权威结果,再决定继续、等待或转交。业务写入使用稳定请求标识与服务端幂等契约;框架检查点并不能自动保证外部动作只发生一次。

读完你会得到

  • 检查点描述已完成什么,以及哪些外部结果仍未知。
  • 暂停后恢复可能重新运行代码,写入和通知必须考虑重复执行。
  • 取消任务只停止后续动作,已发生副作用需要业务撤销或补偿。

巡检助手花了很久整理报告,创建维修工单后断线。重启后它只记得“还没收到工单编号”,于是又创建了一次。保存聊天历史能帮助继续讨论,却无法独自证明外部系统发生了什么。本文把长任务恢复分成状态恢复和业务结果核对。

配套资料与延伸阅读

先把长任务拆成可核对的阶段

设备巡检演练分成接收记录、核对缺项、整理异常、生成报告、提交维修工单和通知负责人。每个阶段有明确输入与完成条件。报告生成完成,并不代表工单已经受理;通知文本生成完成,也不代表负责人已经收到。

LangGraph 的中断文档要求用检查点保存状态,并通过同一线程标识恢复任务。生产需要持久的检查点存储。文档同时提醒,恢复会重新运行中断所在节点开头的代码。本文的巡检状态与业务请求表是独立设计,可用于其他持久任务系统。

选择检查点位置时考虑实际代价和外部影响。耗时检索结束后保存资料引用,人工等待前保存候选,外部提交前后记录动作状态。没有必要把每一句模型输出都做成一个业务阶段。

本节依据: [1] LangChain

检查点里需要哪些可继续处理的信息

巡检任务检查点示例
字段记录内容恢复时用途
任务目标与范围设备范围、报告用途、排除项防止恢复后扩大任务
阶段与状态版本当前节点、版本、更新时间判断旧进程和旧页面是否过时
资料与证据引用巡检记录标识、版本、来源位置按需重新读取,核对变化
候选与未决事项异常清单版本、缺项及等待负责人知道仍需谁提供什么
外部动作记录动作类型、稳定请求号、参数版本、状态查询是否已经产生业务结果
运行条件权限引用、截止条件、取消标记避免按过期授权继续执行

不要把秘密值放进检查点。保存受控凭证引用,恢复时重新取得合法访问能力。检查点也含业务资料和摘要,需要按任务权限保护,设置保留和清理规则。文件存在不等于任何人都能拿来恢复任务。

区分业务状态与运行进度

动作记录可以采用准备、提交中、已完成、明确失败和结果未知等状态,具体名称由系统约定。“节点跑完”仅描述程序,无法代替外部服务的完成证据。每个状态变化保存相关业务标识,方便查询。

提交前先记录稳定的业务请求标识,提交后保存外部响应与对象编号。若响应丢失,将状态标记为未知,恢复时按请求标识或业务对象查询。外部系统不支持查询时,需转入人工核对或明确的异常流程,不能让模型猜测是否成功。

同一个动作发生重试时沿用对应的标识,业务参数改变则表达为新的意图,不能混在旧重试里。动作记录的持久化与外部提交之间通常存在失败窗口,要在设计和测试中明确面对它。

并发恢复需要服务端执行约束:恢复者通过条件更新或任务租约取得执行权,旧进程与并发恢复请求不能覆盖新状态。任务锁或租约必须与版本校验共同工作,外部执行前仍检查当前执行资格;仅保存 version 字段不能阻止陈旧进程继续写入。

幂等性由业务接口契约保证

AWS 的幂等 API 文章说明,调用方提供的请求标识可帮助服务识别重复意图;相同标识却不同参数要单独处理。它也讨论幂等记录与业务变更保持一致的重要性。给调用加一个 requestId 字段,只有服务端真正执行去重和一致性规则时才有作用。

在维修工单演练中,首次请求和重试都带同一个请求标识,服务返回相同业务含义的结果,或能够查到同一工单。需要定义标识范围、有效期限和相同标识参数不一致的处理方式,避免隔了很久又被当作新请求。

暂停前后的写入、通知和附件上传都要考虑重复执行。把副作用放在独立节点更易理解,但进程可能在提交后、保存结果前失败,仍需幂等接口或查询核对。检查点恢复本身不能承诺分布式系统中的所有副作用恰好一次。

本节依据: [2] Amazon Web Services [1] LangChain

在四个失败点做恢复演练

巡检任务恢复测试

  1. 报告生成后退出进程

    重新启动并读取检查点,确认已完成报告可用,缺失材料仍正确列出。

    产出:恢复后的阶段与报告版本
  2. 工单提交前退出

    确认恢复后只提交批准范围内的候选,使用已记录的动作标识。

    产出:提交参数与请求号
  3. 工单受理后丢失响应

    模拟业务成功而客户端超时,先查询原请求结果再继续通知。

    产出:外部对象编号与动作次数
  4. 通知后未保存结果就退出

    重跑时使用通知接口的去重方式,或根据发送记录核对;不支持时转交。

    产出:通知记录及处理结论

每次演练检查外部对象数量和内容,而非只看程序有没有报错。状态恢复正常却出现两张维修工单,说明任务仍不能安全恢复。保留失败点、配置版本和实际结果,让维护人员可以复现。

等待、取消与版本更新怎样处理

人工等待需记录等待谁、等待什么、何时超时和超时后做什么。框架可以无限等待,业务不能默认无限等待:设备状态、负责人和资料版本都会变化。恢复时核对这些条件,过期候选按规则重新确认。

取消任务要有可检查的标记,执行服务在下一次有影响的动作前验证。已完成的工单不会因取消标记消失;需要调用业务撤销流程,记录是否可撤销及失败后的接管人。补偿动作也可能失败,应有独立状态。

部署新版本时,先确认旧检查点能否被新流程解释。对于无法兼容的状态,保留旧执行版本或提供受控迁移,避免直接从新版本的同名节点继续。恢复页面要显示实际任务状态,而不是沿用用户打开时的旧进度。

没有持久任务平台时如何先做小范围实践

可以先为一条流程建立持久状态表和动作表,使用隔离业务接口验证重启恢复,再按需要引入框架。状态记录、权限校验和幂等契约仍需由团队落实,不能因为安装了框架就省略。

这一方法适合耗时检索、批量整理、人工等待和外部写入结合的任务。简单的一次性公开问答可以轻量处理。先从一个可查询结果的外部动作开始,明确恢复与接管路径,再扩展到多个系统。

常见问题

把聊天记录保存在数据库,是否就可以恢复 Agent?

聊天记录有助于还原上下文,但还需明确任务阶段、版本、待办和外部动作状态。业务结果应从权威服务核对,不能只根据历史消息判断。

把写工具放在暂停之后,是否就不会重复执行?

这样可减少暂停前重跑的问题,但提交后进程仍可能在保存结果前失败。外部接口需要幂等契约或可查询结果,恢复时核对原请求。

资料来源与核对说明

文章中的行业定义与技术方法尽量引用官方或标准组织资料;表格、清单和决策框架是基于这些资料形成的编辑性整理,不代表来源机构对本站服务的背书。

  1. InterruptsLangChain

    文档指出恢复时节点重启,暂停前副作用须幂等。本文持久任务流程不依赖特定框架版本。

  2. Making retries safe with idempotent APIsAmazon Web Services

    用于调用方请求标识、相同标识不同意图、幂等记录与业务变更的一致性;订单例子为本文演练。

把文章方法用于你的真实业务

带上流程、样例和目标,添加企业微信沟通。先确定项目范围与验收方式,再安排实施。

查看企业 AI / FDE 服务 →
相机、麦克风和布光台上的雕塑,表现图片、视频与声音的创作
AI 生成 · 内容创作场景示意

把你正在做的事,
拿来一起聊聊。

还没有完整方案也没关系。选一个方向,带着下面几条信息联系团队,我们先了解问题,再确认下一步。

企业 AI / FDE 项目

先从一段具体流程说起。

  • 我们目前怎样完成这项工作?
  • 哪一步最费时间,或经常出错?
  • 已有的资料、系统和期望结果是什么?
Shopify 建站与经营

有店铺的话,可以一并发来链接。

  • 店铺是准备上线,还是已经在运营?
  • 销售什么商品,面向哪些市场?
  • 希望先解决哪个页面或经营问题?
内容创作与工具使用

说明准备制作的内容,或遇到的操作问题。

  • 想做图片、视频、配音,还是图文?
  • 已有素材、参考风格和使用场景是什么?
  • 如果使用时遇到问题,具体停在哪一步?
扫码添加随心创技术客服企业微信

微信扫码,发来你的问题

可以直接按提纲描述,也可以先发一句话。人工服务会在确认范围后单独报价。

手机上可保存二维码后识别。