Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help


会话心跳检测(/heartbeat)

/heartbeat 会为当前会话发送一条周期性指令。每当会话处于空闲状态且达到预设的时间间隔后,系统就会像普通用户轮次一样触发提示——对话内容、上下文以及提示词缓存均保持不变。

/heartbeat every 10m Check the deployment and report meaningful changes

该机制灵感源自 Prime-Agent 的 /heartbeat 功能。Hermes 版本严格遵循了消息流的约束规则:心跳信号仅会在对话轮次之间发送(绝不会在任务执行过程中插入),且以普通的用户-角色消息形式呈现。

Heartbeat 与 cron:我该选哪个?

二者外观相似,但功能各异:

/heartbeathermes cron
执行场景当前对话——保留完整上下文及讨论历史每次触发都会启动一个全新的独立会话
进程重启后状态状态得以保留(存储在 SessionDB 中);网关会在重启后自动恢复任务是——具备完全持久化的调度能力
任务数量每个会话仅一个无限制的任务数量
最佳适用场景“在我们处理任务的同时,持续监控当前对话中的X内容”长期运行的任务、报告生成、监控功能以及定时交付任务

经验法则:如果周期性任务需要依赖对话上下文,请使用 /heartbeat;若是独立运行的任务,则适合使用 cron。

命令说明

命令功能
/heartbeat every <间隔时间> <提示语>设置(或替换)会话的心跳信号。支持的间隔时间为:90s、10m、2h、1d(最小间隔为 60 秒)。
/heartbeat 或 /heartbeat status显示当前心跳信号的间隔时间以及下一次触发时间。
/heartbeat pause暂停发送心跳信号,但不会清除现有设置。
/heartbeat resume恢复心跳信号的发送(重新启动计时器——不会立即发送过期数据)。
/heartbeat clear删除当前的心跳信号设置。

/hb 是该命令的别名。该功能在 CLI、TUI/桌面应用以及网关平台上均可使用(在 Slack 上则需使用 /hermes heartbeat …)。

行为细节

  • 仅空闲时触发。心跳信号不会中断正在处理的轮次。若在预定时间点代理处于忙碌状态,它将在下一次空闲时再发送心跳信号。在网关端,处于监控状态的会话会主动恢复活跃状态,无需新的入站消息。
  • 错过的计时间隔合并处理。如果某个会话在多个时间间隔内一直处于忙碌状态(或进程未运行),系统只会触发一次心跳信号,而不会累积未处理的信号。计时器会在每次发送心跳时重新校准。
  • 用户消息优先。已排队的用户消息始终具有最高优先级;心跳信号会等待输入队列中的消息处理完毕。
  • 缓存安全。注入的提示内容属于普通用户消息,系统不会对其进行任何修改,也不会更改工具集配置。
  • 网关自动恢复。系统启动时会利用当前保存的对话记录和线程路由信息,在对应的用户配置文件中恢复活跃的心跳信号发送。在临时存储故障或适配器停机后,系统会自动尝试恢复;而已暂停或清除的心跳信号以及挂起的对话不会自动重启,也无需新的聊天消息。
  • 状态持久性与对话边界。状态存储在 SessionDB.state_meta 中,键名为 heartbeat:<session_id>,并会随着上下文压缩后的对话轮转而变化。在消息网关中,通过重置、切换或暂停来结束当前对话会清除其心跳信号;即便之后恢复该已归档的对话,也无法使其重新活跃。触发任务需要对应的进程(CLI 会话或网关)处于运行状态。在会话解析完成且代理开始执行之前,系统会再次检查该网关是否已被纳入调度列表:它虽可跟随压缩后的子对话继续运行,但无法将其原有的指令带入新的重置或切换后的对话中。
  • 执行计数机制。网关在适配器被接纳时会预留一个指定的调度时段。如果该次尝试在进入代理执行阶段之前就结束(包括取消操作,或是路由失败、授权拒绝、紧急停止或准备阶段被驳回),除非后续调度计划发生变动,否则该预留时段将会被退还。一旦进入代理执行阶段,即便任务执行失败或被中断,该计时仍会被计入。但这一计数并不代表模型已成功响应或消息已成功发送;进程的突然终止可能会导致退还操作的回调无法执行。
  • 避免无效工作的保护机制。系统会注入特定提示,要求代理仅作简短回复,并在未出现任何有意义的变化时立即停止,从而避免因空闲的心跳信号而产生不必要的处理工作。

示例

You: /heartbeat every 15m Check whether the CI run for PR #1234 finished; summarize the result when it does

  ♥ Heartbeat set (every 15m): Check whether the CI run for PR #1234 finished; ...

[15 minutes of you working on other things in the same session]

Hermes: [Heartbeat — recurring instruction, fires every 15m]
  💻 gh pr checks 1234   (1.2s)
  CI is still running (14/37 checks complete). Nothing to report yet.

当答案不再发生变化时,可使用 /heartbeat clear 停止其监测——或者让它继续保持监控状态。