主题
Agent 如何实现中断恢复并避免重复执行副作用工具?
题型:深入 · 关键是恢复点、一致性边界和工具幂等。
建议回答
中断时先持久化当前图节点、状态版本和待执行动作,再向前端发送可恢复的中断事件。恢复请求必须携带 runId 和 checkpointVersion,通过乐观锁防止同一运行被并发恢复。纯推理节点可以安全重算,但下单、发消息、写业务数据等副作用工具必须有 operationId 或 idempotencyKey,工具执行记录要区分准备、执行中、成功、失败和结果未知。
如果工具已成功但 Checkpoint 写入失败,恢复时不能直接重放,应先用 operationId 查询工具侧结果;若工具不支持幂等或结果查询,则把它标记为需要人工确认。图版本发生变化时,应按旧版本恢复或执行明确的状态迁移,不能把旧状态直接塞进新图。
一致性选择
- 重要副作用:优先业务幂等、状态机和结果查询。
- Checkpoint:节点前后按风险选择保存点,不机械地每个 Token 持久化。
- 人工审批:审批结果也要作为状态事件持久化并审计。
易错点
- Exactly-once 通常不能靠 Agent Runtime 单方面保证。
- 重试模型调用与重试副作用工具的风险完全不同。