Skip to content
预计 1 分钟右侧目录可快速定位

哪些 Runtime 事实必须持久化:Tool、Checkpoint 与 Approval ​

前置:Runtime 事实怎么落表:Run、Node Execution 与 Attempt Identity
核心问题:Tool 已成功、Checkpoint 未提交或 Approval 等待跨进程时,哪些记录必须持久化才能在恢复时判断真实状态?

三类记录分别回答三个问题 ​

text
ToolExecution → 这次 logical operation 到底执行到哪里?
Checkpoint    → Runtime 能从哪个一致状态恢复?
Approval      → 谁批准/拒绝了哪个具体动作版本?

它们可以存在同一个数据库,但不能压成一个含糊的 run_state.json,否则 retry、resume 和 audit 都很难独立判断事实。

Tool Execution Record:保存 Attempt 与 External Identity ​

核心字段通常包括:

text
operation_id
attempt_id
run_id / node_id
tool_name / schema_version
args_hash
status
remote_request_id / result_ref
normalized_error
started_at / finished_at

例如支付请求 timeout 后,Runtime 可以利用稳定 operation_id 或 provider request id 查询远端状态,判断是 retry、reuse result 还是进入 reconciliation。

Checkpoint:保存一致恢复切片,不是随手 dump dict ​

Checkpoint 通常需要:

text
run_id / checkpoint_id
parent_checkpoint
state_version / schema_version
completed + pending state
payload/ref
created_at

如果 checkpoint 声称 Node 已完成,但对应 ToolExecution completion 还没有形成 durable fact,恢复时就会出现“快照认为做过、执行记录却无法证明”的矛盾。因此 Checkpoint Store 必须服从 Runtime 的 commit protocol,而不是独立定时保存任意内存对象。

Approval:必须绑定到具体 Action Version ​

审批不是浏览器里一个等待中的 Promise。至少要保存 proposed action/hash、关键参数版本、requester/approver、decision、edited args、expiry 和关联 operation/checkpoint。

例如用户批准的是:

text
deploy artifact=v7 to staging

之后 artifact 已变成 v8,就不能复用旧 approval。Action identity/version 变化意味着需要重新验证甚至重新审批。

一个 Crash Window 怎么依赖这三类记录 ​

text
approval APPROVED(op-9)
→ Tool attempt started(op-9, attempt-1)
→ remote deploy succeeded
→ CRASH before local completion

恢复时不能只看 checkpoint 然后重新 deploy。Runtime 应读取 Approval + ToolExecution identity,查询/对账远端 op-9,确认已经成功后补写 completion,再生成新的可恢复 checkpoint。

这也是为什么“数据已经持久化”不等于“系统已经形成安全恢复边界”。表结构必须支持中间事实和未知结果。

如何验证 ​

场景必须成立
Tool timeout 后进程重启operation/attempt identity 仍可用于 reconciliation
Approval 后 action 参数改变旧 approval 不能直接授权新 action
Checkpoint 写入前 crash恢复根据 durable execution facts 判断,不凭内存状态猜测
两小时等待后新 Worker resumeApproval/Checkpoint 都能独立读取并关联同一 Run/operation

自测 ​

  1. ToolCall、Checkpoint、Approval 都要持久化,但它们的生命周期和 authority 不同。为什么不能塞进一个 JSON blob 就结束?
  2. 恢复时 pending approval 与已执行 Tool 记录冲突,哪类记录必须先被 reconciliation?

Sources ​

AI Engineering · Agent · Harness · Backend Systems