跳到主要内容

帮我盯着这件事:定时监控与主动提醒的场景设计与自动化技巧

"每天帮我看一下有没有新邮件,有重要的就提醒我" —— 这句话把 Agent 从"被动应答"变成了"主动服务"。本文拆解定时监控和主动提醒的场景设计,分享让 Agent 成为你的"值班助手"的自动化技巧。

场景画像

高频指令

  • "每天帮我检查一下新邮件"
  • "每小时看一下有没有 AI 新闻"
  • "提醒我明天下午 3 点开会"
  • "每周五下午提醒我写周报"
  • "帮我盯着这个关键词的新闻"

为什么"主动提醒"是 Agent 的分水岭

大多数 AI 助手是"你问我答"的模式——用户不发消息,助手就沉默。但真正有价值的助手应该能主动发现问题并通知你。这就是 CountBot 的 Cron 系统 + Heartbeat 系统的价值所在。

场景拆解:三种监控模式

模式一:定时检查 + 条件通知

"每天早上检查邮件,有重要的才通知我"

Cron 任务配置:
Schedule: 0 9 * * *(每天早上 9 点)
Message: 检查最近 24 小时的新邮件。
如果有来自 @company.com 的邮件,或主题含"紧急""审批"的邮件,
整理成摘要通知我。
如果全是订阅和通知类邮件,不用打扰我。

关键点在于"条件通知"——Agent 不是每次都推送,而是判断后决定是否推送。这依赖 LLM 的推理能力。

模式二:周期性信息聚合

"每天下午 6 点帮我整理 AI 新闻"

Cron 任务配置:
Schedule: 0 18 * * *(每天下午 6 点)
Message: 搜索今天的 AI 技术新闻和社区动态,
筛选出最重要的 5 条,生成简报。
如果有重大发布(新模型、重要论文),在标题前加“重点”标记。

模式三:一次性提醒

"提醒我明天下午 3 点开会"

Agent 会创建一个一次性的 Cron 任务:

Schedule: 0 15 18 2 *(2 月 18 日 15:00)
Message: 提醒领导:下午 3 点有部门会议。

提示词技巧:让监控更智能

技巧一:定义"重要"的标准

Agent 需要知道什么算"重要",什么可以忽略:

帮我创建一个邮件监控任务,每 4 小时检查一次。
重要邮件的标准:
- 来自 @company.com 的任何邮件
- 主题含"紧急""审批""deadline""会议"
- 来自我记忆中标记为"重要联系人"的发件人
不重要的:
- 订阅推送、系统通知、营销邮件
只在有重要邮件时通知我。

技巧二:渐进式监控频率

不同类型的监控需要不同的频率:

监控类型建议频率Cron 表达式
邮件检查每 4 小时0 */4 * * *
新闻聚合每天 1 次0 18 * * *
天气预警每天 2 次0 8,20 * * *
关键词监控每 2 小时0 */2 * * *
周报提醒每周五0 16 * * 5

技巧三:组合监控 + 行动

不只是通知,还可以让 Agent 采取行动:

每天早上 8 点:
1. 检查新邮件,有重要的通知我
2. 查询今天天气,如果有雨提醒我带伞
3. 读取记忆中今天的待办事项
4. 把以上信息整合成一条早报发给我

这实际上就是前面讲的"每日早报"场景,但从"监控"的角度来理解更直观。

技巧四:利用 Heartbeat 实现"关怀式提醒"

CountBot 内置的 Heartbeat 系统是一种特殊的主动提醒——它不是基于固定规则,而是基于用户行为

Heartbeat 触发条件:
1. 当前时间在 8:00-22:00(上海时间)
2. 用户空闲超过 4 小时
3. 今天还没有问候过
4. 50% 的随机概率(让时间分布自然)

Heartbeat 生成的问候会参考用户的最近记忆,所以可能会说:

"领导,下午好。对了,你昨天提到的项目方案截止日期是后天,需要我帮忙整理吗?"

这种"记忆感知的主动关怀"是纯规则系统做不到的。

技巧五:监控结果的持久化

每次监控结果都帮我记录到记忆里,格式:
"[日期] [监控类型] [结果摘要]"
这样我以后可以问"上周的邮件监控发现了什么"。

技术细节:Cron 系统的精确唤醒

CountBot 的 CronScheduler 不使用固定间隔轮询(如每分钟检查一次),而是计算下一个最近的触发时间,然后精确 sleep:

async def _get_next_wake_time(self):
"""遍历所有启用的任务,找到最近的 next_run"""
...

def _arm_timer(self):
"""设置定时器,精确到秒"""
delay = (self._next_wake - now).total_seconds()
self._timer_handle = self._loop.call_later(delay, self._on_timer)

这种设计的优势:

  • 零空闲 CPU 消耗:没有任务要执行时,调度器完全休眠
  • 精确触发:误差在秒级
  • 动态调整:新增或修改任务后,自动重新计算下一个唤醒时间

任务执行的隔离性

每个 Cron 任务的执行都被 _execute_job_safe 包装:

async def _execute_job_safe(self, job):
try:
await self._execute_job(job, service)
except Exception as e:
logger.error(f"Job {job.id} failed: {e}")
# 失败不影响其他任务

这意味着即使某个监控任务失败(比如邮件服务超时),其他任务不受影响。

实战案例:构建个人监控仪表盘

把多个监控任务组合起来,构建一个完整的个人监控体系:

任务 1:每天 8:30 — 邮件分拣 + 天气 + 待办 → 早报
任务 2:每天 12:00 — AI 新闻快报
任务 3:每天 18:00 — 全天邮件回顾 + 明日预告
任务 4:每周五 16:00 — 周报提醒 + 本周记忆回顾
任务 5:每月 1 日 9:00 — 月度总结提醒

所有这些任务都通过 Cron 系统自动执行,结果通过 WebSocket 或渠道推送到用户。用户只需要在初始设置时花 5 分钟配置,之后就是纯被动接收。

边界与局限

  • Cron 表达式学习成本:普通用户可能不熟悉 cron 语法,但 Agent 可以将自然语言转化为 cron 表达式
  • 进程重启后恢复:CountBot 重启后会自动恢复所有定时任务(从数据库读取)
  • 一次性任务清理:执行完的一次性任务需要手动删除或等待自动清理
  • 时区问题:当前 Heartbeat 硬编码为上海时区(UTC+8)

小结

定时监控和主动提醒是 AI Agent 从"工具"进化为"助手"的关键能力。CountBot 的 Cron 系统(精确按需唤醒)+ Heartbeat 系统(行为感知的主动关怀)+ 记忆系统(偏好积累),构成了一个完整的"主动服务"体系。关键技巧是:定义清晰的"重要"标准、设置合理的监控频率、组合监控与行动、利用记忆实现个性化。当这些监控任务运行起来后,Agent 就真正成为了你的"24 小时值班助手"。