自动化与定时任务教程

advanced
## 自动化机制选择指南 OpenClaw 提供了五种自动化机制,适用于不同场景。先看一张决策表,帮你快速选择: | 机制 | 触发方式 | 精度 | 适用场景 | 复杂度 | |------|----------|------|----------|--------| | **Cron** | 精确定时 | 分钟级 | 每天 9 点发报告、每周一清理日志 | ⭐⭐ | | **Heartbeat** | 近似周期 | ~30 分钟 | 定期检查收件箱、监控通知 | ⭐ | | **Hooks** | 事件驱动 | 实时 | 新会话初始化、会话压缩后处理 | ⭐⭐⭐ | | **Standing Orders** | 持久指令 | 每次会话 | "每次回答都用中文"、"总是先搜索再回答" | ⭐ | | **Task Flow** | 多步骤编排 | 按步骤 | 复杂工作流、需要修订跟踪的任务 | ⭐⭐⭐⭐ | 简单来说: - 需要**精确时间**触发 → 用 **Cron** - 需要**定期巡检**但不要求精确 → 用 **Heartbeat** - 需要**响应特定事件** → 用 **Hooks** - 需要**永久生效的行为规则** → 用 **Standing Orders** - 需要**多步骤复杂流程** → 用 **Task Flow** ## Cron 定时任务 Cron 是最直观的定时机制,让智能体在指定时间自动执行任务。 ### 基本用法 ```bash # 添加一个定时任务 openclaw cron add "每天早上 9 点给我发天气预报" --schedule "0 9 * * *" # 查看所有定时任务 openclaw cron list # 删除定时任务 openclaw cron remove ``` ### Cron 表达式速查 ``` ┌───────────── 分钟 (0-59) │ ┌───────────── 小时 (0-23) │ │ ┌───────────── 日 (1-31) │ │ │ ┌───────────── 月 (1-12) │ │ │ │ ┌───────────── 星期 (0-7, 0和7都是周日) │ │ │ │ │ * * * * * ``` 常用表达式: | 表达式 | 含义 | |--------|------| | `0 9 * * *` | 每天早上 9:00 | | `0 9 * * 1` | 每周一早上 9:00 | | `0 9,18 * * *` | 每天 9:00 和 18:00 | | `*/30 * * * *` | 每 30 分钟 | | `0 0 1 * *` | 每月 1 号 0:00 | | `0 9 * * 1-5` | 工作日每天 9:00 | ### 一次性提醒 如果只需要一次性提醒(不是周期性的),使用 `--at` 参数: ```bash # 明天下午 3 点提醒我开会 openclaw cron add "提醒我下午 3 点有产品评审会议" --at "2025-01-16 15:00" ``` ### 输出到渠道或 Webhook 定时任务的输出可以发送到指定渠道: ```bash # 输出到 Telegram openclaw cron add "检查服务器状态并报告" --schedule "0 */6 * * *" --channel telegram # 输出到 Webhook openclaw cron add "生成日报" --schedule "0 18 * * 1-5" --webhook "https://hooks.example.com/daily" ``` ## Heartbeat 周期检查 Heartbeat 是一种"近似周期"机制,默认每 30 分钟触发一次。它不像 Cron 那样精确,但更适合"定期巡检"类任务。 ### 工作原理 1. Gateway 每隔约 30 分钟触发一次 Heartbeat 2. 智能体读取 `HEARTBEAT.md` 文件中的检查清单 3. 逐项执行检查任务 4. 将结果汇总或发送通知 ### 配置 HEARTBEAT.md 在工作区中创建 `HEARTBEAT.md`: ```markdown # Heartbeat 检查清单 ## 收件箱检查 检查邮箱是否有新邮件,如果有重要邮件,通过 Telegram 通知我。 ## 日历提醒 检查接下来 2 小时内是否有会议,如果有,提前提醒我。 ## 通知汇总 检查 GitHub 通知,汇总未读的 PR 评审请求。 ``` ### 调整 Heartbeat 间隔 在 `openclaw.json` 中配置: ```json { "heartbeat": { "interval": 1800, "enabled": true } } ``` `interval` 单位为秒,默认 1800(30 分钟)。 ### 适用场景 - **收件箱监控**:定期检查邮件,汇总重要信息 - **日历提醒**:提前通知即将到来的会议 - **通知聚合**:批量处理 GitHub/GitLab 通知 - **状态巡检**:定期检查服务器或服务状态 ## Hooks 事件脚本 Hooks 是事件驱动的自动化机制,当特定事件发生时自动执行脚本。 ### 支持的事件类型 | 事件 | 触发时机 | 典型用途 | |------|----------|----------| | `/new` | 新会话创建 | 初始化会话、加载上下文 | | `/reset` | 会话重置 | 清理临时数据 | | `/stop` | 会话结束 | 保存会话摘要 | | `compaction` | 会话压缩完成 | 压缩后处理、更新记忆 | | `gateway.start` | Gateway 启动 | 初始化检查、发送上线通知 | | `message.pre` | 消息处理前 | 消息预处理、过滤 | | `message.post` | 消息处理后 | 日志记录、统计 | | `tool.pre` | 工具调用前 | 权限检查、参数验证 | | `tool.post` | 工具调用后 | 结果处理、审计日志 | ### Hook 文件结构 Hooks 存放在工作区的 `hooks/` 目录下: ``` ~/.openclaw/workspace/ └── hooks/ ├── on-new-session.md # /new 事件 ├── on-compaction.md # 压缩事件 └── on-gateway-start.md # Gateway 启动事件 ``` ### 创建第一个 Hook 创建一个新会话初始化 Hook: ```markdown --- event: /new --- # 新会话初始化 当新会话开始时: 1. 读取 MEMORY.md 中的用户偏好 2. 检查今天的日历安排 3. 用一句话问候用户,提及今天的重要事项 ``` ### 按事件类型过滤 一个 Hook 文件可以监听多个事件: ```markdown --- event: - /new - /reset --- # 会话初始化/重置 无论是新会话还是重置会话,都执行以下初始化步骤... ``` ### CLI 管理命令 ```bash # 列出所有 Hooks openclaw hooks list # 查看 Hook 详情 openclaw hooks show on-new-session # 测试触发 Hook openclaw hooks trigger on-new-session ``` ## Standing Orders 持久指令 Standing Orders 是写在 `AGENTS.md` 中的永久指令,每次会话都会生效。它不是"定时"触发,而是"始终"生效。 ### 使用方式 在 `AGENTS.md` 中添加持久指令: ```markdown # Standing Orders ## 语言规则 - 始终使用中文回答 - 技术术语保留英文原文 - 代码注释用中文 ## 行为规则 - 回答问题前先搜索最新信息 - 涉及文件操作时先确认路径 - 执行危险命令前必须征求确认 ## 输出格式 - 代码块标注语言类型 - 长回答使用标题分段 - 列表不超过 10 项 ``` ### 与 Hooks 的区别 | 对比 | Standing Orders | Hooks | |------|----------------|-------| | 生效时机 | 每次会话的每条消息 | 特定事件触发时 | | 定义位置 | AGENTS.md | hooks/ 目录下的独立文件 | | 执行方式 | 作为系统提示词注入 | 作为独立任务执行 | | 适用场景 | 行为规则、输出格式 | 初始化、清理、通知 | ## Task Flow 多步骤编排 Task Flow 适用于需要多个步骤、可能跨越多次对话的复杂任务。 ### 基本概念 Task Flow 将一个大任务拆分为多个步骤,每个步骤可以: - 依赖前一步的输出 - 需要人工确认后继续 - 自动跟踪修订历史 ### 创建 Task Flow ```bash # 创建一个新的 Task Flow openclaw tasks create "部署新版本" ``` Task Flow 文件示例: ```markdown # 部署新版本 ## 步骤 1:代码检查 - [ ] 运行测试套件 - [ ] 检查 lint 错误 - [ ] 确认版本号已更新 ## 步骤 2:构建 - [ ] 执行生产构建 - [ ] 验证构建产物 ## 步骤 3:部署 - [ ] 备份当前版本 - [ ] 上传新版本到服务器 - [ ] 重启服务 ## 步骤 4:验证 - [ ] 检查服务状态 - [ ] 运行冒烟测试 - [ ] 通知团队部署完成 ``` ### 修订跟踪 Task Flow 自动记录每个步骤的执行时间和结果,方便回溯: ```bash # 查看 Task Flow 历史 openclaw tasks history "部署新版本" # 查看某个步骤的详情 openclaw tasks show "部署新版本" --step 3 ``` ## 常用场景示例 ### 每日报告 使用 Cron 每天下班前自动生成工作日报: ```bash openclaw cron add "汇总今天的工作内容,生成日报发送到 Telegram" \ --schedule "0 18 * * 1-5" \ --channel telegram ``` ### 收件箱监控 使用 Heartbeat 定期检查邮箱: ```markdown # HEARTBEAT.md ## 邮件检查 每次 Heartbeat 时检查 Gmail 收件箱: - 如果有标记为"紧急"的邮件,立即通过 WhatsApp 通知我 - 其他新邮件汇总为列表,等我主动询问时再报告 ``` ### 日历提醒 使用 Cron 在会议前提醒: ```bash # 每天早上 8:30 检查今天的日程 openclaw cron add "检查今天的日历,列出所有会议和截止日期" \ --schedule "30 8 * * *" ``` ### PR 审查通知 使用 Heartbeat 监控 GitHub PR: ```markdown # HEARTBEAT.md ## GitHub PR 监控 检查我负责审查的 PR: - 新的 PR 请求 → 通知我 - 已审查的 PR 有新提交 → 提醒我重新查看 - 超过 48 小时未审查的 PR → 发送紧急提醒 ``` ### Gateway 启动通知 使用 Hook 在 Gateway 启动时发送通知: ```markdown --- event: gateway.start --- # Gateway 启动通知 Gateway 启动后: 1. 检查所有渠道连接状态 2. 如果有渠道未连接,通过可用渠道通知我 3. 报告当前运行的智能体列表 ``` ## 组合使用 实际场景中,多种自动化机制经常组合使用: ``` Standing Orders(始终生效) ↓ 定义基本行为规则 Hooks(事件触发) ↓ 处理会话生命周期事件 Heartbeat(周期巡检) ↓ 定期检查外部状态 Cron(精确定时) ↓ 在特定时间执行任务 Task Flow(复杂编排) ↓ 管理多步骤工作流 ``` 比如一个完整的"每日工作助手"配置: - **Standing Orders**:始终用中文回答,优先使用搜索工具 - **Hook(/new)**:新会话时自动加载今天的待办事项 - **Heartbeat**:每 30 分钟检查邮箱和日历 - **Cron**:每天 9:00 发送今日计划,18:00 发送日报 - **Task Flow**:管理周报编写流程 ## 小结 OpenClaw 的自动化体系覆盖了从简单定时到复杂编排的各种需求: - **Cron** 适合精确定时任务 - **Heartbeat** 适合周期性巡检 - **Hooks** 适合事件驱动的自动化 - **Standing Orders** 适合永久生效的行为规则 - **Task Flow** 适合多步骤复杂流程 根据实际需求选择合适的机制,或组合使用多种机制,让智能体真正成为你的自动化助手。 --- #OpenClaw自动化 #定时任务 #Cron #Heartbeat #龙虾技能库