前置知识: AI Agent

检查点与回滚

4 minIntermediate

检查点保存状态;回滚恢复到先前状态。两者是持久执行 (Lesson 12) 的基础。检查点让 Agent 在崩溃后恢复。回滚让 Agent 在犯错后撤销。关键设计选择:检查点频率(每次迭代 vs 每个重要步骤)、回滚粒度(完整状态 vs 单个文件)和回滚触发器(人工 vs 自动)。

检查点与回滚

检查点保存状态;回滚恢复到先前状态。两者是持久执行 (Lesson 12) 的基础。检查点让 Agent 在崩溃后恢复。回滚让 Agent 在犯错后撤销。关键设计选择:检查点频率(每次迭代 vs 每个重要步骤)、回滚粒度(完整状态 vs 单个文件)和回滚触发器(人工 vs 自动)。

类型: 学习 语言: Python (stdlib, 检查点-回滚管理器) 前置条件: Phase 15 · 12 (持久执行), Phase 15 · 15 (先提议后提交) 时间: ~30 分钟

问题

Agent 会犯错。当 Agent 犯错时,你需要能够撤销损害。没有检查点,你只能从头开始。没有回滚,你必须手动修复每个错误。

检查点和回滚是 Agent 系统的”撤销”按钮。它们是长时间范围可靠性 (Lesson 1) 和先提议后提交安全 (Lesson 15) 的基础。

概念

检查点策略

策略频率成本恢复粒度
每次迭代每轮高(存储)最细
每个重要步骤每个工具调用中等中等
定时每 N 秒
手动用户触发最低用户选择

生产系统通常使用混合:每个重要步骤检查点 + 定时检查点作为安全网。

回滚触发器

  • 人工触发:用户审查输出,发现错误,请求回滚。
  • 自动触发:验证器检测到错误(测试失败、Schema 不匹配、输出越界)。
  • 预算触发:成本治理器检测到异常消耗率。
  • 金丝雀触发:金丝雀令牌检测到越界行为 (Lesson 14)。

回滚粒度

  • 完整状态回滚:恢复所有文件、变量和 Agent 状态到检查点。最安全但可能丢失好的工作。
  • 选择性回滚:只恢复受影响的文件或组件。保留好的工作但可能遗漏依赖项。
  • 分支回滚:从检查点创建新分支,保留原始路径。最灵活但存储成本最高。

检查点内容

最小检查点包含:

  1. Agent 状态(变量、上下文摘要)。
  2. 文件系统快照(受影响文件的副本)。
  3. 工具调用日志(调用了什么、返回了什么)。
  4. 检查点原因(定期、崩溃前、人工请求)。

回滚后的恢复

回滚后,Agent 需要知道发生了什么。好的设计:

  • 回滚原因记录在 Agent 上下文中。
  • Agent 被告知”你被回滚到检查点 X 因为 Y。请尝试不同的方法。”
  • 失败方法的记录保留,以便 Agent 不重复相同错误。

构建它

code/main.py 实现检查点-回滚管理器。Agent 运行,定期检查点。当错误检测到时,回滚到最近的检查点并重试。

运行:

python3 code/main.py

练习

  1. 运行 code/main.py。观察检查点频率如何影响回滚后丢失的工作量。
  2. 实现选择性回滚:只回滚受影响的文件,保留其他更改。什么依赖项可能被遗漏?
  3. 添加分支回滚:回滚后创建新分支,保留原始路径。比较存储成本。
  4. 设计一个回滚触发器,当 Agent 的输出质量下降时自动回滚。如何测量”质量下降”?

关键术语

术语含义
检查点Agent 状态的持久化快照
回滚恢复到先前检查点
检查点频率多久保存一次检查点
回滚粒度回滚恢复多少状态
完整状态回滚恢复所有状态到检查点
选择性回滚只恢复受影响的部分
分支回滚从检查点创建新分支
回滚触发器什么导致回滚发生