Skip to content

4.8 后台任务 ​

本节目标

学会把耗时的活丢到后台执行,让对话不被卡住,随时回来收结果。

什么时候需要后台任务 ​

agent 干有些活很慢:

  • 跑一次完整的测试套件,要几分钟
  • 批量处理一批文件,要跑很久
  • 构建一个大项目,编译要等

这种任务如果让 agent 一路干完,你的对话就一直"转圈",期间想让它干别的都不行。后台任务就是解法:把这种耗时任务放到后台跑,对话立刻恢复可用,任务完成后再回来收结果。

怎么把任务放后台 ​

和子代理由主智能体委派出去执行子任务的子智能体,可并行工作、结果汇总回主会话。Subagent/sʌbˈeɪdʒənt/一样,直接说就行:

把这个批量压缩任务放到后台执行,完成后告诉我结果

agent 会把任务注册成后台任务,对话立刻恢复。你会看到会话头部出现后台任务列表,实时显示每个任务的状态。

后台任务没有"主动触发"的入口

后台任务没有独立的触发按钮,也没有 / 命令(源码里 jobs 是模型侧工具,界面只有任务列表、没有创建入口)。它的唯一触发方式就是对话:你说"放到后台执行",agent 调用工具时就会以后台模式运行,对话里出现对应的后台任务卡片,任务自动进入列表。

所以想开后台任务,直接说就行,剩下的交给 agent 判断。

什么任务才会真正进后台

后台化只对执行型工具生效:bash(命令行)、PowerShell、终端、子代理这类会"跑一会儿"的工具才支持后台模式。网页检索、读文件、快速查询这类工具没有后台参数,再怎么说"放后台"也不会后台化,因为它们本身很快。

所以想让任务真正进后台,最好让它落在命令执行上,比如:

写一个脚本批量查询这些城市的天气,用命令放到后台跑,完成后汇总结果

让 agent 用脚本命令跑,才会挂到后台;如果是它逐个用网页工具查,那属于快速检索,不会进后台列表。

界面上的后台任务 ​

后台任务在界面上有专门的位置:

  • 会话头部任务列表:当前会话的后台任务都列在这里,入口就在头部操作带上;一个任务都还没有时它不出现,不给界面添乱
  • 两行式运行行:运行中的任务占两行,第一行是任务标签,第二行是类型徽章加状态,旁边还有跳动的实时时长
  • 实时输出面板:0.1.7 起,点开一行任务能看到内嵌终端样式的流式输出面板,命令还在跑就能看到它实时打印了什么,收起面板即停流,不用等跑完
  • 已结束分组:跑完的任务折叠在「已完成」分组下,一行一个弱化显示,分组可以随手清空
  • 两击式停止:想手动停掉某个任务,点它的停止按钮后再点一次确认(三秒内生效),防手滑误停;停止后任务详情会标明「已由用户取消」,agent 会正常收到完成通知并被明确告知是你停的,不用它自己猜

任务跑完后,agent 会把结果汇报到对话里,你也可以随时从任务列表的输出面板回看。

后台任务的状态 ​

状态含义
运行中正在执行
停止中收到停止指令,正在收尾
已完成跑完了,可以查看结果
失败出错了,看详情找原因
已终止被手动终止

常见后台任务的类型有命令行任务、子代理由主智能体委派出去执行子任务的子智能体,可并行工作、结果汇总回主会话。Subagent/sʌbˈeɪdʒənt/任务等,它们统一由后台任务系统管理。

动手演示:跑一个不阻塞的后台任务 ​

光说不练假把式,花一分钟把"后台任务不阻塞对话"完整演示出来。

第一步:发这条消息

text
用 bash 执行这条命令,并把它放到后台运行,不要等待它结束,命令一启动就立即返回:

sleep 45 && echo "后台任务已跑完"

这是长耗时命令,用后台模式执行,别让对话卡住。

模型会把命令以后台模式跑起来(bash 工具支持后台参数),立刻返回一个任务 id,对话马上恢复可用。

第二步:马上发第二条消息

text
后台任务不用管它,先回答我:123 乘 456 等于多少?

如果 agent 立即回复了这道计算题,恭喜,不阻塞验证成功。此时会话头部能看到后台任务列表,任务显示"运行中"。

第三步:45 秒后收结果

text
刚才那个后台任务跑完了吗?把结果给我。

agent 会从后台任务里读出输出,汇报给你。

演示成功的三个要点

  • 命令要用 bash 执行:后台模式只对命令行这类执行型工具开放,网页检索类任务不会后台化
  • 命令要明显耗时(sleep 45 最稳):模型才有理由把任务放后台
  • 明确说立即返回、别等:直接引导模型用后台模式,而不是前台等完

实践建议 ​

  • 长任务默认丢后台:测试、构建、批量处理这类,直接说"放后台执行"
  • 任务多时注意管理:后台任务太多会互相抢资源,没用的及时终止
  • 结果要确认:任务完成不等于结果正确,收到汇报后抽验一下

常见问题 ​

问:后台任务和直接让它干,结果有区别吗?

没有,只是执行方式不同。后台任务不占着对话,你可以同时干别的。

问:会话头部的任务列表什么时候出现?

只有当前会话存在后台任务时,会话头部才会出现任务列表入口。一个任务都还没有时,界面上是看不到它的(没有任务就没有入口)。

问:想主动停掉后台任务,或读它的输出?

都有界面入口:点任务行展开实时输出面板就能读输出(不用打断它);想停就点行上的停止按钮,三秒内再点一次确认即可。当然也可以用对话说:"停掉那个后台任务",agent 有对应的工具来列出、读取和终止后台任务。

问:会话关了,后台任务会停吗?

任务和会话一次独立的对话记录,有自己的上下文,互不干扰。Session/ˈseʃn/绑定。会话结束或停止后,任务状态会相应变化,重要的任务建议等它跑完再关会话。

小结 ​

  • 长任务说一句"放到后台执行"即可,对话不被卡住
  • 后台任务没有独立触发入口(无按钮无命令),只能通过对话让 agent 挂到后台
  • 会话一次独立的对话记录,有自己的上下文,互不干扰。Session/ˈseʃn/头部有任务列表,运行中任务两行式显示带跳动时长,已完成的折叠分组可清空
  • 点开任务行能看实时流式输出,命令还在跑就能看它打印了什么
  • 手动停止是两击式(首击武装、三秒内确认),防误停,agent 会收到明确通知
  • 任务完成后 agent 汇报结果,重要结果记得抽验

后台不堵车了,下一节看看更高级的流程自动化:工作流把多步任务编排成脚本,可自动启动子代理,一次跑完整个流程。Workflow/ˈwɜːrkfloʊ/。

发现错误?提交反馈 · 欢迎 提 PR 改进本书