F24|状态、事件与检查点:模型知道和系统记录的区别
从具体对象与小例子开始,理解计算过程与适用条件。
本章目录
任务状态不是聊天里的一句总结
“模型知道做过”与“系统能恢复”有什么区别?
一次任务至少有目标、当前环境和执行记录。模型上下文可能被截断,但系统仍需要知道动作是否真正落地。事件记录描述发生过的事,快照描述某一时刻的状态;它们与“请总结一下”得到的一段话承担不同职责。
输入与适用条件:构造的文件更新恢复轨迹。v7/v8是本例的版本标签,不是模型版本;只说明恢复语义,不宣称文件系统和数据库共享事务。
1 / 6 · 准备
窄屏可左右滑动图形,或点击“放大图形”。文字解释紧随图后。
目标:更新配置;当前版本v7
planned默认静止。用“下一步”看完解释再继续;播放到最后一步自动停止。键盘聚焦播放器后,可用左右键逐步查看、空格播放/暂停。图中颜色辅助区分,含义同时用文字注明。
为什么需要
避免长任务在中断或压缩后重复、漏掉、覆盖已经完成的工作。
怎样实现
持久化必要状态;遇到未知结果先核对环境,再决定重试或继续。
可能的代价与误解
所有动作都做重型日志可能过度工程;但有不可重复副作用时仅靠聊天记录又不够。
如何判断是否做对
故意在执行与回执之间中断,恢复后检查动作次数与最终环境。
“做到哪了”必须有具体对象
一个文件修改任务可能处于“未开始、已读取、待修改、修改结果未知、已确认修改、已验证”等状态。状态state就是系统在某个时刻保存的这些事实和进展。
模型输出“我已经验证了”是一个消息;真实测试进程的退出码和对应文件版本是另一份记录。把后者保存下来,比让下一轮靠前者回忆可靠。
状态机从最小表开始
状态机state machine规定处于什么状态、收到什么事件时,可以变到什么状态。比如:
| 当前状态 | 新事件 | 下一个状态 |
|---|---|---|
| 待读取 | 读取成功 | 已读取 |
| 已读取 | 发起修改 | 修改中 |
| 修改中 | 响应超时 | 结果未知 |
| 结果未知 | 核验文件为目标版本 | 已修改 |
| 已修改 | 当前版本测试成功 | 已验证 |
这不是要求每个小脚本都建立复杂数据库,而是帮助你不把“尝试”“完成”“验证”混为一谈。小任务可以只用几个字段,大任务才需要更持久的机制。
事件与快照分别保存什么
事件event记录发生过的变化,例如“工具c1返回成功”。快照snapshot记录某时刻当前完整状态,例如“任务版本7、文件已改、测试未跑”。
事件方便追溯经过;快照方便快速恢复。只保存最终快照,可能不知道错误从哪开始;只保存所有事件,恢复时可能需要重放很多内容。二者怎样组合按规模和风险决定。
重放replay可以仅重建内存状态,不应不加区分地再次发送邮件或重复执行付款。这类副作用要单独管理。
版本号为什么重要
两名执行者都读取状态version=3,随后分别写结果。若后写者直接覆盖,可能丢掉先写者的更新。版本可以帮助表达“仅当状态还是3时才接受我的修改”。这叫比较后更新的思想,F33再展开CAS。
不要把版本号误解成文件内容本身。版本引用需能定位正确来源;相同路径在不同提交或工作区可能指向不同内容。
检查点保存恢复所需信息
Checkpoint(检查点)是可供中断后继续执行的状态保存点。对于Agent,它至少可能涉及目标、已完成步骤、当前证据版本、未决工具、验证状态和下一步。
对话摘要可以帮助模型重新理解任务,但它未必足够防止重复执行或覆盖新修改。执行账本应保存程序需要的可核验事实;自然语言摘要保存模型需要的语义脉络。不要强迫两者互相替代。
什么叫来源和证据身份
来源provenance说明一个结论基于哪个文档、哪个版本、哪个工具结果。证据引用应足以重新找到原始内容,可能是仓库提交加路径,或数据库记录和时间范围。
这里不要求所有文字都计算密码学指纹。若已有稳定版本标识足够,就不必加更多机制;若文件可变且后果严重,再用哈希等手段核验。保存成本必须与风险和复用收益相称。
状态与长期记忆的分工
“测试A尚未执行”属于当前任务状态;“这个项目采用某项编码规范”可能是跨任务知识;“曾经因为忽略版本而提交错误补丁”是历史经验。保存周期、检索触发和失效规则不同。
下一轮模型接收的上下文只是这些状态的一个选择结果。系统保存了信息,不等于模型本轮一定看到了它;是否注入要由上下文组装决定。
同一任务的事件日志如何还原“做到哪了”
输入与条件。任务T1记录四个事件:e1接收任务、e2批准补丁、e3开始写文件、e4写入请求超时。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1e1 | 状态变为accepted | 目标存在,尚未执行。 |
| 2e2 | 保存批准的操作身份op7 | 批准不是写入成功。 |
| 3e3 | 状态变为running,记录预期版本r7 | 可追踪哪个操作在进行。 |
| 4e4 | 请求超时但无明确回执 | 状态变unknown,不自动写failed。 |
| 5恢复读取 | 读到文件已是op7预期结果 | 记录新的核验事件并转verified;不能凭摘要一句“已完成”跳过核验。 |
把过程连起来。事件是发生过的事实,状态是从这些事件计算出的当前结论。摘要服务于阅读,不能替代执行记录。
边界与反例。采用的是教学状态机;实际事件存储还需处理重复、持久化和外部系统的一致性。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
课后自检
修改调用超时,为什么不直接把状态设成未修改?
查看参考答案收起参考答案
事件日志与对话摘要是同一东西吗?
查看参考答案收起参考答案
延伸阅读:相关系统问题
09|Agent一次任务的完整循环:谁在思考,谁在执行10|模型输出怎样变成真实工具调用:协议与执行边界
11|工具设计与MCP:从连接到可控执行
12|Codex、Claude Code、Copilot:从公开事实到可诊断运行链
13|每一轮Prompt怎样组装:上下文是一条数据管线
机制依据:[LONGHARNESS][SQLITE][COALA]。本节数值与情景除另注外均为原创教学示例;来源不代替中文讲解。