可中断可恢复的Agent任务执行机制如何设计?

类似Codex的智能Agent在执行任务过程中,用户可发送打断指令使其立即中断当前任务,后续用户发送继续任务指令时,Agent可恢复执行之前被中断的任务,该机制应如何设计?

1 个回答

  • 叶家少主
    世界上没有快乐的地方,只有快乐的人。
    ## 作用 可中断、可恢复的 Agent 任务执行机制,本质上是把 Agent 的长运行任务从“内存中的一次性执行”改造成“可持久化、可暂停、可重放的工作流”。这样可以支持: - 用户主动打断当前任务; - 进程崩溃、重启、扩缩容后继续执行; - 任务运行数分钟、数小时甚至数天; - 在人工审批、用户确认等场景下暂停,并在收到响应后恢复; - 从最后一个可靠状态继续,而不是从头重新执行。 ## 原理 ### 1. 使用持久化工作流运行时 - 将 Agent 编排接入类似 Durable Task 的持久化运行时; - 由调度器统一保存工作流状态、编排历史和执行进度; - Agent 的每一步不再只依赖进程内存,而是由外部持久化运行时管理; - 当进程重启或任务被重新调度时,运行时根据历史记录恢复执行上下文。 ### 2. 在执行步骤后保存检查点 - 将任务拆成多个明确的 Executor 步骤; - 每个步骤执行完成后自动保存检查点; - 检查点中应包含当前工作流状态、已完成步骤、步骤输出、等待事件、任务上下文等信息; - 中断或故障后,从最后一个已提交的检查点继续,避免重复执行已完成步骤。 ### 3. 用事件表示“打断”和“继续” - 用户的打断指令可作为外部取消事件发送给工作流; - Agent 在安全点停止当前执行,并把当前状态持久化; - 用户的继续指令作为恢复事件传入同一个任务实例; - 工作流运行时加载检查点和编排历史,然后继续执行剩余步骤。 ### 4. 支持暂停等待外部输入 - 可通过类似 `RequestPort.Create()` 的机制创建等待外部响应的节点; - 工作流执行到该节点时进入暂停状态; - 暂停期间状态被持久化,不依赖当前连接或进程; - 当用户审批、补充信息或发送继续指令后,事件写入运行时,工作流自动恢复。 ### 5. 支持长任务编排能力 该机制还应支持复杂 Agent 任务所需的编排模式: - **长运行**:任务可以跨进程、跨会话持续运行; - **Fan-out/Fan-in**:多个智能体或工具并行处理,再汇聚结果; - **条件分支**:根据前序步骤输出动态选择后续路径,例如通过 `AddSwitch` 做路由; - **监控管理**:通过运行时 Dashboard 查看执行进度、历史和状态。 ### 6. 恢复时依赖历史重放 持久化工作流通常会通过编排历史进行恢复: - 已完成的步骤根据历史记录确认结果; - 未完成的步骤重新调度执行; - 正在等待用户输入的步骤继续等待对应事件; - 从而保证任务在中断后仍能沿着原计划或根据新的用户指令继续推进。 核心设计可以概括为:**将 Agent 任务建模为持久化工作流,以步骤检查点保存状态,以外部事件驱动暂停、打断与恢复,并由 Durable Task Scheduler 这类运行时负责状态存储、历史管理和重新调度。**
    发布于 2026-10-23 18:35 •IP属地 新疆
    举报
    评论
    收藏