半夜自动写作翻车后,我加了一个"空闲门"
凌晨两点,我被电脑风扇声吵醒。
起来一看,是我的写作 agent 在后台跑批量文章。本来设置的是"空闲时自动写",结果它没判断我正在导视频,直接把 CPU 占满了。视频导出时间从预计的40分钟变成了2小时。
这不是第一次了。
问题在哪
我之前对"自动写作"的理解很简单:有任务就执行,没任务就待机。agent 会在后台默默写文章,看起来很美好。
但实际用下来,发现"自动"不等于"随便跑"。
卡点1:机器状态不可见
agent 不知道我在干嘛。我在剪视频、在开会、在导照片,它都当成"空闲",照常启动写作任务。结果就是资源冲突——CPU、内存、磁盘IO全在争抢。
卡点2:优先级判断缺失
有些任务是真紧急(比如马上要发的文章),有些可以等(比如深度复盘文)。但自动写作计划里,所有任务平权,先排队先执行,不管机器状态,不管任务优先级。
卡点3:无限抢占
一旦启动,agent 会一直跑,直到任务队列清空。中间我不会主动停止它,因为它"看起来在干活"。但实际上,它可能在写一篇不急的文章,而我正需要机器性能来处理别的事。
我是怎么引导 agent 解决的
我:你得能判断机器是不是真的空闲。
Agent:我可以查 CPU 和内存使用率。
我:不够。你得知道"我在用电脑"这个状态。我在前面工作,你在后面写文章,这不叫空闲。
Agent:那我怎么知道你在不在用?
我:简单,看鼠标键盘有没有活动,看有没有前台应用在大负载运行。
于是我们定了个规则:idle-gated execution(空闲门执行)。
核心逻辑:
- 检查机器空闲状态(CPU < 30% + 无用户输入 > 5分钟 + 无高负载前台应用)
- 空闲,才启动写作任务
- 不空闲,等待,并记录等待原因
- 任务执行中,如果机器变"忙"了,暂停,让出资源
一步步定下来的方法
第一版:简单阈值
最开始我只加了 CPU 阈值。CPU < 50% 就执行。结果发现问题:我在看视频的时候 CPU 很低,但我不希望 agent 跑,因为我在用电脑,突然风扇转起来很烦。
第二版:加时间窗口
然后我加了"持续空闲时间"——必须连续10分钟 CPU < 50% 才执行。好一些了,但还是有问题:我可能只是短暂离开,10分钟后回来,发现 agent 已经跑了。
第三版:加用户输入检测
这是关键。加上了"检测鼠标键盘活动"。如果最近5分钟有用户输入,就不执行。这下准确多了。
但还是有问题:我可能挂着视频渲染,人不在电脑前,但机器并不空闲。
第四版(最终版):综合判断
最终的规则是:
- CPU < 30% (不是50%,因为系统预留需要20%左右)
- 最近5分钟无鼠标键盘输入
- 无高负载前台应用(比如视频剪辑、虚拟机、游戏)
- 如果任务已启动,运行中检测到"变忙",立即暂停
这个方案跑了两周,没再出现过半夜被风扇吵醒的情况。
抽象出来的方法
这次协作让我总结出一个可复用的方法:
任何"自动后台任务"都必须加"空闲门",判断条件不是单一的,而是多维度的:
- 系统资源(CPU、内存、磁盘IO)
- 用户活动(输入检测、前台应用)
- 任务优先级(急的任务可以降低门槛,不急的必须严格)
- 动态让权(执行中也要持续检测,不能一次性判断)
这个方法不仅适用于写作 agent,也适用于任何后台自动化任务——备份、同步、数据处理等等。
关键是:"自动"不等于"盲目","后台"不等于"无视用户"。
加了这个空闲门之后,我的写作 agent 变得更"懂事"了。它会在我不用电脑的时候默默干活,我回来它就自动让路。这种体验,才是真正的"人机协作"。
而不是半夜被风扇吵醒,然后发现 agent 在帮我"努力工作"。