跳转到内容

07-实战 · 飞书周审卡片:从记忆候选到可点击审批

目标:把 OpenClaw 一周产生的记忆候选,整理成一张飞书卡片,让人点击按钮完成合并、跳过、回滚或重发。


OpenClaw 长期运行后,最大的问题不是“没有记忆”,而是“什么都记”:

  • 临时对话进入长期记忆
  • 重复事实越积越多
  • 子 agent 的过程性输出污染共享规则
  • 错误结论没有退出机制

周审卡片的作用,是把“自动记忆”改成“AI 整理 + 人类确认”:

flowchart TD
raw[原始会话 / agent 输出] --> candidate[候选记忆]
candidate --> classify[AI/脚本分层]
classify --> high[高价值]
classify --> review[待审阅]
classify --> low[低价值]
high --> card[飞书周审卡片]
review --> card
low --> card
card --> approve[确认合并]
card --> skip[跳过]
card --> rollback[回滚]
approve --> memory[长期记忆]

用 Markdown 做中间态最容易调试。建议按层级分区,每条带稳定 hash:

## 🟢 高价值候选(2)
### `aaaabbbbcccc` [main] 客户偏好:飞书优先
- 内容:用户团队主要在飞书协作,AI 通知优先发飞书。
- 来源:2026-04-24 main session
- 建议:写入 shared/profile.md
## 🟡 待审阅候选(1)
### `ddddeeeeffff` [planner] 运营流程假设
- 内容:每周一上午适合发运营复盘。
- 风险:可能只是临时安排。
## 📦 低价值候选(3)
### `111122223333` [worker] 临时排障命令
- 内容:一次性端口检查命令。

hash 的好处:按钮可以只提交选中的 hash,合并脚本也能去重。


不要把所有内容平铺出来。推荐结构:

区域内容设计原因
Header本周记忆周审、日期、状态颜色一眼知道卡片用途
Preamble高价值 / 待审阅 / 低价值数量先看总量
热门主题高频关键词或业务主题快速判断本周重点
折叠明细每层展示前 N 条控制卡片长度
操作区合并高价值、合并全部、取消、回滚让人能直接处理
Footertask_id、生成时间、过期提示方便排障和审计

建议从少量动作开始:

action用途是否危险
memory-merge-high只合并高价值候选中
memory-merge-selected合并用户选中的 hash中
memory-merge-all合并全部候选高
memory-rollback-preview生成回滚预览低
memory-rollback-confirm确认回滚高
cancel关闭或标记取消低
git-setup打开 Git 备份引导低

危险动作必须二次确认,尤其是 merge-all 和 rollback-confirm。


一张好用的周审卡片不是“发出去就结束”,而是会更新状态:

stateDiagram-v2
[*] --> Pending: 发送周审卡片
Pending --> Merging: 点击合并
Merging --> Done: 合并成功,刷新报告
Merging --> Failed: 合并失败,发兜底卡
Done --> RollbackPreview: 点击回滚预览
RollbackPreview --> RolledBack: 确认回滚
Pending --> Cancelled: 取消
Failed --> Pending: 重发周审卡片

实现上建议保存一个 state 文件:

{
"task_id": "weekly-2026-04-24",
"card_id": "AAq...",
"message_id": "om_...",
"candidates_path": "~/.openclaw/memory/candidates.md",
"issued_at": 1777046400
}

后续 handler 不要靠“猜最近一张卡”,而是根据 task_id 找 state。


记忆合并是会改变长期状态的动作,至少要满足:

  • 支持 --dry-run,先打印将要合并的条目
  • 合并前备份目标记忆文件
  • 根据 hash 去重,避免重复写入
  • 每次合并写审计日志
  • 支持按 tier 回滚
  • 失败时不删除候选文件
  • 卡片刷新失败时,另发一张兜底结果卡

推荐命令形态:

Terminal window
python3 ~/.openclaw/scripts/memory-merge-weekly.py --dry-run --tier high
python3 ~/.openclaw/scripts/memory-merge-weekly.py --tier high
python3 ~/.openclaw/scripts/memory-merge-weekly.py --rollback --dry-run --tier high

可以把需求拆成三次给 AI:

第一步:帮我设计 weekly memory candidates 的 Markdown 格式。
要求分为高价值、待审阅、低价值三层,每条都有 hash、agent、标题、内容、来源、建议目标文件。
第二步:帮我写 Python 脚本,把 candidates.md 解析成 JSON 统计。
要求支持 --dry-run,不写入任何文件;解析失败时指出行号。
第三步:基于这个 JSON 统计生成飞书 CardKit 2.0 周审卡片。
要求按钮 value 包含 action、task_id、tier、hashes、card_meta;卡片超过 30KB 时自动折叠明细。

不要让 AI 一步到位写“解析 + 发卡 + 回调 + 合并 + 回滚”。拆开做更容易测。


本教程推荐的增强点包括:

  • 热门主题:候选数量较多时,顶部显示重复出现的关键词
  • 卡片过期:超过有效期后按钮不再执行危险动作
  • Git 引导:检测长期记忆目录没有 Git 备份时,提示先启用备份
  • 三列布局:高价值 / 待审阅 / 低价值并排展示统计
  • 兜底报告:主卡片刷新失败时,发送一张新的结果卡,避免用户不知道动作是否成功

这些不是第一天必须做,但生产环境非常有用。


卡片发出去之后,关键在回调处理。继续看 飞书卡片回调处理器。