L1.12.5long background jobs should not stream设计研究
后台长任务不适合流式,它需要的是进度与允许离开
别名: 长任务不流式 · 进度与离开 · stream vs progress
概念解释
跑二十分钟的分析还在对话气泡里一个字一个字往外蹦,人就得盯着气泡,也不能关页。长任务要的不是首字安慰,是进度和离开权:现在到哪、还要多久量级、关掉之后谁来通知我。把长任务做成流式,是把后台工作按成了前台表演。
秒级带子里的生成,流式是感知工具。出了带子,流式变成羁押。
机制
流式绑定会话:连接、滚动位置、前台注意力。后台任务绑定的是工作项:可断线、可换设备、可在完成后被叫回来。两种绑定反了,人要么牺牲离开权来换那点正在出的字,要么离开后丢失进度和结果。长任务的失败模式也不同:该报的是阶段和可恢复检查点,不是半句话。
进度必须是阶段真实进度,不是把 token 数画成百分比。Token 与「还要多久」在工具调用和排队面前几乎无关。假进度会在尾巴上冻住,比没有更像卡死。
怎么研究
同一二十分钟任务:对话内流式 vs. 工作项 + 阶段进度 + 离开后通知。因变量:离开次数、完成到达率(人真的回来看结果)、焦虑、误以为卡死。自变量:进度是阶段还是假百分比、通知通道。
到达率是主终点。流式组若人一直没离开,不能算「更投入」,要问他们能不能离开。
边界
用户明确要求看着中间推理,可以提供可选的只读流,但默认仍是可离开的工作项。一两分钟的任务仍在带子附近,流式或短进度都可以。真后台若完全不给任何活信号,会被判死,那是另一极端。这条把流式从长任务上拿开,不否定短生成上流式的感知价值。
怎么落地
- 预估超过约 30 秒或含多步工具的任务,做成工作项:阶段名、允许离开、完成后通知。不要挤在气泡里流。
- 进度用阶段(检索中 / 分析中 / 写报告),不用 token 百分比。
- 离开后结果进收件箱或任务列表,下次打开还在,不依赖那条 TCP。
- 验证:让人去做二十分钟的任务,看他们能不能去干别的并被叫回来。不能,流式在羁押。再看进度条在最后 20% 是否冻住——冻住,百分比是假的。