工作空间记忆 v2(离线):研究笔记
目标:Clawd 风格的工作空间(agents.defaults.workspace,默认 ~/.openclaw/workspace),其中"记忆"以每天一个 Markdown 文件(memory/YYYY-MM-DD.md)加上一小组稳定文件(例如 memory.md,SOUL.md)的形式存储。
本文档提出了一个离线优先的记忆架构,保持 Markdown 作为规范的、可审查的真实来源,但通过派生索引添加结构化召回(搜索、实体摘要、置信度更新)。
为什么要改变?
当前的设置(每天一个文件)非常适合:
- "仅追加"日志记录
- 人工编辑
- git 支持的持久性 + 可审计性
- 低摩擦捕获("只需写下来")
但在以下方面较弱:
- 高召回检索("我们对 X 做了什么决定?","上次我们尝试 Y 时?")
- 以实体为中心的答案("告诉我关于 Alice / The Castle / warelay 的信息"),无需重读许多文件
- 观点/偏好稳定性(以及当它改变时的证据)
- 时间约束("2025 年 11 月期间是什么情况?")和冲突解决
设计目标
- 离线:无需网络即可工作;可在笔记本电脑/Castle 上运行;无云依赖。
- 可解释:检索的项目应该是可归属的(文件 + 位置)并且可与推理分离。
- 低仪式感:日常日志保持 Markdown,无需繁重的模式工作。
- 增量式:v1 仅使用 FTS 即可有用;语义/向量和图是可选升级。
- Agent 友好:使"在 token 预算内召回"变得容易(返回小的事实束)。
北极星模型(Hindsight × Letta)
要混合两个部分:
- Letta/MemGPT 风格的控制循环
- 保持一个小的"核心"始终在上下文中(角色 + 关键用户事实)
- 其他所有内容都在上下文之外,通过工具检索
- 记忆写入是显式的工具调用(追加/替换/插入),持久化,然后在下一轮重新注入
- Hindsight 风格的记忆基底
- 分离观察到的 vs 相信的 vs 总结的内容
- 支持保留/召回/反思
- 带有置信度的观点,可以随证据演变
- 实体感知检索 + 时间查询(即使没有完整的知识图谱)
提议的架构(Markdown 真实来源 + 派生索引)
规范存储(git 友好)
保持 ~/.openclaw/workspace 作为规范的人类可读记忆。
建议的工作空间布局:
~/.openclaw/workspace/
memory.md # small: durable facts + preferences (core-ish)
memory/
YYYY-MM-DD.md # daily log (append; narrative)
bank/ # “typed” memory pages (stable, reviewable)
world.md # objective facts about the world
experience.md # what the agent did (first-person)
opinions.md # subjective prefs/judgments + confidence + evidence pointers
entities/
Peter.md
The-Castle.md
warelay.md
...注意:
- 每日日志保持每日日志。无需将其转换为 JSON。
bank/文件是精心策划的,由反思作业生成,仍然可以手工编辑。memory.md保持"小 + 核心化":你希望 Clawd 在每个会话中看到的内容。
派生存储(机器召回)
在工作空间下添加派生索引(不一定需要 git 跟踪):
~/.openclaw/workspace/.memory/index.sqlite支持:
- 用于事实 + 实体链接 + 观点元数据的 SQLite 模式
- 用于词汇召回的 SQLite FTS5(快速、小巧、离线)
- 用于语义召回的可选嵌入表(仍然离线)
索引始终可以从 Markdown 重建。
保留 / 召回 / 反思(操作循环)
保留:将每日日志规范化为"事实"
Hindsight 在这里重要的关键洞察:存储叙述性的、自包含的事实,而不是微小的片段。
memory/YYYY-MM-DD.md 的实用规则:
- 在一天结束时(或期间),添加一个
## Retain部分,包含 2-5 个要点:- 叙述性(保留跨轮上下文)
- 自包含(独立后续理解)
- 标记类型 + 实体提及
示例:
## Retain
- W @Peter: Currently in Marrakech (Nov 27–Dec 1, 2025) for Andy’s birthday.
- B @warelay: I fixed the Baileys WS crash by wrapping connection.update handlers in try/catch (see memory/2025-11-27.md).
- O(c=0.95) @Peter: Prefers concise replies (<1500 chars) on WhatsApp; long content goes into files.最小解析:
- 类型前缀:
W(世界),B(经验/传记),O(观点),S(观察/摘要;通常生成) - 实体:
@Peter,@warelay等(slug 映射到bank/entities/*.md) - 观点置信度:
O(c=0.0..1.0)可选
如果你不希望作者考虑它:反思作业可以从日志的其余部分推断这些要点,但拥有明确的 ## Retain 部分是最简单的"质量杠杆"。
召回:对派生索引的查询
召回应该支持:
- 词汇:"查找精确术语/名称/命令"(FTS5)
- 实体:"告诉我关于 X 的信息"(实体页面 + 实体链接的事实)
- 时间:"11 月 27 日左右发生了什么"/"自上周以来"
- 观点:"Peter 偏好什么?"(带置信度 + 证据)
返回格式应该是 agent 友好的并引用来源:
kind(world|experience|opinion|observation)timestamp(来源日期,或提取的时间范围如果存在)entities(["Peter","warelay"])content(叙述性事实)source(memory/2025-11-27.md#L12等)
反思:生成稳定页面 + 更新信念
反思是一个定期作业(每日或心跳 ultrathink):
- 从最近的事实更新
bank/entities/*.md(实体摘要) - 基于强化/矛盾更新
bank/opinions.md置信度 - 可选地向
memory.md("核心化"持久事实)提出编辑建议
观点演变(简单、可解释):
- 每个观点有:
- 陈述
- 置信度
c ∈ [0,1] - last_updated
- 证据链接(支持 + 矛盾的事实 ID)
- 当新事实到达时:
- 通过实体重叠 + 相似性找到候选观点(首先 FTS,稍后嵌入)
- 通过小增量更新置信度;大跳跃需要强烈矛盾 + 重复证据
CLI 集成:独立 vs 深度集成
建议:深度集成到 OpenClaw,但保持可分离的核心库。
为什么集成到 OpenClaw?
- OpenClaw 已经知道:
- 工作空间路径(
agents.defaults.workspace) - 会话模型 + 心跳
- 日志记录 + 故障排除模式
- 工作空间路径(
- 你希望 agent 本身调用工具:
openclaw memory recall "…" --k 25 --since 30dopenclaw memory reflect --since 7d
为什么仍然分离库?
- 保持记忆逻辑在没有网关/运行时的情况下可测试
- 从其他上下文重用(本地脚本、未来桌面应用等)
形式: 记忆工具旨在成为一个小的 CLI + 库层,但这仅用于探索。
"S-Collide" / SuCo:何时使用它(研究)
如果"S-Collide"指的是 SuCo(子空间碰撞):这是一种 ANN 检索方法,通过使用子空间中的学习/结构化碰撞来实现强大的召回/延迟权衡(论文:arXiv 2411.14754,2024)。
对 ~/.openclaw/workspace 的实用观点:
- 不要从 SuCo 开始。
- 从 SQLite FTS +(可选)简单嵌入开始;你会立即获得大部分 UX 收益。
- 仅在以下情况下考虑 SuCo/HNSW/ScaNN 类解决方案:
- 语料库很大(数万/数十万个块)
- 暴力嵌入搜索变得太慢
- 召回质量明显受到词汇搜索的瓶颈限制
离线友好的替代方案(复杂度递增):
- SQLite FTS5 + 元数据过滤器(零 ML)
- 嵌入 + 暴力(如果块数量少,效果出奇地好)
- HNSW 索引(常见、强大;需要库绑定)
- SuCo(研究级;如果有可以嵌入的可靠实现则很有吸引力)
悬而未决的问题:
- 在你的机器(笔记本电脑 + 台式机)上,"个人助理记忆"的最佳离线嵌入模型是什么?
- 如果你已经有 Ollama:使用本地模型嵌入;否则在工具链中附带一个小型嵌入模型。
最小有用试点
如果你想要一个最小但仍然有用的版本:
- 添加
bank/实体页面和每日日志中的## Retain部分。 - 使用 SQLite FTS 进行带引用的召回(路径 + 行号)。
- 仅在召回质量或规模需要时添加嵌入。
参考
- Letta / MemGPT 概念:"核心记忆块"+"档案记忆"+ 工具驱动的自编辑记忆。
- Hindsight 技术报告:"保留/召回/反思",四网络记忆,叙述性事实提取,观点置信度演变。
- SuCo:arXiv 2411.14754(2024):"子空间碰撞"近似最近邻检索。