https://github.com/akitaonrails/ai-memory 解读分析一下这个项目

回复 群友 1384 ai-memory 是 akitaonrails(Fabio Akita)做的 ca 长期记忆方案,解决的真实痛点是:换个 agent 就得重讲一遍架构、试错和未决问题。我读了 README 和它的设计,有几点值得说。 它怎么干活:按 capture→consolidate→recall→handoff 四段。agent 干活时通过 lifecycle hooks 静默把 prompt、工具调用、会话边界记下来,在写入前先用带类型的隐私边界做一遍脱敏清洗,再把清洗结果存进数据存储;会话结束时把零散观察整理成项目 wiki 里的 markdown 页;下次任何 agent 在新会话启动时拿一份有长度上限的 brief,还能全文搜、按实体搜、按链接跳。 关键设计取舍,几个我觉得是对的: 一、truth 是 git 托管的 markdown wiki,数据库只是可随时重建的派生索引。没有 vector store 要维护,grep 得动、Obsidian 能开、手改也行。这个决定在记忆类工具里很少见,多数都是把内容锁进一个隐式数据库,出问题就全丢。 二、默认零 LLM 调用。捕获、搜索、handoff 全不走 API,没 key 也能跑。记忆衰减按 tier 的曲线走,但被用过的记忆衰减更慢——你打开、搜到、点链接都算用;冷掉的 episodic notes 会被抽成事实(路径、错误码、决策)而不是直接扔。近似重复会合并、疑似矛盾会被标出来。重写和丢弃类的能力(compaction、dedup、dream 背景重写)全部默认关,原始版本还在 git 里,能 restore-page 回来。 三、handoff 是个带类型的协议,每个 handoff 有 owner、只能被 claim 一次。这比"把聊天记录丢给下一个模型"要严肃得多,它防的是两个 agent 同时接一个活。 四、跨 agent、跨项目、跨机器、可多人共享。二十多个 harness 一级支持(Claude Code、Codex、Cursor、Gemini CLI、OpenCode、Grok、Devin、Kimi、Kiro、DSH、Cline 等),一台自建服务器,团队共用一个,知识按项目共享、个人 handoff 保持私有,多用户鉴权和审计日志不是付费档。跨项目那条我觉得挺贴心:你常用的包管理器、测试布局、架构习惯做成一份小 profile,每个新仓库启动时带上,作为 repo 规则文件之下的默认值。 我的判断: 这个项目最大的信息量不在功能列表,而在它对"记忆"的定义。市面上多数同类把记忆当检索问题(存原子事实、上向量、做个知识图谱),它把记忆当文档工程问题(编译成可读页面 + 版本化 + 会衰减 + 可回滚)。Karpathy 那个 LLM Wiki 的 compile-not-retrieve 思路是它的底子。副作用是它更适合"这个 repo 我知道什么",不适合你想要的通用第二大脑,README 里自己承认了这点。 其次,它是原教旨的"本地优先":一个 Rust 单二进制、checksum 校验、自托管、默认零 API 成本。对在意"我的上下文不能交给别人"的人这是核心卖点,但代价是运维自己扛,而且二十多个 harness 的 matrix 意味着兼容面很宽,升级时踩坑概率也高(它有 upgrading-to-3.0 文档就是这个原因)。 要注意的坑: 一、hook 捕获是它最有力的部分,也是最危险的。你所有的 prompt 和工具输出都要经过它的脱敏边界再落盘,你不信任这个环节,就没法用。 二、默认零 LLM 的整理质量靠抽取式和模板,读起来不如 LLM 写得好,你得接受"可读但不漂亮"。 三、它解决的是"跨 agent 交接同一份工作",不是"让 agent 记住我的偏好和人生"。别指望它当个人 agent 的长期记忆层。 四、如果你只用一家的 CLI,官方自带的 MEMORY.md 加 skill 也能覆盖大半,上它的边际收益主要在换工具和多人共享。 要不要用它,判断标准就一条:你一个月里会不会至少换一次 harness,或者有没有第二台机器和同事要接你得活。没有的话,装它主要是给自己加运维。