Agent超时中断与人工确认恢复机制 - 第1节
1.1 确认点(Checkpoint)定义
确认点(Checkpoint)是 Agent 工作流中一个可中断且可恢复的持久化状态标记。当 Agent 执行到确认点时,系统会记录当前上下文(包括对话历史、中间变量、待办任务列表)并等待外部确认或超时计时。若超时未确认,该确认点允许回滚到上一个稳定状态,而非丢失全部进度。
| 特性 | 说明 |
|---|---|
| 持久化 | 确认点信息写入数据库或文件系统,进程重启后可恢复 |
| 幂等性 | 同一确认点多次回滚结果一致,不会产生副作用 |
| 可配置 | 超时时间、重试次数、中断策略均通过参数定义 |
| 上下文绑定 | 每个确认点关联唯一的 session_id 和 step_id |
关键区别:确认点不同于传统分布式事务中的“补偿操作”。确认点更轻量,只记录状态快照,不要求反向业务逻辑;超时后直接触发预设的 fallback 策略。
1.2 确认点与事务边界的关系
Agent 工作流中的事务边界定义了最小回滚单元。确认点通常落在事务边界上,二者关系如下:
- 一对一映射:一个事务边界内最多设置一个确认点,确保回滚粒度清晰。
- 嵌套事务支持:外部事务的确认点可以包含内部子事务的确认点,子确认点失败不影响父确认点的状态。
- 边界判定条件:事务边界一般由 I/O 操作、外部 API 调用、用户输入请求或资金变动触发,确认点在这些操作前插入。
| 事务边界类型 | 确认点插入时机 | 回滚效果 |
|---|---|---|
| 无状态查询 | 不需要确认点 | 无需回滚 |
| 幂等写操作 | 写之前 | 撤销未提交的写 |
| 非幂等外部调用 | 调用发起前及响应解析后 | 触发补偿调用 |
| 人工审批环节 | 提交审批前 | 退回待审批列表 |
1.3 确认点的生命周期
一个确认点从创建到销毁经历 5 个阶段,如下流程图所示。
生命周期各阶段详述
- 创建:Agent 引擎根据业务规则生成确认点 ID,分配元数据(时间戳、session_id、step_id),但尚未持久化上下文。
- 已就绪:引擎收集当前 Agent 的全部上下文(包括会话堆栈、局部变量、未提交的操作日志)并持久化到后端存储。此阶段完成后,确认点才具备回滚能力。
- 等待确认:确认点保持打开状态,启动超时计时器。外部系统(用户审批、下游服务回调)需在超时前发送确认信号。
- 已确认:收到确认信号后,引擎标记该确认点为“已确认”,释放关联的临时资源,并继续后续步骤。
- 已超时:计时器到期未收到确认,引擎自动回滚到最近的“已就绪”状态的确认点,恢复上下文快照,并触发预设的 fallback 策略(通常是重试或降级)。
- 回滚/完成:回滚完成后,该确认点生命周期结束,清理持久化数据;确认通过的确认点也在此阶段清理。
工程注意:生命周期的每个阶段都应记录日志(如
checkpoint_created、checkpoint_ack、checkpoint_timeout),以便在调试和排错时快速定位问题确认点。1.4 确认点的状态转换图(代码化定义)
以下是一个简化版确认点状态机的伪代码定义,用于指导后续实现:
state machine CheckpointFSM {
initial: CREATED
state CREATED {
on entry: assign_id(); set_metadata();
on event: save_context → READY
}
state READY {
on entry: persist_context();
on event: start_waiting → WAITING
}
state WAITING {
on entry: start_timer(timeout_ms);
on event: receive_ack → ACKNOWLEDGED
on event: timer_expired → TIMEOUT
}
state ACKNOWLEDGED {
on entry: release_resources();
on event: cleanup → FINAL
}
state TIMEOUT {
on entry: rollback_to_last_checkpoint();
on event: execute_fallback();
on event: cleanup → FINAL
}
state FINAL {
// 无出边,生命周期结束
}
}
常见误区:不要把确认点的“等待确认”阶段设计成同步阻塞模式。Agent 系统应采用异步事件驱动,避免单一确认点阻塞整个工作流。超时回调应独立于主执行线程。