M1.05.5suspended-task mid-state设计研究

挂起的任务需要保存完整的中间状态

别名: 挂起要连槽一起存 · 不要只记住在办哪件事 · checkpoint of filled slots

概念解释

披萨已经记下大份、厚底,配料问到一半,用户插进去查烤箱预热时间。回来若只记得「在订披萨」,尺寸和饼底都空了,等于重开一张白单。挂起要保存完整中间状态(suspended-task mid-state)说的是:压栈的不是任务名字,是已填槽、半填槽、以及下一问是哪一个。能回去但状态残缺,对用户就是没回去。

机制

中间状态是一张检查点:哪些槽已接地、哪些只是识别假设、哪些还空、当前议程指到哪一步。只存技能 ID 的挂起,回来只能从技能入口再走,已付的轮次被作废。半填槽尤其脆:配料可能已经收了「蘑菇」,还在等「还要什么」——若只存「配料未完成」,蘑菇丢了;若把蘑菇写成已完成、把议程跳到确认,用户没说完的部分被截断。检查点还要分置信:低置信写进状态的项,回来时应仍标成待确认,不能因为挂起过一次就升成事实。插入期间若外界让槽失效(餐厅已过最后接单时间),完整保存也包括保存「这些值在挂起时是真的」,回来先校验再接着问。

怎么研究

中断保持实验:在已知的已填集合处插入一段固定时长的旁路任务,回来后立刻探针每个槽(「饼底是什么」)以及下一问是否还停在中断点。自变量:已填槽数、是否含半填集合槽、插入时长、插入是否同会话。因变量:槽值存活率、议程位置偏移、用户发现丢失后的重复填报量。

日志对比「插入前后槽集合的对称差」。主任务 ID 还在但对称差很大,就是名字活着、检查点死了。实验室若在插入期间把表单画在屏幕上,测到的是视觉外存,不是对话状态机的保持。

边界

任务还没有任何已接地的槽(刚唤醒、刚选了技能名),挂起几乎是空检查点,丢了也不可惜,回来从入口走可以接受。有的槽依法不能在挂起期间保持(支付令牌、一次性验证码),完整保存不包括这些;回来必须重取。多人共用设备上,检查点还带着身份:下一个人不应继承上一张半成品披萨。把「完整」理解成把语音录音存下来重放,既不必也危险——要存的是结构化槽,不是音频。

怎么落地

  • 挂起时序列化:技能、已接地槽、半填集合、下一议程拍、每槽置信。回来先反序列化,再说话。
  • 恢复线索里带一两个已填项作校验(「大份厚底,还在加配料」)。用户说不对,先修检查点,再往下问。
  • 插入期间使槽失效的外部条件,在恢复时重算;失效的项要说出来,不要用旧值默默提交。
  • 验证:记下尺寸和饼底、配料收了一项之后插入无关查询,回来问「饼底是什么」且看下一句是不是还在问配料。饼底没了,或下一句跳到了确认,检查点不完整。

延伸

  • 同组M1.05.1 用户会在任务中途插入新请求 · M1.05.2 完成插入后需回到原任务 · M1.05.3 嵌套深度需要上限 · M1.05.4 切换与修正是两种不同的意图 · M1.05.6 用户放弃任务需要有明确出口
  • 相邻M1.04 上下文保持 · M2.07 对话流程与状态设计 · M2.03 确认策略
  • 站内检索suspended-task mid-state · slot checkpoint · dialogue snapshot

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/M1.05.5