将逐任务模型切换视为并发协议 笔记

将逐任务模型切换视为并发协议

为运行中的任务切换 AI 模型是一项分布式操作,而非简单的设置更新。它涉及读取当前任务、准备凭证、请求重启、接收结果以及持久化活动模型。当多个模型切换请求重叠时,完成顺序可能与请求顺序不一致,因此需要制定规则以确定哪个意图胜出。MonkeyCode 系统会记录模型切换尝试,包含模型 ID 和请求 ID 等详细信息。典型的工作流包括创建切换记录、请求任务流重启,然后完成切换记录。然而,在源码审查中并未建立显式的比较 - 交换(compare-and-swap)生成机制,也未针对重叠请求建立按任务序列化的契约。“最后完成者胜出”方法的不可靠性通过以下场景得到证明:由于网络时序问题,较晚但成功的完成可能覆盖较早的完成。一个配套模拟器可视化这种顺序依赖性,表明调用方的最新意图并未被固有考虑。为解决此问题,提出单调生成机制,为每个请求分配唯一的生成号。系统仅在完成的生成号与任务的当前请求生成号匹配时,才更新活动模型。该生成号守卫确保即使操作较晚完成,也不会应用过时操作。生成号守卫仅是全面协议的一部分,该协议还需定义针对重复请求、竞争请求、延迟成功、重启失败、进程崩溃、会话加载以及凭证绑定的契约。序列化(例如使用按任务锁)是一种替代方案,但会引入租约过期和公平性等复杂性。单元测试应通过控制各阶段操作的交错来验证该协议。不变量是:活动模型应始终对应于最大非被覆盖生成号的 successful 结果。将模型切换视为一种协议,可确保 UI、审计记录、重试和持久化之间的一致性。