OpenClaw 高可用工作流设计(2026-03-25)
为什么要谈 HA 工作流
AI Agent 作为生产系统的核心组件,一旦崩溃或卡死,整个自动化链条就会断掉。更糟糕的是,LLM 调用天然有延迟抖动、网络抖动、Provider 超载——这些不是小概率事件,而是常态。所以高可用不是锦上添花,而是把 AI Agent 纳入生产体系的入门门槛。
OpenClaw 作为一个成熟的多渠道 AI Gateway,已经在架构层面内置了大量 HA 能力。这篇文章把那些分散在文档里的知识点串起来,给出一套可直接落地的 HA 工作流设计指南。
一、可靠性基石:三层容错架构
OpenClaw 的容错分为三层,理解它们是设计 HA 的第一步。
1.1 Provider 层——Retry Policy
每个 Provider(飞书、Telegram、Discord 等)都有独立的重试策略:
{
channels: {
telegram: {
retry: {
attempts: 3,
minDelayMs: 400,
maxDelayMs: 30000,
jitter: 0.1,
},
},
discord: {
retry: {
attempts: 3,
minDelayMs: 500,
maxDelayMs: 30000,
jitter: 0.1,
},
},
},
}
核心行为:
- 瞬时错误(429 Rate Limit / 5xx Server Error / 网络超时):自动指数退避重试
- 永久错误(认证失败、参数错误):直接失败,不重试
- Telegram 特色:支持
retry_after字段,精确遵循 Telegram 的速率限制
💡 实战建议:如果你的业务对消息送达有严格要求,不要依赖单一的飞书/Discord 推送,建议在业务层做幂等消息 ID + 消费确认。
1.2 Session 层——记忆与连续性
Session 是 OpenClaw 的状态单元。Session 的可靠性直接决定了 Agent 行为的稳定性。
// session compaction 配置(自动压缩历史)
session: {
compaction: {
threshold: 500_000, // tokens 上限
target: 350_000, // 压缩后目标
minInterval: "30m", // 至少30分钟一次
}
}
关键机制:
- Compaction:上下文超过阈值时自动 LLM 摘要压缩,不会丢失关键信息
- Session Pruning:定期裁剪旧 session,防止内存无限膨胀
- Memory 系统:
memory/YYYY-MM-DD.md做日常记录,MEMORY.md做长期记忆蒸馏
💡 实战建议:在 HEARTBEAT.md 里定期触发"记忆蒸馏"——把当日重要内容合并到 MEMORY.md。这比依赖 Session 自动压缩更可控。
1.3 Agent 层——Multi-Agent 隔离
多 Agent 架构不只是为了"分身",更是故障隔离的关键手段:
{
agents: {
list: [
{ id: "main", workspace: "~/.openclaw/workspace-main" },
{ id: "ops", workspace: "~/.openclaw/workspace-ops" },
],
},
bindings: [
{ agentId: "ops", match: { channel: "feishu", peer: { kind: "group", id: "oc_xxx" } } },
{ agentId: "main", match: { channel: "feishu" } },
],
}
HA 价值:
- 一个 Agent 崩溃不影响其他 Agent
- 每个 Agent 有独立 workspace、独立 session store、独立 auth profile
- 可以对关键业务 Agent 做资源优先级隔离
二、调度可靠性:Cron + Heartbeat 双轨制
调度系统是工作流的 CPU,也是 HA 设计里最需要精心规划的部分。
2.1 什么时候用 Cron,什么用 Heartbeat
核心原则只有一条:
| 场景 | 推荐 |
|---|---|
| 需要精确准点触发(如每日报告、整点提醒) | Cron(isolated) |
| 需要感知上下文做智能判断(如检查邮件+日历+通知) | Heartbeat |
| 需要隔离运行,不污染主会话历史 | Cron(isolated) |
| 需要不同模型处理(如轻量检查用 Sonnet,重度分析用 Opus) | Cron(isolated) |
| 一次性提醒 | Cron(--at) |
最佳组合:
- Heartbeat(30分钟一次):处理所有常规检查(收件箱、日历、通知)
- Cron isolated(每日定点):处理需要准点运行的业务(如日报生成、每周复盘)
- Cron main(system event):处理需要接入主会话上下文的提醒
2.2 Cron 的高可用配置
{
cron: {
enabled: true,
maxConcurrentRuns: 1, // 防止重入
retry: {
maxAttempts: 3,
backoffMs: [60_000, 120_000, 300_000],
retryOn: ["rate_limit", "overloaded", "network", "server_error"],
},
sessionRetention: "24h",
runLog: {
maxBytes: "2mb",
keepLines: 2000,
},
},
}
关键 HA 要点:
① 幂等设计:每次 Cron Job 运行的内容必须是幂等的。LLM 调用天然不幂等,建议:
❌ 错误:每次都生成新内容
message: "生成今日报告"
✅ 正确:基于日期确定性地处理
message: "检查 todo 队列状态,如有未完成任务则生成摘要,否则回复'无异常'"
② 定时任务防重入:设置 maxConcurrentRuns: 1 + 业务层幂等检查
③ 失败告警:Cron 运行结果通过 announce 模式发送到指定渠道
2.3 Heartbeat 的 HA 配置
Heartbeat 的 HA 核心在于主动压制无效触发:
{
agents: {
defaults: {
heartbeat: {
every: "30m",
target: "last",
activeHours: { start: "08:00", end: "22:00" },
},
},
},
}
HEARTBEAT.md 的幂等设计原则:
✅ 所有检查必须有明确的"无异常则静默"逻辑
❌ 避免每次都产生 LLM 调用(既浪费钱,又污染会话历史)
三、事件驱动:Hooks 的解耦价值
Hooks 是 OpenClaw 最被低估的 HA 工具。它本质上是事件总线,让你的工作流各环节真正解耦。
3.1 为什么 Hooks 比直接调用更可靠
❌ 错误方式:在 Agent 的 system prompt 里写"每次重置前先保存上下文"
→ Agent 可能因为上下文已满/LLM超时/网络抖动而根本没执行到那一步
✅ 正确方式:用 session-memory hook
→ Gateway 层面保证执行,跟 Agent 执行流完全解耦
3.2 关键 HA Hooks 推荐
① session-memory:每次 /new 自动保存上下文
openclaw hooks enable session-memory
这是最重要的 HA 工具之一——它确保你的 Agent 永远不会"失忆"。
② command-logger:审计所有命令执行
openclaw hooks enable command-logger
生产环境必开,方便事后追溯故障根因。
③ 自定义 Hook 示例:Cron 失败告警
const handler = async (event) => {
if (event.type !== "cron" || event.action !== "failed") return;
const msg = `[CRON ALERT] Job "${event.context.jobName}" failed: ${event.context.error}`;
event.messages.push(msg);
await fetch("https://your-monitoring.com/alert", {
method: "POST",
body: JSON.stringify({ job: event.context.jobName, error: event.context.error }),
});
};
export default handler;
3.3 Hooks 与 Cron 的配合
最佳实践:Cron 负责"何时做",Hooks 负责"做的时候顺便检查其他事"
Cron Job 触发(每日 9:00)
↓
Agent 执行主任务(生成日报)
↓
Hook 拦截 agent:bootstrap 事件 → 注入当日上下文
Hook 拦截 message:sent 事件 → 记录发送日志
这样每个环节独立可测试,单点故障不影响全局。
四、故障隔离:Per-Agent 沙箱与工具策略
Multi-Agent 架构的另一个巨大 HA 价值是资源隔离:
{
agents: {
list: [
{
id: "critical",
workspace: "~/.openclaw/workspace-critical",
sandbox: { mode: "all", scope: "agent" },
tools: { allow: ["read", "exec", "sessions_list", "sessions_history"] },
},
{
id: "sandbox",
workspace: "~/.openclaw/workspace-sandbox",
sandbox: { mode: "all", scope: "agent" },
tools: { allow: ["read", "exec"], deny: ["write", "browser", "feishu_im_user_message"] },
},
],
},
}
HA 设计意图:
criticalAgent 拥有完整工具集,保证业务核心功能不降级sandboxAgent 限制工具集,即使被攻击也不会产生严重后果- 不同 Agent 使用不同 Docker 容器,完全隔离文件系统和网络
五、监控与可观测性:让故障无处藏身
5.1 日志体系
~/.openclaw/
├── cron/
│ └── runs/<jobId>.jsonl ← Cron 执行记录
├── logs/
│ ├── commands.log ← 所有命令审计
│ └── gateway.log ← Gateway 全量日志
└── agents/<agentId>/sessions/ ← 各 Agent session 历史
5.2 健康检查 Cron Job
openclaw cron add \
--name "System health check" \
--cron "0 * * * *" \
--session isolated \
--message "检查以下各项并返回状态(OK/Failed + 原因):Gateway进程、Cron jobs.json、最新cron run状态、Feishu channel在线状态、待办队列积压" \
--announce \
--channel feishu \
--to "user:ou_xxx" \
--stagger 30s
5.3 关键指标告警阈值建议
| 指标 | 告警阈值 | 处理方式 |
|---|---|---|
| Cron 连续失败次数 | ≥3 次 | 检查 jobs.json 配置 |
| Session 大小 | >600k tokens | 强制 compaction |
| Heartbeat 响应时间 | >5 分钟 | 检查 Gateway 进程 |
| Provider 错误率 | >10% in 5min | 降级/切换策略 |
六、实战模板
模板 A:24/7 无人值守客服 Agent
组件:
1. heartbeat(每30分钟):检查待办队列 + 新消息
2. cron(每小时):健康自检
3. hooks:session-memory + command-logger
4. 多 Agent:故障隔离
模板 B:每日自动化报告系统
组件:
1. cron(每日 9:00 isolated):生成数据报告
2. announce delivery:直接推送飞书
3. bestEffort=true:推送失败不卡 Job
4. webhook backup:announce 失败时额外 POST 到业务系统
模板 C:跨渠道消息聚合路由
组件:
1. multi-agent binding:不同渠道路由到不同 Agent
2. channel account 冗余:主账号故障切换到备用
3. retry policy:各 Provider 配置独立重试参数
总结:HA 设计检查清单
□ Provider 层:配置 retry policy,设置 jitter
□ Session 层:配置 compaction threshold,启用 Memory 系统
□ Agent 层:多 Agent 隔离,关键业务独立部署
□ 调度层:Cron/Heartbeat 各司其职,避免混用
□ 事件层:启用 session-memory / command-logger hooks
□ 监控层:健康检查 Cron + 运行日志审计
□ 幂等层:所有定时任务可重入、不重复执行
□ 告警层:关键路径失败有明确通知机制
□ 恢复层:Gateway 支持 systemd/launchd 自动拉起
核心就一句话:把 AI Agent 当成数据库来运维——它需要事务保障、重试机制、监控告警和定期体检。 OpenClaw 已经把大部分基础设施造好了,剩下的就是你如何组合它们。