Background Tasks — 慢操作放后台

"慢操作丢后台, agent 继续处理" — 后台线程跑命令, 完成后注入通知。

Github 原文:shareAI-lab/learn-claude-code

问题

还记得之前说过的异步和同步任务吗?当时我们类比过,你用洗衣机,把衣服扔进去,按下启动,然后去干别的——做饭、回消息、看论文。30 分钟后洗衣机”滴滴滴”提醒你:好了。你不会站在洗衣机前面干等 30 分钟;又或者我们现在让 AI 帮我们干活的时候要等待很长时间,这时候我们可以刷刷手机:)

Agent 的 bash 工具也一样。pip install torch 要 10 分钟,npm run build 要 3 分钟。这些命令一跑,Agent 就在等 bash 工具返回,没法利用这段时间处理别的任务。Agent 等 10 分钟什么都不做,而 LLM 按 token 计费,空转就是浪费。

解决方案

Background Tasks — 慢操作放后台

这个图其实是简化了一些之前的那个流程,我们就当做有他没画出来就好。可以看到其实就是新增了一个判断,会判断任务执行是 fast 还是 slow,如果是 fast 就继续保持同步执行,如果是slow 就在后台执行做异步。

其实和我们现在很多有偿任务的产品都会做的任务中心模块一样,比如上传、下载等等。

同步 (s12)后台 (s13)
慢操作Agent 干等后台线程执行
Agent 空闲否,继续处理
结果立即返回下轮注入通知
判断标准run_in_background 参数(模型显式请求),启发式兜底

工作原理

显式启动优先

模型通过 bash 工具的 run_in_background 参数显式请求后台执行。CC 并不是采用简单的关键词启发兜底的,而是给了一个 boolean 参数,让 AI 自己决定哪些命令丢给后台任务中心去跑,也就是说这一步CC 是上了 AI 的,不是简单的一个关键词匹配什么的。

再次进入循环

既然已经到了后台执行,那么执行完了怎么通知 AI 呢?这就需要利用一个通知系统,告诉 AI 后台的这个任务执行完了,就像任务中心一样。

然后当完成后,会新建一条 tooluse 的记录,然后在循环中将通知和结果合并后插入到循环中。