自动化问题
调度(Schedule)和心跳(Heartbeat)有什么区别?
| 对比项 | 调度(Schedule) | 心跳(Heartbeat) |
|---|---|---|
| 触发方式 | 按时间触发(定时/延迟/周期/cron) | 系统按固定间隔唤醒智能体 |
| 用途 | 在未来特定时刻执行指定任务 | 让智能体主动检查状态、监控变化 |
| 上下文 | 每次触发创建全新会话,不继承对话上下文 | 在当前智能体上下文中执行 |
| 典型场景 | "3 分钟后提醒我开会"、"每天 9 点生成日报" | "监控构建状态"、"定期检查邮件" |
| 管理方式 | ManageSchedule 工具 | heartbeat/ 目录下的配置 |
简单记忆:调度 = 闹钟(到时间做特定事),心跳 = 巡逻(定期看看有没有事)。
定时任务没有触发怎么办?
排查步骤:
- 确认调度存在 --- 使用 ManageSchedule(action=list)查看调度列表,确认任务未被删除或取消
- 检查触发时间 --- 确认 trigger_value 的时区正确(使用带时区的 ISO 格式,如
2026-07-26T09:00:00+08:00) - 检查应用是否运行 --- 调度需要 DesireCore 在运行中才能触发;应用关闭期间到期的调度会在下次启动后补触发
- 检查执行权限 --- 调度的执行受审批模式约束,需确认模式下允许对应操作
如何查看调度执行历史?
调度每次触发会创建一个新的会话(Run)。查看方式:
- 在智能体的对话历史中找到对应时间的会话记录
- 调度触发时的 prompt 会作为该会话的第一条消息
- 如果调度执行失败,可以在会话记录中看到错误信息
心跳通知太频繁怎么调整?
如果智能体的心跳检查产生过多通知:
- 调整心跳间隔 --- 修改 heartbeat 配置中的检查频率
- 使用 notify=false --- 无变化时静默记录,不发送通知
- 优化检查逻辑 --- 只在确实有变化或需要关注时才设置 notify=true
提示
好的心跳实践:大多数时候返回 no_change(静默),只在发现异常或重要变化时才通知用户。
Sleep 和 Schedule 该用哪个?
| 场景 | 选择 | 原因 |
|---|---|---|
| 等 5 秒后检查构建状态 | Sleep | 需要拿到结果后继续当前任务 |
| 3 分钟后提醒开会 | Schedule | 独立任务,不需要当前上下文 |
| 轮询等待下载完成 | Sleep | 在同一任务链中循环检查 |
| 每天早上 9 点生成报告 | Schedule(cron) | 周期性独立任务 |
核心区别:Sleep 在当前会话中阻塞等待(保留上下文),Schedule 到期时创建全新会话(无上下文)。
如何创建周期性定时任务?
使用 ManageSchedule 工具,支持四种触发类型:
| 类型 | 说明 | 示例 |
|---|---|---|
delay | 延迟执行一次 | ISO Duration:PT30M(30 分钟后) |
at | 指定时刻执行一次 | 2026-07-26T09:00:00+08:00 |
interval | 固定间隔重复 | PT1H(每小时) |
cron | Cron 表达式 | 0 9 * * 1-5(工作日 9 点) |
示例 prompt:"每周一早上 9 点提醒我查看周报"→ trigger_type=cron, trigger_value="0 9 * * 1"
调度任务执行失败如何排查?
- 查看会话记录 --- 找到调度触发时创建的会话,查看错误信息
- 检查 prompt 是否清晰 --- 调度的 prompt 应包含足够的上下文,因为新会话不继承之前的对话
- 检查依赖服务 --- 如果任务需要网络、特定文件或 API,确认它们在触发时可用
- 检查审批模式 --- 需确认的审批模式下,无人值守的调度可能因等待审批而超时
注意
调度的 prompt 中不要引用"上次对话的内容"或"之前的上下文"——每次触发都是全新会话,没有历史记忆。需要引用信息时,在 prompt 中直接写明。