后台运行(background task) 产品与架构

别名: 后台任务

「Agent 的运行」与「客户端的连接」解耦后获得的能力:断开连接后 Agent 照常跑完,事件落存储、与有没有订阅者无关。前提是事件存储的 `append` 不要求任何人在听——存储是运行的落点,连接只是读取进度的窗口。用户关掉页面任务照常完成,重新打开带上进度指针即可补齐。

它是什么

后台运行(background task)是「Agent 的运行」与「客户端的连接」解耦后获得的能力:断开连接后 Agent 照常跑完,事件落存储、与有没有订阅者无关。落到代码上就是一句话——append 不要求有订阅者。只要「Agent 的产物(事件)」与「客户端的消费(订阅)」在存储层解耦,后台运行就是免费的。

存储侧真相

存储是运行的落点,连接只是读取进度的窗口。POST /chat 一发,run 与任何连接无关地跑向完成;客户端随时来、走、再来,进度指针永远在存储里等着。这对产品形态是质变:服务端才是 Agent 的主场——用户关掉页面任务照常完成,重新打开带上 since 把进度补齐。类比的成熟产品是 Claude Code 的「慢操作丢后台、agent 继续思考」与 --resume 会话恢复。

边界

后台运行 ≠ 抢占/取消。要取消一个正在跑的 Agent,需要取消令牌从 HTTP 层贯穿 loop、provider 直到网络请求(AbortController 全链路),并定义「取消后已发事件怎么办、回滚还是保留」——这涉及权限层(谁有资格取消)与前端(打断按钮),是 ch17 与 ch18 的地盘。本章的贡献是打好地基:有了 seq,取消后的重连补发是免费的——被取消的 run 留下的部分事件(seq 有洞)不会破坏协议,因为客户端只依赖单调、不依赖连续。

在本教程的位置

第 16 章「后台运行与中断/抢占」一节;事件落存储的持久化版本见第 10 章

相关词条

出现在这些章节