把长任务做成可恢复:断点、幂等与进度可见

人工智能 · 2026-10-07

长任务必须有可恢复、幂等、进度可见三件事。本文给出断点续跑的具体做法(拆步、落盘、输入指纹)、幂等键与两阶段副作用、进度展示要点,以及四个常见错误。


长任务的三个必备能力

生成一份长报告、批量处理上千条数据、跑多轮工具调用——这类**长任务**失败是常态。

要让用户敢用,必须具备三件事:**可恢复、幂等、进度可见**。

一、可恢复(断点续跑)

  • 把任务拆成**可独立完成的步骤**,每步产出一个可持久化的中间结果;
  • 记录"已完成到第几步"(检查点),失败后从检查点继续,而不是从头再来;
  • **中间结果要落盘**(数据库/对象存储),不要只留在内存里;
  • 检查点要带**输入指纹**:输入变了就不能复用旧中间结果,否则会错。
  • 实践上最有价值的一条:**让每一步都能单独重跑**(本地也能重跑),调试与恢复都靠它。

    二、幂等(重复执行不出错)

    长任务必然遇到重试与并发,幂等是底线:

  • 每步用**业务唯一键**(不是随机 id)作为幂等键;
  • 写操作采用 upsert 语义;
  • 外部副作用(发信、扣费、调用第三方)放到最后,或用"先记录意图、再执行、再确认"的两阶段方式;
  • 允许"至少执行一次",但保证"结果一致"。
  • 三、进度可见

  • 对外暴露**阶段**(准备 → 处理 12/50 → 汇总)而不是一个转圈;
  • 阶段名称要**人话**("正在解析第 3 份文件"比 "processing" 有用);
  • 提供已用时与预计剩余(粗一点没关系,关键是"在动");
  • 失败时给出**明确的失败点**与可执行的建议(重试 / 跳过 / 人工处理)。
  • 常见的四个错

  • 全部放在一个 HTTP 请求里跑(超时、断连就全丢);
  • 中间结果只存内存(进程一重启前功尽弃);
  • 无幂等键 → 重试后数据翻倍;
  • 进度只写日志不返回给前端(用户不知道在动,只好反复点重试 → 加重负载)。
  • 落地顺序

    1. 先把任务**拆步**并落盘中间结果(这一步收益最大);

    2. 加幂等键与 upsert;

    3. 暴露阶段进度与失败点;

    4. 加一个"从检查点恢复"的按钮,并演练一次真恢复。

    想要你的品牌在AI回答里被推荐?

    免费诊断 →