从"聊天工具"到"自主操作者"
大多数 AI 工具都是被动的:你发消息,它回复,完事。会话结束,它就沉睡了,什么都不记得,什么都不主动做。
OpenClaw 打破了这个模式。它最核心的机制之一——Heartbeat(心跳轮询)——让 Agent 能在没有任何人类触发的情况下,定期醒来、检查待办、执行任务、再回到休眠。
这一个设计,把 AI 从一个你使用的工具变成了一个你监督的操作者。
心跳机制是什么?一句话解释
Heartbeat = 带 LLM 推理能力的 Cron Job。
具体来说,它是一个定时调度循环:Agent 每隔 N 分钟自动醒来,读取你预先写好的任务清单(HEARTBEAT.md),判断当前是否有需要处理的事情,处理完再回去休眠。
如果什么都不需要做,它只返回一个 HEARTBEAT_OK,不发任何通知——避免烦人的"无意义提醒"。
技术原理:一次心跳的完整生命周期
每次心跳触发时,OpenClaw 会执行以下步骤:
- 调度器计时到达(默认每 30 分钟)
- 注入系统提示,标记本次运行为 "Heartbeat" 模式
- 读取
HEARTBEAT.md(如果存在),作为任务上下文 - 发送心跳 Prompt(逐字发送,不做任何修改)
- LLM 推理:判断有无需要关注的事项
- 执行工具调用(查邮件、查日历、运行命令……)
- 输出结果:有事则通知,无事则回复
HEARTBEAT_OK静默结束
默认的心跳 Prompt 是:
Read HEARTBEAT.md if it exists (workspace context). Follow it strictly.
Do not infer or repeat old tasks from prior chats.
If nothing needs attention, reply HEARTBEAT_OK.
你也可以把它替换成完全自定义的指令,比如"检查 Gmail PubSub 统计"或"验证 gateway 健康状态"。
HEARTBEAT.md:Agent 的"任务清单"
这是整个机制里最精妙的设计之一。HEARTBEAT.md 是一个普通的 Markdown 文件,放在 Agent 的工作空间里,作为每次心跳的执行蓝本。
一个典型的 HEARTBEAT.md 示例
# 心跳清单
- 检查邮件,标记紧急邮件
- 查看未来 2 小时内的日历事件
- 如果有后台任务完成,汇总结果
- 如果超过 8 小时没有对话,发送一次轻量问候
Agent 每次心跳都读取这份清单,用 LLM 的判断力决定哪些需要处理、哪些可以跳过。
Agent 可以自己更新 HEARTBEAT.md
更有趣的是:你在日常对话中,可以直接告诉 Agent "帮我盯着某件事",Agent 会用 write 或 edit 工具把这个任务写进 HEARTBEAT.md。下次心跳时,它就会主动去检查。
这相当于 Agent 在给自己编程,为下一次自动运行做准备。
配置详解:从 30 分钟到 24/7
基础配置
{
"agents": {
"defaults": {
"heartbeat": {
"every": "30m",
"target": "last",
"lightContext": true,
"isolatedSession": true
}
}
}
}
限制活跃时间(避免半夜骚扰)
{
"agents": {
"defaults": {
"heartbeat": {
"every": "30m",
"target": "last",
"activeHours": {
"start": "09:00",
"end": "22:00",
"timezone": "Asia/Shanghai"
}
}
}
}
}
真正的 24/7 全天候运行
"activeHours": { "start": "00:00", "end": "24:00" }
去掉 activeHours 限制,或者设置为全天,Agent 就会全年无休地每 30 分钟检查一次。
多 Agent 各自独立心跳
{
"agents": {
"list": [
{ "id": "main", "default": true },
{
"id": "ops",
"heartbeat": {
"every": "1h",
"target": "whatsapp",
"to": "+15551234567",
"prompt": "检查服务器健康状态和告警队列,有异常立即通知。"
}
}
]
}
}
响应契约:HEARTBEAT_OK 的设计哲学
OpenClaw 定义了一个简洁的"安静协议":
- 没有需要关注的事 → 回复
HEARTBEAT_OK,消息被静默丢弃,不通知用户 - 有需要处理的事 → 返回具体内容,按
target配置发送通知 HEARTBEAT_OK出现在消息开头或结尾时触发 ack 逻辑;出现在中间则不特殊处理- 回复 ≤
ackMaxChars(默认 300 字符)时,消息整体被丢弃
这个设计解决了自动化系统最常见的痛点:告警疲劳。Agent 只在真正需要时才打扰你,其余时间静默工作。
Heartbeat vs Cron:别搞混了
| Heartbeat 心跳 | Cron 定时任务 | |
|---|---|---|
| 触发方式 | 固定间隔(每 N 分钟) | 精确时间点(cron 表达式) |
| 行为 | 检查是否需要处理,智能决策 | 无论如何都执行指定任务 |
| 会话上下文 | 共享主会话,知道你在做什么 | 可隔离,独立会话不污染历史 |
| 适合场景 | 监控收件箱、日历、项目状态 | 每天 9 点发简报、每周分析 |
| 成本 | 一次心跳覆盖多项检查,更经济 | 每个 job 独立消耗 token |
一句话选择原则:需要精确时间点 → Cron;需要周期性"有没有需要关注的事" → Heartbeat。
成本控制:心跳不等于烧钱
lightContext: true:只注入HEARTBEAT.md,不携带完整对话历史,大幅减少输入 tokenisolatedSession: true:每次独立会话,避免上下文膨胀- HEARTBEAT_OK 静默丢弃:大多数心跳什么都不做,几乎零额外成本
- 指定轻量模型:心跳任务不需要 Opus,用 Haiku 级别的模型完全够用
实战配置:一个真实的 24/7 Agent 设置
{
"agents": {
"defaults": {
"heartbeat": {
"every": "30m",
"target": "last",
"lightContext": true,
"isolatedSession": true,
"model": "anthropic/claude-haiku-3-5"
}
}
}
}
配套的 HEARTBEAT.md:
# 我的 Agent 心跳清单
## 必检项
- 检查有无未读的紧急邮件(发件人包含 boss 或标题含 URGENT)
- 查看未来 1 小时内有无日历事件
## 条件触发
- 如果有后台下载/处理任务完成,汇总结果并通知
- 如果超过 4 小时没有任何活动,发一条轻量签到
## 不需要处理时
回复 HEARTBEAT_OK,不要发送任何消息。
小结:心跳机制的本质
Heartbeat 不是一个花哨的功能,它是 OpenClaw 整个"主动 Agent"哲学的核心实现。它回答了一个关键问题:
如何让 AI 在没有人类触发的情况下,有意义地主动工作?
答案是:给它一个稳定的时钟节律,一份清晰的任务清单,以及一个"没事别打扰"的静默协议。
配合 Cron 的精确调度、HEARTBEAT.md 的自我编程能力,一个真正意义上 24/7 自治运行的本地 AI Agent 就成型了。
它不需要你一直盯着,它盯着你需要盯的事情。
参考资料:OpenClaw 官方 Heartbeat 文档 · Cron vs Heartbeat · OpenClaw 三大超能力解析