淘天以检查点和任务摘流恢复直播Agent长程任务
概述
直播技术业务的多个 Agent 服务涉及长程任务、A2A 多 Agent 协同与人机协作三类场景,对中断恢复有强需求。团队放弃「蓝绿发布 + 摘流等待」的基建方案(长程任务耗时不可控、旧机器长驻成本高、覆盖不全),改从应用层做断点续传:底层完全基于 SAA 1.1.2.0 已有能力,不修改任何框架源码以避免维护私有 fork,通过扩展 InterruptableAction 与 Hook 机制注入自定义逻辑——GraphEnvironmentMonitor 检测应用内关机信号共享变量(下线脚本先调 /check/shutdown/signal 接口置位,Agent 在当前节点完成后触发中断并保存 Checkpoint)。 ResumeMessageOrderHook 在 BEFORE_MODEL 阶段修正恢复时用户新消息被插到列表首位导致上下文错乱的框架 bug(社区已在 issue 4662 修复,旧版本可用该 Hook 绕过)。ToolRecordInterceptor 在中断时让未执行工具返回 status=error 的 mock 响应并随 Checkpoint 保存,恢复时已完成工具不重跑、mock 工具重新执行,解决多工具调用 for 循环中间不保存 Checkpoint 导致的全部重跑。 CheckpointAgentHook.beforeAgent() 把原始 threadId 写入 metadata,解决子图 threadId 被拼 _subgraph_ 后缀导致的中断失效与状态查询不一致。上层调度用 agent_task 任务表记录 Agent 类型、业务关联键与会话 ID,并在下线脚本中先调 MQ 客户端 allConsumersOffline 摘流再停应用,保证关机机器不再消费新消息。 恢复由 MQ 消息触发,读 DB 状态 → 从 Checkpoint 恢复框架状态 → 从中断节点继续。