# ADR-0007: 智能评估 OpenClaw 集成采用 Cron 池模式 **状态**: 已接受 **日期**: 2026-08-11 **决策者**: 架构团队 **相关**: ADR-0003(评估活动分期)、CONTEXT.md(智能评估词汇) ## Context 智能评估(Intelligent Evaluation)需要 OpenClaw 作为"虚拟用户大脑"自主规划和执行评测任务。关键争议在于:**一个智能评估如何与 OpenClaw 的执行单元关联**。 ### 核心矛盾 1. **自主性 vs 可扩展性**: - 保持 OpenClaw 自主性(每个评估独立决策)→ 一个评估一个 cron → cron 爆炸 - 解决 cron 爆炸(共享 cron)→ OpenClaw 失去自主性 2. **耐久性 vs 灵活性**: - 长 session(上下文连续)→ OpenClaw 重启丢失 - 多 session(耐久)→ 上下文割裂 3. **平台控制 vs OpenClaw 自治**: - 平台调度(精确控制)→ OpenClaw 退化为执行器 - OpenClaw 自治(灵活)→ 平台失去控制 ### 已否决的方案 - **一个评估 = 一个 OpenClaw Agent**:OpenClaw 不支持持久 agent 概念 - **一个评估 = 一个长 Session**:长 session 超时,重启丢失 - **平台调度 + Webhook 触发**:OpenClaw 失去自主性,退化为静态评估 - **全局单 Cron + 批量处理**:单次唤醒耗时长,无并发 - **事件驱动 + Cron 兜底**:OpenClaw 无法自主规划 ## Decision 采用 **Cron 池模式**: 1. **OpenClaw 维护 Cron 池**(5-20 个,动态扩容/缩容) - 每个 cron 是"工作单元",可以处理任意评估 - Cron state 存储 `{"status": "idle/busy", "eval_id": "..."}` - 每分钟唤醒,自主决策"现在该做什么" 2. **平台维护任务队列**(持久化在 DB) - 扫描所有 executing 评估 - 判断哪些需要立即处理(时段到期、有欠账) - 按优先级排序,提供给 OpenClaw 3. **Cron 每次唤醒时**: - 如果 idle → 从平台队列取一个任务 - 如果 busy → 继续处理当前评估 - 处理完 → 归还 cron 到池中 4. **池管理**: - 平台负责创建/删除 cron(通过 OpenClaw CLI 或 Gateway API) - 负载高时扩容(busy/total > 0.8) - 负载低时缩容(idle > min_size * 2) ## Consequences ### 优点 1. **保持 OpenClaw 自主性**:每个 cron 有完整的决策权(规划、执行、调整) 2. **可扩展性**:池化复用,最多 20 个 cron,支持 100+ 并发评估(排队) 3. **耐久性好**:Cron state + 任务队列都持久化,重启可恢复 4. **资源可控**:限制并发评估数量(最多 20 个) 5. **弹性伸缩**:根据负载自动扩容/缩容 6. **技术可行**:OpenClaw 支持动态创建/删除 cron(CLI + Gateway API) ### 缺点 1. **复杂度高**:需要实现池管理、任务队列、超时检测、故障恢复 2. **状态同步**:Cron state 与平台状态需要保持一致 3. **调试困难**:需要追踪 cron 分配历史和决策日志 ### 风险与缓解 | 风险 | 缓解措施 | |------|---------| | Cron 卡死 | 平台检测 10 分钟未活跃 → 标记评估 stuck → 分配新 cron | | 池满(20 个都在用) | 新评估排队等待,前端提示"排队中" | | OpenClaw 重启 | Cron state 持久化在 SQLite,重启后恢复 | | 平台重启 | 任务队列持久化在 DB,重启后恢复 | | 状态不一致 | 平台定期对账(每 5 分钟),发现不一致自动修复 | ### 性能影响 - **响应延迟**:分钟级(cron 每分钟触发),对于 24 小时窗口的评估可接受 - **资源消耗**:最多 20 个 cron 同时运行,每分钟 20 次唤醒 - **数据库压力**:任务队列查询每分钟 20 次,需要索引优化 ## Implementation Notes ### 技术验证 OpenClaw 支持动态创建/删除 cron: - CLI: `openclaw automations create/remove` - Gateway API: 文档明确支持(具体端点待验证) - State 持久化: SQLite,16KB 自定义 JSON ### 关键设计决策 1. **池管理归属**:平台负责创建/删除 cron,OpenClaw 负责执行 2. **状态权威**:平台 DB 是任务状态的权威,cron state 是执行上下文 3. **超时机制**:评估 2 小时未完成 → 强制归还 cron;cron 10 分钟未活跃 → 标记卡死 4. **公平性**:任务队列按优先级排序(时段到期 > 欠账多 > 等待时间长) ### 后续优化 - **事件驱动**:平台状态变更时主动触发 OpenClaw(webhook),减少 cron 轮询压力 - **优先级队列**:支持用户手动提升某个评估的优先级 - **监控告警**:池使用率、任务积压、cron 卡死率 ## References - [OpenClaw Cron Jobs Documentation](https://docs.openclaw.ai/automation/cron-jobs) - [OpenClaw CLI Cron Commands](https://docs.openclaw.ai/cli/cron) - CONTEXT.md「智能评估」章节 - ADR-0003「评估活动分期」