Github 原文:shareAI-lab/learn-claude-code
如果你了解 Vibe coding 这个圈子,你就会知道这里面最多的产品就是日历、日程管理、todo 工具,虽然他们烂透了,但也说明时间管理和规划在所有人心里的重要性,AI 也是一样的,最好他也有个日程时间表来干活。
问题
闹钟不需要你盯着它才会响。你设好 7:00,到点它自己响,你在睡觉、在洗澡、在做饭,它都照响不误。
上一篇文章中,我们利用后台异步任务模块让 Agent 能后台执行慢操作,但所有操作仍然是你手动触发的。你说一句,Agent 动一下。“每天早上 9 点跑测试”、“每 30 分钟检查 CI 状态”,这些周期性任务不该需要人每次来推。
解决方案
如果你稍微接触过一些运维相关的业务或者产品,就会知道 cronjob 在 devops 产品中就是定时任务。所以其实就是在 message 这个起点之前,再增加一个定时任务模块(因为一个循环式 message 输入开始的),所以就加一个模块定时的输送 message 内容让循环开始执行。
不过需要注意的是,这种定时任务都是在后台执行的,这也是为什么要先介绍上一张,再介绍这一张的原因。
| 手动触发 | 定时触发 | |
|---|---|---|
| 触发者 | 用户输入 | 调度线程 |
| 触发时机 | 随时 | cron 表达式指定 |
| 需要人参与 | 是 | 否(调度器自动入队,空闲时自动交付) |
| 持久性 | — | durable 跨重启 |
工作原理
cron 调度器的四层分工比较复杂,我这里简单做一下介绍:
| 层级 | 功能 | 说明 |
|---|---|---|
| Scheduler(调度线程) | 每秒检查时间 | 时间到了,把对应任务放到 cron_queue |
| Queue(队列) | 存放待执行任务 | 调度线程把触发任务丢这里,等待 Agent 空闲执行 |
| Queue Processor(交付端) | 检查队列 & Agent 状态 | Agent 空闲就拉取队列任务开始执行 |
| Consumer(Agent loop) | 真正执行任务 | 把任务注入到 Agent 的 messages 里,让 Agent 做事 |
简单来说,调度线程就是闹钟响了该去干活了;队列就是干这个活的人很多,得排队等着轮到你来干;交付端就是包工头不忙了,开始让刚才排队的开始干活了;Agent loop 就是我们的循环才是真的开始执行任务。
他把整个过程拆分成了 4 个部分来做,就是为了安全——把一个重要的事情分三个三个人来做,互相之间都有部分权利,但不会一个人拿着全部的权利,不至于一崩到底。
