Hermes Agent 如何按时主动找你?拆解自动化调度与定时任务机制
摘要
Hermes Agent 能按时主动找你,不是因为它一直守在聊天窗口里等待,而是因为自动任务把"什么时候执行""执行什么""结果发到哪里"三件事保存成了一份可重复调度的配置。到点后,调度器发起一次独立执行——它不是把旧对话机械重放,而是按任务说明重新做一遍工作,再按通知设置投递结果。在 LightVela 上,一份自动任务的配置项是:名称、执行时间(固定星期、固定间隔、单次执行三选一)、任务说明、生效时间段、通知方式。需要澄清一个常见误传:自动任务的配置里并没有"锁定某个模型"这一项,因此"切换模型后要逐个同步自动任务的模型"并不成立。写好自动任务的关键在任务说明:因为执行时没有人在旁边追问,提示词必须自带目标、边界和输出格式。
引子:"主动"并不等于一直盯着你
"每天早上给我一份新闻摘要"听起来是一句普通指令,但它和"现在给我一份新闻摘要"有本质区别。
后者是一次对话:你在场,可以随时追问、纠正、补充。前者是一份要在你不在场时执行的工作:没人确认它理解得对不对,没人在结果不合预期时当场喊停,也没人告诉它"发到哪里我才看得到"。
所以"主动"这件事的真正难点不是"定时触发"这个技术动作——那是最简单的部分。难点在于:把一次有人在场的对话,改写成一份无人在场也能正确完成的工作说明。 这篇文章讲清楚这份说明由什么构成,以及怎么写才靠得住。
一、一份自动任务包含什么
在 LightVela 上创建自动任务时,需要填写的配置项如下。
| 配置项 | 它回答的问题 | 说明 |
|---|---|---|
| 名称 | 这份任务叫什么? | 用于在任务列表中识别,建议写成可辨认的动作,而不是"任务 1" |
| 执行时间 | 什么时候运行? | 固定星期、固定间隔、单次执行,三者选一 |
| 任务说明 | 要完成什么? | 提示词,供 Agent 执行时依据 |
| 生效时间段 | 在哪段时间内有效? | 限定任务的有效运行时段,留空代表全天候持续运行 |
| 通知方式 | 结果发到哪里? | 可选开关,勾选接收执行通知的渠道 |
这里需要明确一件常被误传的事:配置项里没有"模型"这一栏。 自动任务不会锁定某个特定模型,因此网上流传的"切换模型后必须逐个检查并同步自动任务所用模型"这种说法,在这套产品形态下并不成立。切换模型后值得复查的是任务输出的质量,而不是去找一个不存在的字段。关于模型与 Agent 的分层关系,可参考《Hermes Agent 的"大脑"可以替换吗?模型层与 Agent 层如何分工》。
另外,执行时间是"固定星期 / 固定间隔 / 单次执行"三选一,而不是任意 Cron 表达式。理解这一点能避免按 Cron 思维去设计过于复杂的调度,然后发现填不进去。
二、三种执行时间该怎么选
三种模式对应的是三类不同需求,选错会导致任务行为和预期不符。
固定星期:适合与人的作息或工作周期绑定的任务。例如每周一早上汇总上周进展、每周日提醒浇花。它的特点是锚定在具体时点,适合"我希望在这个时间看到它"的场景。
固定间隔:适合与时点无关、只关心频率的任务。例如每隔几小时检查一次某个信息源。它的特点是从上次执行开始计时,适合"我希望它保持这个节奏"的场景。
单次执行:适合一次性事项。例如某个特定日期提醒你办一件事。它执行完就结束,不需要事后手动关闭。
选择时的一个判断依据:你的需求描述里有没有"几点"。 有具体时点的用固定星期,只有频率的用固定间隔,只发生一次的用单次执行。
三、生效时间段解决什么问题
生效时间段容易被忽略,但它解决的是一类真实困扰:你希望任务保持某个频率,但不希望它在某些时段打扰你。
典型场景是间隔式任务。如果你设置"每隔两小时检查一次",在没有生效时间段限制的情况下,它会全天候运行——包括凌晨。加上生效时间段后,任务只在你指定的时段内运行。
留空代表全天候持续运行。所以如果你发现任务在不该运行的时间执行了,先检查这一项是不是留空了。
四、到点之后实际发生了什么
这是最容易产生误解的环节。很多人以为定时任务是"把你当初那句话再发一遍给 Agent",这个理解会导致提示词写得过于依赖上下文。
实际过程是:调度器到达目标时间后,触发一次独立的 Agent 执行。这次执行会依据任务说明重新完成工作,而不是回放当初创建任务时的那段对话。
这个区别带来一个重要推论:任务说明必须自带上下文。 你在创建任务时脑子里的背景、你和 Agent 之前聊过的细节,如果没有写进任务说明或已沉淀进长期记忆,执行时就不一定会被用上。
举个对比:
- 依赖上下文的写法:"像刚才那样帮我整理一份。" —— 执行时"刚才"已经不存在了。
- 自带上下文的写法:"汇总过去 24 小时内未读邮件,按发件人分组,每组不超过三条,只保留需要我回复的;输出为条目列表,每条不超过一行。"
后者能在无人在场时稳定执行,因为它把目标、范围、筛选标准、输出格式都写进去了。
五、怎么写一份靠得住的任务说明
结合上面的机制,一份可靠的任务说明通常包含四部分。
第一,明确的目标动作。 说清要"做什么",而不是"关注一下某件事"。"关注"无法判断是否完成,"汇总并列出"可以。
第二,明确的范围边界。 时间范围(过去 24 小时)、数量上限(每组不超过三条)、筛选条件(只保留需要我回复的)。没有边界的任务在不同时间可能产出差异极大的结果。
第三,明确的输出格式。 是列表还是段落、要不要分组、每条多长。因为你不在场,无法当场说"太长了,短一点"。
第四,明确的例外处理。 如果没有符合条件的内容,应该发一条"今日无待处理事项",还是什么都不发?这一点不写清楚,你会分不清"任务没执行"和"任务执行了但没内容"。
第四点常被忽略,但它直接影响你对任务健康状态的判断。
六、上线一份自动任务的推荐顺序
不要把"创建任务"当成一步完成的操作。推荐按下面的顺序上线,能在早期发现大部分问题。
- 先在聊天里手动验证一次。 把你准备写进任务说明的提示词直接发给 Agent,看输出是否符合预期。这一步能在没有调度干扰的情况下先把提示词调好。
- 根据手动验证的结果修订提示词。 常见问题是输出太长、范围太宽、格式不稳定,这些都在这一步解决。
- 创建任务并设置执行时间。 按第二节的判断依据选择模式。
- 确认通知方式指向你会看到的渠道。 结果发到一个你不看的地方,等于没执行。
- 必要时设置生效时间段。 尤其是间隔式任务,避免深夜打扰。
- 等一次真实执行,然后查看运行记录。 这是关键一步——不要只确认"任务已创建"就认为完成了。 创建成功只说明配置保存了,不代表执行结果符合预期。
- 根据首次执行结果再调一轮提示词。 真实执行环境与手动测试可能有差异,这一轮修订往往能显著提升稳定性。
产品侧支持在任务列表中查看任务详情、编辑修改、暂停运行或删除任务,所以第 7 步的调整成本很低。如果一份任务暂时不需要,优先用暂停而不是删除,配置可以留着后续复用。
七、常见问题与排查方向
| 现象 | 更可能的原因 | 建议动作 |
|---|---|---|
| 任务到点没反应 | 任务被暂停,或当前时间不在生效时间段内 | 检查任务状态与生效时间段设置 |
| 执行了但没收到结果 | 通知方式未勾选,或投递渠道不是你在看的那个 | 检查通知方式配置 |
| 结果内容忽长忽短、格式不稳 | 任务说明缺少范围边界与输出格式 | 按第五节补齐四要素 |
| 结果和手动测试时差别很大 | 任务说明依赖了创建时的对话上下文 | 改成自带上下文的写法 |
| 分不清是没执行还是没内容 | 任务说明没写例外处理 | 补充"无内容时也发一条说明" |
| 深夜被打扰 | 间隔式任务未设置生效时间段 | 设置生效时间段 |
排查时的一个通用原则:先区分"没执行"和"执行了但结果不对"。 前者去查任务状态、生效时间段、通知配置;后者去查任务说明本身。这两类问题的处理路径完全不同,混在一起查会浪费时间。
八、LightVela 的做法:让主动工作可配置、可复查
Hermes 在机制上支持让 Agent 按计划工作,但使用者需要自己维护运行环境与调度可靠性。LightVela 的方向是把这件事做成可配置、可复查的产品能力:
- 模板降低起步成本:不清楚该配什么任务时,可以从现成模板中选用,再按自己的需求修改。
- 任务生命周期可管理:任务创建后可查看详情、编辑、暂停或删除,不必为了改一个条件而重建。
- 投递渠道可选:通知方式作为可选开关,让结果落到你真正会看到的渠道。
- 与其他能力解耦:自动任务与模型、技能、云存储各自独立配置,切换模型不会变更自动化设置。
- 异常可追溯:执行异常时可结合诊断中心的近期日志判断问题所在。
小结
- 自动任务的本质是把"何时执行 / 执行什么 / 发到哪里"保存成一份可重复调度的配置。
- 配置项为:名称、执行时间(固定星期 / 固定间隔 / 单次执行)、任务说明、生效时间段、通知方式。
- 配置里没有"模型"这一项,"换模型要同步自动任务模型"是误传;执行时间也不是任意 Cron 表达式。
- 到点触发的是一次独立执行,不是回放旧对话,所以任务说明必须自带上下文。
- 可靠的任务说明包含四部分:目标动作、范围边界、输出格式、例外处理。
- 上线顺序的关键是最后一步:等一次真实执行并查看运行记录,而不是只确认任务已创建。