4.8 后台任务
本节目标
学会把耗时的活丢到后台执行,让对话不被卡住,随时回来收结果。
什么时候需要后台任务
agent 干有些活很慢:
- 跑一次完整的测试套件,要几分钟
- 批量处理一批文件,要跑很久
- 构建一个大项目,编译要等
这种任务如果让 agent 一路干完,你的对话就一直"转圈",期间想让它干别的都不行。后台任务就是解法:把这种耗时任务放到后台跑,对话立刻恢复可用,任务完成后再回来收结果。
怎么把任务放后台
和子代理由主智能体委派出去执行子任务的子智能体,可并行工作、结果汇总回主会话。一样,直接说就行:
把这个批量压缩任务放到后台执行,完成后告诉我结果
agent 会把任务注册成后台任务,对话立刻恢复。你会看到会话头部出现后台任务列表,实时显示每个任务的状态。
后台任务没有"主动触发"的入口
后台任务没有独立的触发按钮,也没有 / 命令(源码里 jobs 是模型侧工具,界面只有任务列表、没有创建入口)。它的唯一触发方式就是对话:你说"放到后台执行",agent 调用工具时就会以后台模式运行,对话里出现对应的后台任务卡片,任务自动进入列表。
所以想开后台任务,直接说就行,剩下的交给 agent 判断。
什么任务才会真正进后台
后台化只对执行型工具生效:bash(命令行)、PowerShell、终端、子代理这类会"跑一会儿"的工具才支持后台模式。网页检索、读文件、快速查询这类工具没有后台参数,再怎么说"放后台"也不会后台化,因为它们本身很快。
所以想让任务真正进后台,最好让它落在命令执行上,比如:
写一个脚本批量查询这些城市的天气,用命令放到后台跑,完成后汇总结果
让 agent 用脚本命令跑,才会挂到后台;如果是它逐个用网页工具查,那属于快速检索,不会进后台列表。
界面上的后台任务
后台任务在界面上有专门的位置:
- 会话头部任务列表:当前会话的后台任务都列在这里,入口就在头部操作带上;一个任务都还没有时它不出现,不给界面添乱
- 两行式运行行:运行中的任务占两行,第一行是任务标签,第二行是类型徽章加状态,旁边还有跳动的实时时长
- 实时输出面板:0.1.7 起,点开一行任务能看到内嵌终端样式的流式输出面板,命令还在跑就能看到它实时打印了什么,收起面板即停流,不用等跑完
- 已结束分组:跑完的任务折叠在「已完成」分组下,一行一个弱化显示,分组可以随手清空
- 两击式停止:想手动停掉某个任务,点它的停止按钮后再点一次确认(三秒内生效),防手滑误停;停止后任务详情会标明「已由用户取消」,agent 会正常收到完成通知并被明确告知是你停的,不用它自己猜
任务跑完后,agent 会把结果汇报到对话里,你也可以随时从任务列表的输出面板回看。
后台任务的状态
| 状态 | 含义 |
|---|---|
| 运行中 | 正在执行 |
| 停止中 | 收到停止指令,正在收尾 |
| 已完成 | 跑完了,可以查看结果 |
| 失败 | 出错了,看详情找原因 |
| 已终止 | 被手动终止 |
常见后台任务的类型有命令行任务、子代理由主智能体委派出去执行子任务的子智能体,可并行工作、结果汇总回主会话。任务等,它们统一由后台任务系统管理。
动手演示:跑一个不阻塞的后台任务
光说不练假把式,花一分钟把"后台任务不阻塞对话"完整演示出来。
第一步:发这条消息
用 bash 执行这条命令,并把它放到后台运行,不要等待它结束,命令一启动就立即返回:
sleep 45 && echo "后台任务已跑完"
这是长耗时命令,用后台模式执行,别让对话卡住。模型会把命令以后台模式跑起来(bash 工具支持后台参数),立刻返回一个任务 id,对话马上恢复可用。
第二步:马上发第二条消息
后台任务不用管它,先回答我:123 乘 456 等于多少?如果 agent 立即回复了这道计算题,恭喜,不阻塞验证成功。此时会话头部能看到后台任务列表,任务显示"运行中"。
第三步:45 秒后收结果
刚才那个后台任务跑完了吗?把结果给我。agent 会从后台任务里读出输出,汇报给你。
演示成功的三个要点
- 命令要用 bash 执行:后台模式只对命令行这类执行型工具开放,网页检索类任务不会后台化
- 命令要明显耗时(sleep 45 最稳):模型才有理由把任务放后台
- 明确说立即返回、别等:直接引导模型用后台模式,而不是前台等完
实践建议
- 长任务默认丢后台:测试、构建、批量处理这类,直接说"放后台执行"
- 任务多时注意管理:后台任务太多会互相抢资源,没用的及时终止
- 结果要确认:任务完成不等于结果正确,收到汇报后抽验一下
常见问题
问:后台任务和直接让它干,结果有区别吗?
没有,只是执行方式不同。后台任务不占着对话,你可以同时干别的。
问:会话头部的任务列表什么时候出现?
只有当前会话存在后台任务时,会话头部才会出现任务列表入口。一个任务都还没有时,界面上是看不到它的(没有任务就没有入口)。
问:想主动停掉后台任务,或读它的输出?
都有界面入口:点任务行展开实时输出面板就能读输出(不用打断它);想停就点行上的停止按钮,三秒内再点一次确认即可。当然也可以用对话说:"停掉那个后台任务",agent 有对应的工具来列出、读取和终止后台任务。
问:会话关了,后台任务会停吗?
任务和会话一次独立的对话记录,有自己的上下文,互不干扰。绑定。会话结束或停止后,任务状态会相应变化,重要的任务建议等它跑完再关会话。
小结
- 长任务说一句"放到后台执行"即可,对话不被卡住
- 后台任务没有独立触发入口(无按钮无命令),只能通过对话让 agent 挂到后台
- 会话一次独立的对话记录,有自己的上下文,互不干扰。头部有任务列表,运行中任务两行式显示带跳动时长,已完成的折叠分组可清空
- 点开任务行能看实时流式输出,命令还在跑就能看它打印了什么
- 手动停止是两击式(首击武装、三秒内确认),防误停,agent 会收到明确通知
- 任务完成后 agent 汇报结果,重要结果记得抽验
后台不堵车了,下一节看看更高级的流程自动化:工作流把多步任务编排成脚本,可自动启动子代理,一次跑完整个流程。。