From a1fd2a051300bb69f8eaf30d8e77380197553a5b Mon Sep 17 00:00:00 2001 From: weishen Date: Fri, 3 Apr 2026 09:56:14 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E9=87=8D=E5=86=99=E5=8D=9A=E5=AE=A2?= =?UTF-8?q?=20-=20=E4=BB=A5self-improving=E6=8A=80=E8=83=BD=E4=B8=BA?= =?UTF-8?q?=E6=A0=B8=E5=BF=83=E7=9A=84=E6=A1=88=E4=BE=8B=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../openclaw-self-improving-daily-review.md | 235 ++++++++++++------ 1 file changed, 163 insertions(+), 72 deletions(-) diff --git a/openclaw/content-queue/openclaw-self-improving-daily-review.md b/openclaw/content-queue/openclaw-self-improving-daily-review.md index 363d3825..e4e1a574 100644 --- a/openclaw/content-queue/openclaw-self-improving-daily-review.md +++ b/openclaw/content-queue/openclaw-self-improving-daily-review.md @@ -6,19 +6,54 @@ 昨天我跟它说过"这个问题不要用A方法",今天它照常用。上一周我教会它的一个工作流,下周一它完全忘了。听起来很蠢对吧?但这就是大多数AI agent的现状——**没有记忆,只有上下文窗口**。 -所以我花了点时间,给我的AI agent搭了一套"记忆系统"。用了两个月,效果超出预期。今天分享一下我的做法。 +所以我花了点时间,给我的AI agent搭了一套"记忆系统"。核心工具是 **self-improving skill**(自改进技能)+ **每日复盘机制**。用了两个月,效果超出预期。今天分享一下我的做法。 + +--- + +## 核心工具:self-improving skill + +这个 skill 本质上是一个结构化的经验记录系统。每当 agent 遇到问题、做出决策、或发现什么值得记住的东西,它会调用 `self_improvement_log` 工具,把内容写入 `LEARNINGS.md` 或 `ERRORS.md`。 + +记录的格式是固定的: + +```markdown +## [LRN-20260325-001] correction + +**Logged**: 2026-03-25T14:09:53+08:00 +**Priority**: high +**Status**: pending +**Area**: config + +### Summary +一句话描述学到了什么 + +### Details +具体发生了什么、问题出在哪 + +### Suggested Action +以后遇到类似情况该怎么做 + +### Metadata +- Pattern-Key: cron.telegram-delivery +- Recurrence-Count: 1 +- See Also: LRN-20260325-005 +``` + +固定格式不是形式主义——它让后来者(人或其他 agent)能快速检索、对比、和追踪一个问题的完整生命周期。 --- ## 核心思路:双层记忆架构 -我的方案不是什么黑科技,思路很简单:**短期记忆 + 长期记忆**。 +我的方案是:**短期记忆 + 长期记忆 + self-improving 复盘机制**。 -**短期记忆层**是每天的对话记录文件(`memory/YYYY-MM-DD.md`)。每天结束,agent自动把当天的操作、遇到的问题、未完成的事项写进这个文件。第二天启动时,agent先读这个文件,接上昨天的工作。 +**短期记忆层**是每天的对话记录文件(`memory/YYYY-MM-DD.md`)。每天结束,agent自动把当天的操作、遇到的问题、未完成的事项写进去。第二天启动时先读这个文件,接上昨天的工作。 -**长期记忆层**是 `memory-lancedb-pro`(基于 LanceDB 的向量数据库)。重要的决策、用户偏好、反复使用的流程,直接存进去。下次需要的时候,agent通过语义搜索找回来,而不是靠"记性好不好"。 +**长期记忆层**是 `memory-lancedb-pro`(基于 LanceDB 的向量数据库)。重要的决策、用户偏好、反复使用的流程,存进去,下次语义搜索找回来。 -两层各司其职:**每日文件管"上下文",向量数据库管"知识"**。 +**self-improving 层**是每天23:00的定时复盘。agent调用 `self_improvement_log`,把今天的 learnings 写入文件,同时检查之前的相关 Pattern-Key,看有没有重复踩坑。 + +三层各司其职:**每日文件管上下文,向量数据库管知识,self-improving 管成长**。 --- @@ -26,126 +61,182 @@ 我给每个agent都设置了每天23:00(北京时间)自动执行复盘。通过 OpenClaw 的 cron 任务实现,每个agent独立运行自己的复盘流程。 -复盘做的事情很直接: +复盘流程是这样的: 1. 读取当天的 memory 文件 -2. 回顾当天的对话记录 -3. 提炼 learnings(学到了什么、踩了什么坑、下一步怎么做) -4. 把有价值的经验更新到长期记忆(LanceDB) +2. 调用 `self_improvement_log` 记录今日学习 +3. 检查是否有 Pattern-Key 与之前重复(重复踩坑的信号) +4. 把有价值的经验同步到 memory-lancedb-pro(长期记忆) +5. 通过 Telegram 发送复盘摘要 --- -## 从AGENTS.md设计一个"懂行"的agent +## self-improving 真实案例 -光有记忆系统不够,agent的行为规范也很重要。我在每个agent的 `AGENTS.md` 里定义了几件事: - -**角色定位**:每个agent是干什么的。比如星辉负责日程、邮件、提醒、任务管理;星曜负责基础设施和服务器运维。职责清晰,边界明确。 - -**行为准则**:优先级、确认流程、什么不该做。比如所有外部操作(发邮件、对外通信)必须经过用户确认才能执行;收到心跳(heartbeat)时不要每次都回复"HEARTBEAT_OK",而是真正去做检查。 - -**工具映射**:用户说"帮我发邮件",agent知道调用 `agentmail` 而不是瞎猜。这个映射表让我可以随时调整工具实现,而不需要改agent的行为描述。 - -有了这份文档,新agent启动时就能快速了解"我是谁"、"我该做什么"、"我用什么工具"。 +下面从我的 `LEARNINGS.md` 里摘几个例子,来看 self-improving 到底怎么帮助 agent 改进。 --- -## 真实案例:记忆如何改变了agent的行为 +### 案例一:同一个错误,第二次就知道怎么修了 -下面从我真实的使用日志里摘几个例子,来看记忆系统到底怎么work的。 +**第一次(LRN-20260325-001)** + +我让星辉创建 cron 任务时,它用了这样的 delivery 配置: + +``` +--to user:5038825565 +``` + +Telegram 返回了报错: + +``` +Error: Telegram recipient must be a numeric chat ID +``` + +星辉当时不知道为什么,折腾了一阵。这是它第一次遇到这个错误。 + +它把这个错误记进了 LEARNINGS.md: + +```markdown +### Summary +Telegram chat ID 在 cron job 的 delivery 配置中不应使用 "user:" 前缀 + +### Details +使用了 `--to user:5038825565` 格式,导致报错 + +### Suggested Action +使用纯数字 chat ID:`--to 5038825565` +``` + +**第二次(LRN-20260325-005)** + +一周后,星辉再次创建 cron 任务,又遇到了同样的问题。但这次它去查了 LEARNINGS.md,找到了 LRN-20260325-001,直接应用了 Suggested Action,修复成功。 + +更重要的是,它在这次记录里加了一行: + +```markdown +### Metadata +- Recurrence-Count: 2 +- See Also: LRN-20260325-001 +``` + +**第三次及以后** + +之后再创建 cron 任务,星辉再也没踩过这个坑。因为它记住了。 + +这就是 self-improving 的核心价值——**错误只犯一次,第二次就知道怎么做对**。 --- -### 案例一:同一个坑踩了两次,但第二次快速修好了 +### 案例二:通过复盘发现流程漏洞并修复 -我给所有agent配置了Telegram通知。创建cron任务时,需要指定 `--to 5038825565`(我的chat ID)。 +**LRN-20260328-001 记录了这样一个发现** -第一次,星辉踩坑了:我在delivery配置里用了 `--to user:5038825565`,结果Telegram报错"chat ID must be numeric"。当时我不知道为什么,折腾了一阵才找到原因。 +3月27日的复盘过程中,星辉检查之前的记录时发现:3月27日这一天的 memory 文件是空的——也就是说那一天没有任何对话记录被保存。 -**如果没有记忆**:一周后我再创建另一个cron任务,大概率会再踩一次同样的坑。 +问题出在哪?原来的设计是"第一次对话时检查并创建 memory 文件",但如果一整天都没有对话,文件就不会被创建。第二天 agent 想读取 3/27 的记录,发现什么都没有。 -**有了记忆之后**:我把这个错误记进了LEARNINGS.md,标注了正确写法"用纯数字,不用user:前缀"。一周后我让星辉再建一个cron任务,它直接去记忆里查,一分钟搞定,没有再踩坑。 +星辉把这个作为一个 learning 记录下来: -这就是"fact层记忆"的作用——**存住事实,下次遇到秒级解决**。 +```markdown +### Summary +记忆文件流程优化 - 3月27日缺少记忆文件 + +### Details +原流程只在"第一次对话时"创建记忆文件,导致无对话日出现记忆断层 + +### Suggested Action +修改为:每次 Session 启动时都检查并创建当天 memory 文件,无论是否有对话 +``` + +这个发现直接推动了流程优化。现在所有 agent 每次 Session 启动时都会检查当天文件,不依赖有没有对话。 + +**没有 self-improving 复盘,这个漏洞可能永远不会被发现**——因为没有人会主动去想"3月27日有没有生成 memory 文件"这种问题。 --- -### 案例二:装了一个工具,但OAuth还没授权完成 +### 案例三:Pattern-Key 帮助发现系统性重复 -3月27日,星辉安装了 `gog`(Google Workspace CLI)这个技能。装完了我让它去查日历,它说还没授权。 +看几个记录的 Pattern-Key: -**如果没有记忆**:下次我让它用gog,它可能再次尝试直接使用,然后再次失败,我再去找解决方法。一来一回好几次。 +| Pattern-Key | 出现次数 | 含义 | +|-------------|---------|------| +| `cron.daily-self-review` | 9次 | 每日复盘相关 | +| `cron.telegram-delivery` | 2次 | Telegram通知配置 | +| `cron.naming-convention` | 1次 | 任务命名规范 | -**有了记忆之后**:星辉把"gog已安装,OAuth未完成授权"记进了当天的复盘笔记。第二天我让它用gog,它直接说"gog需要先完成OAuth授权,请执行 `gog auth add`"——不需要我重新解释背景。 +`cron.daily-self-review` 出现了9次,说明这是一个活跃的、持续优化的领域。每一次复盘都在积累经验,而不是每次重头来。 -这就是"workflow记忆"的作用——**记住当前状态,避免重复确认**。 +`cron.telegram-delivery` 出现了2次,第二次就解决了。这说明 **Pattern-Key 重复本身就是一个信号——第一次记了,第二次就该解决了**。 + +这个机制让 agent 能区分"一次性错误"和"系统性重复",处理方式完全不同。 --- -### 案例三:所有cron任务加前缀,改了一次,全部生效 +### 案例四:从 correction 到 best_practice 的进化 -3月26日,我决定给所有cron任务名称加上agent的中文名作为前缀,比如`[星辉]每日复盘`、`[星曜]服务检查`,这样在日历里一眼就能区分是谁的任务。 +**LRN-20260325-003** 是一个 correction 类型的记录: -手动一个个改太麻烦了。我让星辉去批量更新。 +```markdown +### Summary +文件保存后需要验证 -**如果没有记忆**:下次新建cron任务时,它可能又忘了加前缀,我需要再次提醒。 +### Details +用户反馈保存失败的问题 -**有了记忆之后**:星辉把"cron任务命名规范:加[]中文前缀"记进了LEARNINGS.md。之后所有新建的任务,星辉自动遵循这个规范,不需要我再说一遍。 +### Suggested Action +写入文件后使用 read 工具验证内容已正确保存 +``` -这就是"decision层记忆"的作用——**记住决策原则,让规范自动执行**。 +这是一个具体的、针对单个操作的改进建议。 + +**LRN-20260325-004** 是同一个领域的延伸,但层次更高: + +```markdown +### Summary +创建了每日复盘 cron job 机制 + +### Details +为所有 4 个 agents 创建每日复盘 cron jobs... +每个 agent 会: +1. 读取当天对话记录 +2. 使用 self-improvement skill 进行复盘 +3. 更新各自的 learning 文件 +``` + +这是从"单次操作改进"进化到了"系统性机制建立"。 + +**self-improving 的价值不只是记录单次错误,而是通过不断积累,让 agent 的行为模式持续进化**。 --- -### 案例四:备份脚本跑成功了,但传输到NAS那步忘了 +## 实战技巧:让 self-improving 真正work -3月27日,星辉执行每日Obsidian备份。它成功打包了文件,但传输到NAS那步忘了——因为那步是手动执行的,不在脚本里。 +**每错必记,但分类要准确**。错误用 `correction`,流程改进用 `workflow`,配置发现用 `config`。分类清晰,Pattern-Key 才能真正起作用。 -**如果没有记忆**:第二天它继续跑备份,打包继续成功,传输继续忘。周而复始。 +**Suggested Action 要具体到能直接执行**。不要写"注意配置"这种废话,写 `--to 5038825565` 这种具体写法。下次 agent 搜到这条记录时,直接照做就行。 -**有了记忆之后**:星辉在复盘里记录了这次执行结果。第二天它跑备份时,主动检查了上一条记录,发现"传输那步容易漏",这次就记住了。 +**每次复盘检查 Pattern-Key 重复**。如果发现同一个 Pattern-Key 出现了第二次,就要问自己:上一次解决了吗?为什么又出现了? -这就是**每日复盘的价值**——不是记流水账,而是**主动发现流程漏洞并修复**。 - ---- - -### 案例五:密码存在哪了? - -3月31日,星辉需要用 `gog` 访问Google Calendar。但gog的认证信息存在Macmini的Keychain里,需要先解锁。我把密码存在了记忆里。 - -之后任何需要用到这个密码的场景,星辉直接去记忆里查,不再需要我问"那个Keychain密码是什么来着"。 - -这就是**长期记忆的作用**——存住那些不常用但重要的信息。 - ---- - -## 实战技巧:让这套系统真正work - -说几个真正管用的经验: - -**定时任务一定要配置Telegram通知**。OpenClaw cron任务的 `delivery.channel` 必须设为 `"telegram"`,这样任务执行完了我能在Telegram收到通知,知道哪个任务成功了、哪个出了问题。之前没配这个,有几个任务失败了半个月我都不知道。 - -**每天第一次对话时检查记忆文件**。Session启动时,agent自动检查今天的memory文件是否存在,不存在就创建一个。这个小小的routine省去了很多"你还记得上周说的那件事吗"的尴尬。 - -**遇到工具失败先查记忆再重试**。这是agent行为准则里的一条铁律:任何工具失败,先用 `memory_recall` 搜一下之前有没有遇到过、怎么解决的,再决定要不要重试。减少重复踩坑。 - -**经验要存两条**:一条存"事实层"(问题原因是什么、怎么修复),一条存"决策层"(以后遇到什么情况该怎么做)。前者帮我快速定位问题,后者帮我做出更好的选择。 +**Recurrence-Count 是最重要的指标之一**。它告诉你哪些问题是真的反复出现,需要系统性解决;哪些只是偶发的一次性错误。 --- ## 效果如何? -用了两个月,我最直接的感受是:**agent真正开始"认识"我了**。 +用了两个月,我最直接的感受是:**agent 在同一个地方摔倒的次数越来越少了**。 -它知道我默认用163邮箱发件、知道遇到服务器问题先SSH进服务器看看日志而不是慌、知道每次创建cron任务要加agent中文名前缀、知道gog需要OAuth授权才能用。它不再每次都问我重复的问题,也不再在我提到"那个任务"时一脸茫然。 +Telegram chat ID 格式错误只犯了两次就再也没出现。cron 任务命名不规范的地方被一次性修复。所有新的技能安装都会留下一条记录,包含安装位置、依赖、和未完成的配置步骤。 -错误率也下来了。以前同一个坑踩两三次是常态,现在agent能从记忆里找到之前的解决方案,第一次就能做对。 +错误率下来了,重复沟通也少了。以前同一个问题问两三次是常态,现在 agent 能在 LEARNINGS.md 里找到答案,第一次就做对。 --- ## 这套方案适合你吗? -说实话,如果你只是偶尔用一下AI聊天,这套系统 overkill。但如果你像我一样,**同时运行多个agent、有固定的日常工作流、需要AI真正帮你做事情**,这套双层记忆 + 每日复盘的方案值得一试。 +说实话,如果你只是偶尔用一下AI聊天,这套系统 overkill。但如果你像我一样,**同时运行多个agent、有固定的日常工作流、需要AI真正帮你做事情**,这套 self-improving + 双层记忆 + 每日复盘的方案值得一试。 -核心不是技术有多复杂,而是**习惯**:每天复盘、每次踩坑都记录、重要决策同步到长期记忆。做到了这些,AI agent就不再是"每次都要重新教"的工具,而是真正有记忆的助手。 +核心不是技术有多复杂,而是**习惯**:每天复盘、每次踩坑都记录、重要决策同步到长期记忆。做到了这些,AI agent就不再是"每次都要重新教"的工具,而是真正有记忆、会在错误中学习的助手。 ---