8.5 KiB
8.5 KiB
OpenClaw 记忆功能学习与卡若AI 对照
学习对象:OpenClaw 官方 Memory 文档 + codesfly/openclaw-memory-final(生产级);对照卡若AI 记忆系统,提炼可借鉴点。
更新:2026-03-03
一、OpenClaw 官方记忆(docs.openclaw.ai)
1.1 存储形态
- 纯 Markdown,文件为唯一真相源;模型只「记住」写入磁盘的内容。
- 两层:
- 长期:
MEMORY.md(可选),持久事实与决策。 - 日志:
memory/YYYY-MM-DD.md,按日追加、会话启动时读「今天+昨天」。
- 长期:
1.2 工具
- memory_get:按文件/行范围精确读取。
- memory_search:语义检索(基于索引片段);文件不存在时优雅降级返回空,不抛错。
1.3 何时写入
- 用户说「记住」→ 必须落盘,不留在内存。
- 日常笔记、运行上下文 →
memory/YYYY-MM-DD.md。 - 决策、偏好、持久事实 →
MEMORY.md。
1.4 自动 memory flush( compaction 前)
- 会话接近自动压缩时,触发静默 agent 轮,提醒模型在压缩前把该持久化的写入记忆。
- 可配置:
memoryFlush.enabled、softThresholdTokens、提示词(含NO_REPLY避免对用户可见)。
1.5 向量检索
- 可对
MEMORY.md与memory/*.md建小向量索引,支持语义查询。 - 默认按可用 Key 自动选择:Mistral / Voyage / Gemini / OpenAI / local;支持 Ollama、sqlite-vec 加速。
- QMD 后端(实验):
memory.backend = "qmd",本地 BM25 + 向量 + 重排,Markdown 仍为真相源,检索交给 QMD 侧车。
二、openclaw-memory-final(生产级,codesfly)
- 仓库:https://github.com/codesfly/openclaw-memory-final
- 最新:v0.4.2(2026-03),Node 22+,可选 QMD 索引。
2.1 设计目标
- 可靠性:自愈、避免静默失败。
- 幂等:同一会话状态不重复写入日记忆块。
- 成本可控:避免不必要的向量 embed(每日 qmd update,每周才 qmd embed)。
- 可审计:决策与状态可追溯。
2.2 分层 Pipeline
| 层级 | 说明 |
|---|---|
| 短期工作台 | memory/CURRENT_STATE.md,当日工作台,compaction/重置后首选恢复点;可每轮覆盖(非仅追加)。建议字段:今日目标/进行中/阻塞/下一步≤3。 |
| 日记忆日志 | memory/YYYY-MM-DD.md,主会话 + 子 Agent 产出经「每日蒸馏」写入,仅追加。 |
| 任务结果卡 | memory/tasks/YYYY-MM-DD.md,仅结果的子 Agent 任务卡;主会话整理,子 Agent 原始过程保留在隔离历史供审计。 |
| 每日蒸馏 Daily Sync | 23:00 本地时间;近 26h 会话;过滤 <2 条用户消息的会话;写入日日志;幂等游标(last user message fingerprint)防重。 |
| 每周精炼 Weekly Tidy | 周日 22:00;合并近 7 日日志进长期记忆;约束 MEMORY.md(如 80 行/5KB);写周报 memory/weekly/YYYY-MM-DD.md;归档日日志到 memory/archive/YYYY/。 |
| Watchdog | 每 2h 的 :15;检测禁用/陈旧/错误;仅当连续 2 次异常才告警(低噪)。 |
| Retrieval Watchdog | 每 30 分钟;检索健康检查,2-hit 确认异常。 |
| QMD 夜间维护 | 每日 03:20;qmd update;仅当待处理积压超阈值时 qmd embed。 |
2.3 多 Agent 记忆模型
- 主会话 = 记忆策展人:整合持久结果与决策。
- 子 Agent:只执行;原始过程留在隔离会话历史,可审计。
- 共享交接层:
memory/tasks/YYYY-MM-DD.md,仅结果的任务卡。 - 检索顺序:先任务卡 → 再语义记忆搜索 → 最后按需钻取原始会话。
2.4 任务卡字段(建议)
- goal / boundary / acceptance / key actions / artifact paths / final status / next step
2.5 Context Budget + 动态画像
memory/context-profiles.json定义按画像的上下文来源。- 注入前硬预算:单文件上限(默认 20000 字符)、总上限(默认 80000 字符)。
- 按优先级(如 main/ops/btc/quant)组 context pack,控制 prompt 膨胀与延迟。
2.6 冲突检测
- 持久化前扫描长期记忆中的路由/规则漂移,避免静默覆盖(
memory_conflict_check.py→memory-conflict-report.json)。
2.7 状态文件(摘要)
processed-sessions.json:幂等游标。memory-watchdog-state.json:异常计数与 last3 快照。context-budget-state.json:预算检查结果。memory-retrieval-watchdog-state.json:检索健康状态。
三、卡若AI 记忆系统现状(简要)
| 层级 | 位置 | 说明 |
|---|---|---|
| 短期 | Cursor 对话上下文 | 单次对话有效 |
| 长期 | 个人/1、卡若:本人/记忆.md |
单文件,偏好/规则/人脉/原则 |
| 结构化 | 水溪_整理归档/记忆系统/structured/ |
技能索引、Agent 成果、每日摘要、幂等游标、健康、watchdog 报告、周报 |
自动化:collect_chat_daily.py(每日、幂等+脱敏)、collect_daily.py(每日摘要)、weekly_optimize.py(每周 SKILL 审计+经验整理)、memory_watchdog.py(每 2h、连续 2 次异常才告警)。
四、可借鉴点(卡若AI 学习清单)
| OpenClaw / memory-final | 卡若AI 可借鉴 |
|---|---|
| CURRENT_STATE 短期工作台 | 可选:在 记忆系统/ 或工作台增加「当日工作台」单文件(今日目标/进行中/阻塞/下一步≤3),compaction 或新会话时优先读。 |
| 任务结果卡(仅结果) | 多线程/子任务执行时,将每个子任务的结果写成「任务卡」到 structured/tasks/YYYY-MM-DD.md,检索时先任务卡再其他。 |
| 检索顺序 | 明确:先查任务卡/结构化结果 → 再查长期记忆/经验库 → 最后按需查原始对话归档。 |
| Context budget | 若未来做「记忆注入」到 prompt,先做单文件与总字符上限,避免一次性灌入过多记忆。 |
| Compaction 前 memory flush | 若平台支持「压缩前回调」,可在压缩前提醒写入 记忆.md 或当日工作台。 |
| 冲突检测 | 写入长期记忆或规则前,扫描已有规则/路由是否与新内容冲突,生成简单 conflict 报告。 |
| QMD / 向量检索 | 长期可选:对 记忆.md 或结构化摘要做本地向量索引(如 QMD 或现有嵌入),支持语义检索;当前卡若AI 以文件与关键词为主,可后续迭代。 |
| 周报与归档 | 已有 weekly_report;可明确「周报 + 日日志归档到 archive/YYYY/」的目录规范,与 memory-final 对齐。 |
五、参考链接
- OpenClaw Memory 概念:https://docs.openclaw.ai/concepts/memory
- openclaw-memory-final:https://github.com/codesfly/openclaw-memory-final
- openclaw-memory-final 架构:https://github.com/codesfly/openclaw-memory-final/blob/main/docs/architecture.md
- 卡若AI 记忆系统:
02_卡人(水)/水溪_整理归档/记忆系统/README.md