fa09e873c5
一步之内写四次(模型意图 → 模型结果 → 动作意图 → 步记录原子写),所以断点有四个, 这个模块的全部工作就是把断点认出来: - 模型意图有、结果无 → 状态未知,按请求声明的模型重放策略决定重调还是停下来报告 - 结果条目在但记的是失败 → 状态一点都不未知,补上那一步以模型调用失败收尾 (判成未知走重放的话,一次已知的失败会被当成可能成功过) - 回复已存、动作意图未写 → 副作用还没发生,重新解释那条回复,不再花一次调用的钱 - 动作意图有、步记录无 → 按意图记录里存下的那个策略决定;重放沿用原来那个预分配 ID, 另分配一个的话原意图永远配不上结果,下次恢复读到的还是「状态未知」 四态表最后一行(结果有、意图无)判为日志损坏拒绝续跑,另加几种撞号与缺号:同一步两条 同种意图(并发写)、步序号不连续(中间某一步的原子写整个丢了)、意图跑到步记录前面、 有动作意图却没有模型调用意图、有记录却没有运行开始记录。 模块 docstring 里写明了一条此前只是隐含的对齐:步序号与模型调用序号是同一个数。没有它, result_id 为空的步记录(解析失败、模型调用失败、最终回答三档)认不出属于哪一步。