如何实现 Agent Checkpoint?
长任务一定会中断。
浏览器刷新。进程崩溃。网络断开。模型请求失败。用户临时离开。工具超时。机器重启。
这些都不稀奇。
真正危险的是:Agent 中断后从头再来。
从头再来听起来只是浪费时间。实际更麻烦:
- 已经写过的文件又写一次。
- 已经发出的请求又发一次。
- 用户已经拒绝的权限又问一次。
- 上次测试失败的证据丢了。
- 用户在中断后手动改了文件,Agent 恢复时覆盖掉。
所以 Agent Runtime 需要 checkpoint。
但 checkpoint 不是保存聊天记录。
Checkpoint 保存的是一致性。
聊天记录不是 checkpoint
很多系统第一次做 resume,会保存 message history。
这只能解决一小部分问题。
聊天记录能告诉模型'刚才说了什么',但不能告诉 runtime:
哪些工具已经开始执行?
哪些工具已经成功?
哪些工具状态不确定?
哪些文件被 Agent 改过?
用户批准了哪个高风险动作?
哪个工具不能重放?
当前 trace 写到哪里?
预算还剩多少?
没有这些信息,恢复就只能靠模型猜。
让模型猜恢复状态,是很糟糕的设计。
一个 checkpoint 至少包含什么
一个可用 checkpoint 至少要有:
type Checkpoint = {
id: string;
runId: string;
stepId: string;
createdAt: string;
messagesRef: string;
runState: RunStateSnapshot;
toolLedger: ToolLedgerEntry[];
fileSnapshot: FileSnapshot;
approvalsRef: string;
budget: BudgetState;
traceRef: string;
};
这几个字段不是为了好看。
runState 说明任务到哪里了。
toolLedger 说明工具执行到哪里了。
fileSnapshot 说明工作区发生了什么变化。
approvalsRef 说明用户批准或拒绝过什么。
budget 说明还能不能继续。

