L4.05.1long-running tasks must be abortable设计研究
长任务需可随时中止
别名: 随时中止 · abort agent task · 代理可打断
概念解释
代理一旦开始跑长任务,人必须在任意时刻能让它停,而且停是真的停:不再调用工具、不再对外发送、不再写下一笔。长任务可随时中止(long-running tasks must be abortable)说的是执行权上的急停,不是进度条旁边摆一个灰掉的按钮。
点了停,系统回「正在收尾」然后又发出三封邮件,这不叫可中止。
机制
自动化把感知—决策—执行收成连续过程,连续过程没有默认的人的插入点。长任务把这个过程拉到分钟或小时,人的意图在中途会变:发现对象错了、优先级变了、看错了范围。没有急停,人只能等它跑完再补救,补救成本按已经跨过世界边界的次数涨。监督控制里的「人能抑制自动化」是层级的一部分;代理若不能被抑制,层级已经悄悄升到了完全自主,不管界面怎么写。
中止要作用在执行调度上,不是作用在渲染上。停掉流式文字但工具调用还在飞,是假中止。
怎么研究
让代理跑一条含多次对外动作的长链,在第 n 步发出中止。因变量:中止命令之后是否还有对外动作、从点到真正停的时延、人是否相信已经停了。自变量:中止是否接到调度器、进行中的工具调用是否被取消、界面是否在未停时显示「已停止」。
「以为停了」是关键的主观量,必须和实际动作日志对照。
边界
短到一次点击就结束的动作谈不上中途中止,该用的是确认或撤销。不可中断的物理过程(某些工业工序)需要的是预先设计的安全停机程序,不是 UI 上的随时停。已经做完的步骤能不能退,是回退的问题;这里只要求「从此刻起不再做」。过程看不看得见,不在这条里。
怎么落地
- 长任务界面常驻一个中止,接到调度器:发出后禁止新的工具调用和新的对外动作。进行中的调用能取消的取消,不能取消的必须在界面上标成「停不掉、仍在飞」。
- 未真正停住之前,不得把状态写成已停止。收尾如果还包含对外动作,那些动作必须先被拿掉,才能叫中止。
- 验证:在测试账本上让代理发连续动作,中途点停,看点之后账本是否还增加。增加了,中止就还没接到调度。再问操作者「它现在停了吗」——和账本不一致,显示也是假的。