用 200 行 Python,补足 OpenClaw 记忆体系中最缺的那块

OpenClaw 的记忆系统,其实有个明显的短板
OpenClaw 本身有一套记忆机制:MEMORY.md 存长期记忆,memory/YYYY-MM-DD.md 存每日笔记,~/self-improving/ 存经验教训。看起来很完整。
但实际用起来有个很要命的问题:这些记忆都是"结论",没有"过程"。
举个例子。今天天气任务执行了,OpenClaw 可能在 daily note 里记一笔"天气播报完成"。但:
脚本运行了几秒?调用了哪些工具? 投递了什么内容给用户? 成功还是失败?失败了是什么原因?
没有记录。全凭 AI 自己"记"。
问题在于,AI 的记忆本质上是上下文窗口 + 文件读写。它不是数据库,没有结构化的查询能力。每次新会话启动,它只能从 MEMORY.md 和 daily note 里"回忆"之前发生了什么——而这些文件里记的,往往是它自己觉得重要的"结论",而不是完整的执行过程。
OpenClaw 缺的不是记忆本身,而是记录执行的标准化流程。
没有标准,就会出现:
这个任务记了,那个任务没记 记了结果,没记过程 记了今天,忘了昨天 出了 bug 没法回溯排查
我需要一套执行日志系统,补足这块短板。
设计思路:够用就行,别过度设计
动手之前我先想清楚了几件事:
不要数据库。 SQLite 也好,MySQL 也好,都太重了。一天几百条记录,文件系统完全够用。
不要复杂框架。 不需要 Log4j 那种分级别、分 Handler 的框架。就一个 Python 脚本,三个功能:写入、读取、摘要。
格式要机器可读。 每行一个 JSON 对象(JSON Lines),方便用 grep、jq、Python 脚本处理。
核心就三个问题:
- 记什么
— 时间、类型、指令、结果、内容摘要 - 怎么存
— 按日期分目录,按类型分文件,追加模式写入 - 怎么用
— 能写入、能按日期读取、能生成每日摘要
实现:200 行的 log-exec.py
写入日志
每次任务执行完后,调用一行命令:
python3 ~/.openclaw/workspace/scripts/log-exec.py \ weather '广州天气通勤提醒 07:15' 'success' \ --content '广州今日多云转晴,25-31°C,早上兴业app坐地铁'脚本自动完成:
根据当前日期创建目录 exec-log/2026-05-17/把日志追加写入 weather.log(文件不存在自动创建)输出确认信息 [LOG] 已记录到 ...
日志格式
每条日志是一个 JSON 对象,包含 5 个字段:
{ "time": "2026-05-17 07:15:00", "type": "weather", "instruction": "广州天气通勤提醒 07:15", "result": "success", "content_preview": "广州今日多云转晴,25-31°C"}time | |
type | |
instruction | |
result | |
content_preview |
用 JSON Lines 格式(每行一个 JSON 对象)。追加写入不需要解析整个文件,用 grep/jq 过滤也很方便。
文件结构
exec-log/├── 2026-05-12/│ ├── weather.log ← 天气任务│ ├── fund.log ← 基金行情│ ├── monitor.log ← 价格监控(每30分钟一次,一天48条)│ ├── user_request.log ← 用户的每次对话│ ├── maintenance.log ← 系统维护操作│ ├── backup.log ← 系统备份│ └── ...├── 2026-05-13/└── ...按日期分目录,同类型任务追加到同一个文件。type 命名规则很简单:定时任务用功能英文关键词(weather、fund、monitor),用户请求统一 user_request,系统维护统一 maintenance。没有固定分类表,拿来就用。
读取和摘要
# 查看今天的摘要python3 scripts/log-exec.py --summary 2026-05-17# 输出:# 📊 执行日志摘要 (2026-05-17)# 共 30 条记录,8 种类型# channel_zzz: 1次 (✅1/❌0)# fund: 1次 (✅1/❌0)# maintenance: 1次 (✅1/❌0)# monitor: 23次 (✅23/❌0)# morning_brief: 1次 (✅1/❌0)# news: 1次 (✅1/❌0)# user_request: 1次 (✅1/❌0)# weather: 1次 (✅1/❌0)# 读取指定日期指定类型的日志python3 scripts/log-exec.py --read 2026-05-17 --type monitor摘要功能统计每个类型的执行次数、成功数和失败数。哪个任务跑了几次、有没有失败,一眼就能看出来。
脚本核心逻辑
脚本不到 200 行,三个功能:
写入时: 获取当前日期 → 创建目录 → sanitize 文件名 → 构建 JSON → 追加写入 → 打印确认。
读取时: 遍历目录下所有 .log 文件 → 按类型过滤 → 逐行解析 JSON → 返回列表。
摘要时: 读取当天所有日志 → 按 type 分组 → 统计成功/失败数 → 格式化输出。
没有异常处理的花哨写法,没有日志轮转,没有异步写入。简单直接,够用就行。
强制触发:不记日志就不让回复
光有脚本不够,得让 OpenClaw 每次都必须记日志。
我在 AGENTS.md 里加了一条铁律:
🔴 回复前置检查清单(硬性执行,不可跳过)
Step 1: 先调日志脚本
python3 ~/.openclaw/workspace/scripts/log-exec.py <type> '<指令描述>' '<result>' --content '<摘要>'Step 2: 确认
[LOG] 已记录到Step 3: 再输出回复给用户⛔ Step 1 没完成,不允许跳到 Step 3。
顺序是:先记日志 → 确认写入 → 再回复。不记日志,不允许回复。
补充规则:如果回复已经发出但还没记日志,立刻补记,不要等主人提醒。
这就是"执行标准"的具体落地——不是靠 AI 自觉记住要记日志,而是靠流程强制保证每一次都记。
效果:从"凭感觉回忆"变成"按记录查账"
日志系统上线第一天(2026-05-12),记录了 88 条执行记录,11 种任务类型。
后续几天稳定运行。5 月 16日:67条记录,10种类型,全部成功。

有了日志系统之后,OpenClaw 的记忆体系才真正完整了:
- MEMORY.md
→ 存"我知道什么"(长期知识) - daily note
→ 存"今天发生了什么"(事件流水) - self-improving/
→ 存"我学到了什么"(经验教训) - exec-log/
→ 存"每次任务具体怎么执行的"(执行记录)
之前缺的,就是最后这块。
进阶用法:让 AI 每天自动复盘
日志系统搭好之后,我用它做了一个更有意思的东西——每日自动复盘。
每天凌晨 3:30,OpenClaw 会自动触发一个复盘 cron 任务:
用 log-exec.py --summary读取前一天的执行摘要逐类分析每个任务的 result字段,统计成功率和失败率对比前几天的数据,看趋势是变好还是变差 分析哪些任务出了问题、可能的原因是什么 总结当天新增了哪些功能、踩了哪些坑 把复盘结论写入 daily note 和 MEMORY.md 生成语音播报,早上起床就能听
复盘任务本身完全依赖日志系统获取数据。没有日志,复盘就是"凭印象总结";有了日志,复盘才是"用数据说话"。

日志系统不只是"查账"的工具,它让 AI 真正具备了"自我反思"的能力。
踩过的坑
1. 类型命名别搞太复杂
一开始搞了个分类表:cron-weather、cron-fund、user-chat、system-maintenance……每次新增任务都要查表,还经常纠结"这个该归哪类"。
后来改成自由命名:定时任务就用功能英文关键词,一个词,不要空格和符号。weather、fund、monitor、backup。不用注册,拿来就用。
2. 别用数据库
想过用 SQLite,但一天最多几百条记录,JSON Lines + grep + Python 脚本完全够用。零依赖,cat exec-log/2026-05-17/monitor.log 就能看。
3. 强制要写在"回复前"
先写"回复后",结果经常忘。改成"回复前"并定义为硬性要求后,记录率从 ~70% 提升到接近 100%。
4. 日志字段不要太贪心
第一版有七八个字段:time、type、instruction、result、content_preview、tool_calls_count、duration_ms、model_name……很多根本用不上。最后精简到 5 个。够用。
写在最后
OpenClaw 的记忆功能设计得已经很不错了,但"记忆"和"执行记录"是两回事。记忆告诉你"我知道什么",执行记录告诉你"我具体干了什么、怎么干的、结果如何"。
日志系统补的就是这个缺口。200 行 Python,一个多小时搞定,但它让 AI Agent 的行为从"黑盒"变成了"白盒"。
如果你也在用 OpenClaw 跑定时任务,强烈建议加一套执行日志。不用多复杂,能记录、能查询、能审计,就够了。
代码不长,思路简单,但带来的掌控感是完全不一样的。
夜雨聆风