许多个人 AI 把长期记忆做成一个向量袋:切块、embedding、相似度检索。OpenHuman 的 Memory Tree 选择了一条更像编辑工作的路——原始片段会被装进桶,桶满后封存为摘要,摘要再向上汇成更高层的概览;需要证据时,又能沿树钻回叶子。
我喜欢它的原因很简单:记忆终于不只是“找得到”,还要回答“这句话从哪来”。
从叶子到摘要,发生了什么
每个来源先被确定性地切成带出处的 leaf。L0 的叶子依次进入 bucket;达到容量后,系统把这一桶压缩成 L1 summary。多个 L1 又可以形成更高层节点。长时间没有新内容的半满桶也会触发 stale seal,避免少量尾部资料永远游离在树外。
这是有损压缩,但损失是可管理的。上层节点负责导航,下层叶子保留原文跨度。检索时可以 walk 浏览候选分支,用 drill_down 继续向下,再以 fetch_leaves 取回证据。entity index 帮助选择入口,却不取代 source tree 的出处关系。
这里有一个需要实时修正的细节:早期公开材料会提到 source、topic、global 三类树;当前源码架构已经移除 topic tree 和 global tree,只构建 source tree,再借实体索引跨来源连接。文章如果继续写“三棵树”,会把已经发生的收敛误当成现状。
为什么不用一次性生成整份摘要
整份重写很优雅,也很危险。资料一多,每次更新都需要重读大量上下文;一次错误摘要还可能覆盖旧版本。bucket sealing 把影响范围限制在局部,新叶子只推动所在分支变化,已经封存的节点保持稳定。
它也很适合本地优先桌面应用。OpenHuman 的 React / Tauri 负责界面和系统外壳,Rust core 才拥有权威状态。记忆构建、队列与检索放在 core,意味着关闭某个页面不会让后台 ingest 逻辑失去主人;Markdown / Obsidian 形态则让用户能在模型之外检查结果。
当然,树并不会自动消除幻觉。摘要节点依旧是模型生成的,层层压缩可能把小误差放大。真正可靠的产品必须在回答时愿意下钻,而不是拿顶层概览冒充原始事实。
我的思考
OpenHuman 最容易与知识工作者、研究者、档案爱好者和隐私敏感用户产生共鸣。他们不只想让 AI 记住,还想保留一种能翻阅、修订和迁移的个人知识史。
市场变化会发生在“信任界面”上。个人 AI 的竞争不应只是谁能导入更多数据,而是谁能把摘要、出处、修改记录和删除传播展示清楚。对医疗记录、工作关系、家庭往事这类高敏感内容,可见的 provenance 可能比模型参数更像护城河。
我额外担心一种安静的风险:摘要漂移会变成机器替你撰写的自传。它未必明显错误,却会不断选择哪些细节值得留下。未来的个人 AI 应该允许用户声明“不可压缩的记忆”,也要允许多个互相矛盾的解释并存。一个人的历史,本来就不该只剩一条最方便检索的结论。