基础篇

F24|状态、事件与检查点:模型知道和系统记录的区别

基础篇约 2.7 千字1 组分步图解

从具体对象与小例子开始,理解计算过程与适用条件。

本章目录
动态图解 · F24

任务状态不是聊天里的一句总结

“模型知道做过”与“系统能恢复”有什么区别?

一次任务至少有目标、当前环境和执行记录。模型上下文可能被截断,但系统仍需要知道动作是否真正落地。事件记录描述发生过的事,快照描述某一时刻的状态;它们与“请总结一下”得到的一段话承担不同职责。

事件一次可记录的状态变化,例如文件替换完成。
快照某个时刻对任务状态的保存。
unknown不能确认成功或失败的状态,不等于已经失败。

输入与适用条件:构造的文件更新恢复轨迹。v7/v8是本例的版本标签,不是模型版本;只说明恢复语义,不宣称文件系统和数据库共享事务。

1 / 6 · 准备

第1步,共6步

窄屏可左右滑动图形,或点击“放大图形”。文字解释紧随图后。

任务状态不是聊天里的一句总结:准备准备目标:更新配置;当前版本v7请求已记录operation_id=op1;尚未确认环境改变开始执行本地文件已替换为新内容v8连接中断成功回执没到;宿主只知道结果不确定恢复核验按操作ID和文件内容核对,确认v8已存在完成记录记录成功;不再次盲目写入

目标:更新配置;当前版本v7

planned

默认静止。用“下一步”看完解释再继续;播放到最后一步自动停止。键盘聚焦播放器后,可用左右键逐步查看、空格播放/暂停。图中颜色辅助区分,含义同时用文字注明。

为什么需要

避免长任务在中断或压缩后重复、漏掉、覆盖已经完成的工作。

怎样实现

持久化必要状态;遇到未知结果先核对环境,再决定重试或继续。

可能的代价与误解

所有动作都做重型日志可能过度工程;但有不可重复副作用时仅靠聊天记录又不够。

如何判断是否做对

故意在执行与回执之间中断,恢复后检查动作次数与最终环境。

“做到哪了”必须有具体对象

一个文件修改任务可能处于“未开始、已读取、待修改、修改结果未知、已确认修改、已验证”等状态。状态state就是系统在某个时刻保存的这些事实和进展。

模型输出“我已经验证了”是一个消息;真实测试进程的退出码和对应文件版本是另一份记录。把后者保存下来,比让下一轮靠前者回忆可靠。

状态机从最小表开始

状态机state machine规定处于什么状态、收到什么事件时,可以变到什么状态。比如:

当前状态 新事件 下一个状态
待读取 读取成功 已读取
已读取 发起修改 修改中
修改中 响应超时 结果未知
结果未知 核验文件为目标版本 已修改
已修改 当前版本测试成功 已验证

这不是要求每个小脚本都建立复杂数据库,而是帮助你不把“尝试”“完成”“验证”混为一谈。小任务可以只用几个字段,大任务才需要更持久的机制。

事件与快照分别保存什么

事件event记录发生过的变化,例如“工具c1返回成功”。快照snapshot记录某时刻当前完整状态,例如“任务版本7、文件已改、测试未跑”。

事件方便追溯经过;快照方便快速恢复。只保存最终快照,可能不知道错误从哪开始;只保存所有事件,恢复时可能需要重放很多内容。二者怎样组合按规模和风险决定。

重放replay可以仅重建内存状态,不应不加区分地再次发送邮件或重复执行付款。这类副作用要单独管理。

版本号为什么重要

两名执行者都读取状态version=3,随后分别写结果。若后写者直接覆盖,可能丢掉先写者的更新。版本可以帮助表达“仅当状态还是3时才接受我的修改”。这叫比较后更新的思想,F33再展开CAS。

不要把版本号误解成文件内容本身。版本引用需能定位正确来源;相同路径在不同提交或工作区可能指向不同内容。

检查点保存恢复所需信息

Checkpoint(检查点)是可供中断后继续执行的状态保存点。对于Agent,它至少可能涉及目标、已完成步骤、当前证据版本、未决工具、验证状态和下一步。

对话摘要可以帮助模型重新理解任务,但它未必足够防止重复执行或覆盖新修改。执行账本应保存程序需要的可核验事实;自然语言摘要保存模型需要的语义脉络。不要强迫两者互相替代。

什么叫来源和证据身份

来源provenance说明一个结论基于哪个文档、哪个版本、哪个工具结果。证据引用应足以重新找到原始内容,可能是仓库提交加路径,或数据库记录和时间范围。

这里不要求所有文字都计算密码学指纹。若已有稳定版本标识足够,就不必加更多机制;若文件可变且后果严重,再用哈希等手段核验。保存成本必须与风险和复用收益相称。

状态与长期记忆的分工

“测试A尚未执行”属于当前任务状态;“这个项目采用某项编码规范”可能是跨任务知识;“曾经因为忽略版本而提交错误补丁”是历史经验。保存周期、检索触发和失效规则不同。

下一轮模型接收的上下文只是这些状态的一个选择结果。系统保存了信息,不等于模型本轮一定看到了它;是否注入要由上下文组装决定。

运行示例 · F24

同一任务的事件日志如何还原“做到哪了”

输入与条件。任务T1记录四个事件:e1接收任务、e2批准补丁、e3开始写文件、e4写入请求超时。

步骤与对象内部动作中间结果 / 新状态
1e1状态变为accepted目标存在,尚未执行。
2e2保存批准的操作身份op7批准不是写入成功。
3e3状态变为running,记录预期版本r7可追踪哪个操作在进行。
4e4请求超时但无明确回执状态变unknown,不自动写failed。
5恢复读取读到文件已是op7预期结果记录新的核验事件并转verified;不能凭摘要一句“已完成”跳过核验。

把过程连起来。事件是发生过的事实,状态是从这些事件计算出的当前结论。摘要服务于阅读,不能替代执行记录。

边界与反例。采用的是教学状态机;实际事件存储还需处理重复、持久化和外部系统的一致性。

依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。

课后自检

自检 1

修改调用超时,为什么不直接把状态设成未修改?

查看参考答案收起参考答案
因为远端或文件系统可能已完成动作,只是响应丢失。应核验真实状态后再决定。
自检 2

事件日志与对话摘要是同一东西吗?

查看参考答案收起参考答案
不是。日志记录执行事件及身份,摘要压缩语义上下文;它们的恢复精度和用途不同。

机制依据:[LONGHARNESS][SQLITE][COALA]。本节数值与情景除另注外均为原创教学示例;来源不代替中文讲解。

记录保存在本机浏览器。

输入关键词即可检索。

↑ ↓ 选择 Enter 打开Esc 关闭 · 仅本地搜索

阅读设置

阅读设置仅保存在本机浏览器,不上传任何数据。