跳到主要内容

Cron 内部机制

Hermes 的定时任务功能主要在以下文件中实现:

  • cron/jobs.py
  • cron/scheduler.py
  • tools/cronjob_tools.py
  • gateway/run.py
  • hermes_cli/cron.py

调度模型

Hermes 支持:

  • 一次性延迟任务
  • 间隔任务
  • cron 表达式
  • 明确的时间戳

面向模型的接口是一个单一的 cronjob 工具,提供操作风格的动作:

  • create
  • list
  • update
  • pause
  • resume
  • run
  • remove

任务存储

定时任务存储在 Hermes 管理的本地状态中(~/.hermes/cron/jobs.json),具有原子写入语义。

每个任务可以包含:

  • 提示词
  • 调度元数据
  • 重复计数器
  • 交付目标
  • 生命周期状态(scheduledpausedcompleted 等)
  • 零个、一个或多个附加技能

对于仅存储了旧的单一 skill 字段或没有新生命周期字段的旧任务,系统保持了向后兼容性。

运行时行为

调度器会:

  • 加载任务
  • 计算到期任务
  • 在新的代理会话中执行任务
  • 可选择在提示词前注入一个或多个技能
  • 处理重复计数器
  • 更新下次运行元数据和状态

在网关模式下,定时任务调度被集成到长期运行的网关循环中。

基于技能的任务

一个定时任务可以附加多个技能。在运行时,Hermes 会按顺序加载这些技能,然后将任务提示词作为任务指令附加在后面。

这使得定时任务可以复用指导内容,而无需用户将完整的技能内容粘贴到定时任务的提示词中。

递归防护

由定时任务启动的会话会禁用 cronjob 工具集。这可以防止一个定时任务递归地创建或修改更多定时任务,从而意外地激增令牌使用量或调度器负载。

交付模型

定时任务可以交付到:

  • 原始聊天
  • 本地文件
  • 平台的主频道
  • 明确的平台/聊天 ID

锁定机制

Hermes 使用基于锁的保护机制,确保重叠的调度器周期不会重复执行同一批到期任务。

相关文档