AI Agent 记忆的 6 个层级:从 CLAUDE.md 到「统一大脑」

AI Agent 记忆的 6 个层级:从 CLAUDE.md 到「统一大脑」

视频来源 :The 6 Levels of Claude Code Memory --- Simon Scrapes

发布 :2026-04-24 | 播放 :144,920

整理 :视频只给了目录和链接,本文把里面每个工具的仓库、文档、论文都翻了一遍,补齐了架构、命令、跑分和取舍。

核实日期:2026-07-23(版本号和跑分会变,用之前请复核)


一、先说结论

从 Mem0 到 Karpathy 的 LLM Wiki,AI 记忆方案一周一个新轮子,很容易 FOMO。但真正的问题只有一个:

Agent 每开一个新会话,就是一次「失忆」。你要用多大成本,把上一次的上下文还给它?

围绕这个问题,记忆方案可以分成 6 层。层级越高,能力越强,维护成本也越高------绝大多数人停在 Level 2 就够了,Level 3~4 是重度用户的收益区,Level 5~6 属于「你要为它做一份工程」。
#mermaid-svg-WeIQmTqAOA0VcEeB{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-WeIQmTqAOA0VcEeB .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-WeIQmTqAOA0VcEeB .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-WeIQmTqAOA0VcEeB .error-icon{fill:#552222;}#mermaid-svg-WeIQmTqAOA0VcEeB .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-WeIQmTqAOA0VcEeB .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-WeIQmTqAOA0VcEeB .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-WeIQmTqAOA0VcEeB .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-WeIQmTqAOA0VcEeB .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-WeIQmTqAOA0VcEeB .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-WeIQmTqAOA0VcEeB .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-WeIQmTqAOA0VcEeB .marker{fill:#333333;stroke:#333333;}#mermaid-svg-WeIQmTqAOA0VcEeB .marker.cross{stroke:#333333;}#mermaid-svg-WeIQmTqAOA0VcEeB svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-WeIQmTqAOA0VcEeB p{margin:0;}#mermaid-svg-WeIQmTqAOA0VcEeB .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-WeIQmTqAOA0VcEeB .cluster-label text{fill:#333;}#mermaid-svg-WeIQmTqAOA0VcEeB .cluster-label span{color:#333;}#mermaid-svg-WeIQmTqAOA0VcEeB .cluster-label span p{background-color:transparent;}#mermaid-svg-WeIQmTqAOA0VcEeB .label text,#mermaid-svg-WeIQmTqAOA0VcEeB span{fill:#333;color:#333;}#mermaid-svg-WeIQmTqAOA0VcEeB .node rect,#mermaid-svg-WeIQmTqAOA0VcEeB .node circle,#mermaid-svg-WeIQmTqAOA0VcEeB .node ellipse,#mermaid-svg-WeIQmTqAOA0VcEeB .node polygon,#mermaid-svg-WeIQmTqAOA0VcEeB .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-WeIQmTqAOA0VcEeB .rough-node .label text,#mermaid-svg-WeIQmTqAOA0VcEeB .node .label text,#mermaid-svg-WeIQmTqAOA0VcEeB .image-shape .label,#mermaid-svg-WeIQmTqAOA0VcEeB .icon-shape .label{text-anchor:middle;}#mermaid-svg-WeIQmTqAOA0VcEeB .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-WeIQmTqAOA0VcEeB .rough-node .label,#mermaid-svg-WeIQmTqAOA0VcEeB .node .label,#mermaid-svg-WeIQmTqAOA0VcEeB .image-shape .label,#mermaid-svg-WeIQmTqAOA0VcEeB .icon-shape .label{text-align:center;}#mermaid-svg-WeIQmTqAOA0VcEeB .node.clickable{cursor:pointer;}#mermaid-svg-WeIQmTqAOA0VcEeB .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-WeIQmTqAOA0VcEeB .arrowheadPath{fill:#333333;}#mermaid-svg-WeIQmTqAOA0VcEeB .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-WeIQmTqAOA0VcEeB .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-WeIQmTqAOA0VcEeB .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-WeIQmTqAOA0VcEeB .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-WeIQmTqAOA0VcEeB .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-WeIQmTqAOA0VcEeB .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-WeIQmTqAOA0VcEeB .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-WeIQmTqAOA0VcEeB .cluster text{fill:#333;}#mermaid-svg-WeIQmTqAOA0VcEeB .cluster span{color:#333;}#mermaid-svg-WeIQmTqAOA0VcEeB div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-WeIQmTqAOA0VcEeB .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-WeIQmTqAOA0VcEeB rect.text{fill:none;stroke-width:0;}#mermaid-svg-WeIQmTqAOA0VcEeB .icon-shape,#mermaid-svg-WeIQmTqAOA0VcEeB .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-WeIQmTqAOA0VcEeB .icon-shape p,#mermaid-svg-WeIQmTqAOA0VcEeB .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-WeIQmTqAOA0VcEeB .icon-shape .label rect,#mermaid-svg-WeIQmTqAOA0VcEeB .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-WeIQmTqAOA0VcEeB .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-WeIQmTqAOA0VcEeB .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-WeIQmTqAOA0VcEeB :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Level 1 · 原生记忆

CLAUDE.md + Auto Memory
Level 2 · 可靠召回

Hooks + Skills 强制读写
Level 3 · 语义检索

向量搜索,按意思找
Level 4 · 逐字回放

历史会话原文可查
Level 5 · 自组织知识库

自动归纳 / 去重 / 演进
Level 6 · 统一大脑

跨所有 AI 工具共享

一个贯穿全文的主线:你会发现从 Level 1 到 Level 6,所有方案最后都收敛到同一个模式------

一份常驻的「索引」+ 一堆按需读取的「正文」。

Claude Code 的 MEMORY.md、MemSearch 的三层渐进检索、Karpathy 的 index.md、MemPalace 的 Wing/Room/Drawer、Mem0 的压缩引擎,本质上都在做同一件事:用一行摘要的 token,换一整份内容的可达性。看懂这一点,选型就不难了。


二、Level 1:原生自带的记忆(比你以为的强得多)

很多「Claude Code 记忆方案」的教程还停留在「手写 CLAUDE.md」的年代。实际上现在的 Claude Code 原生有两套并行的记忆系统,加载机制完全不同。

2.1 两套系统的分工

CLAUDE.md Auto Memory(自动记忆)
谁来写 Claude 自己
内容 指令、规范、约束 它学到的经验、模式、你的纠正
作用域 项目 / 用户 / 组织 git 仓库 划分,worktree 之间共享
加载方式 每次会话全量加载 每次会话加载 MEMORY.md前 200 行或 25KB
存储位置 见下方层级表 ~/.claude/projects/<project>/memory/
开关 ------ 默认开启,/memory 切换或 autoMemoryEnabled: false

关键点:Auto Memory 本身就是一个迷你版的 Level 5。它的目录长这样:

text 复制代码
~/.claude/projects/<project>/memory/
├── MEMORY.md          # 索引,每次会话都加载(前 200 行 / 25KB)
├── debugging.md       # 主题文件,按需读取
├── api-conventions.md
└── ...

MEMORY.md 是索引,主题文件不在启动时加载 ,Claude 需要时才用文件工具去读。这正是「索引 + 按需展开」模式。而且从 v2.1.210 起,Claude 写完 MEMORY.md 后 harness 会主动量它的体积 :接近上限就提醒精简,超了直接报错要求重写索引------因为超出部分下次加载会被静默丢弃。这是原生方案里唯一带强制淘汰压力的机制。

💡 v2.1.214 起,带 frontmatter 的记忆文件在每次写入时会自动记录 modified ISO 8601 时间戳------记忆的新鲜度是可见的,这一点在自建方案里往往被忽略。

2.2 CLAUDE.md 的加载层级(按加载顺序,从宽到窄)

作用域 位置 用途
组织策略 macOS /Library/Application Support/ClaudeCode/CLAUDE.md Linux /etc/claude-code/CLAUDE.md 全公司规范,个人无法排除
用户 ~/.claude/CLAUDE.md 跨项目个人偏好
项目 ./CLAUDE.md./.claude/CLAUDE.md 团队共享,进版本库
本地 ./CLAUDE.local.md 个人项目偏好,加 .gitignore

加载规则的几个坑:

  • 向上遍历目录树foo/CLAUDE.md 排在 foo/bar/CLAUDE.md 之前------离你启动目录越近的指令,越靠后被读到
  • 子目录里的 CLAUDE.md 不在启动时加载,等 Claude 读到那个目录的文件时才生效;
  • @path/to/file 导入最多 4 跳 ,而且导入不省 token------被导入的文件在启动时同样全量进上下文。想省上下文得用别的办法;
  • 块级 HTML 注释 <!-- ... --> 在注入前会被剥掉,可以拿来写给人看的维护说明而不花 token。

2.3 .claude/rules/:被低估的省 token 手段

这是真正能减少常驻上下文 的机制。规则文件带 paths frontmatter 后,只在 Claude 读到匹配文件时才加载:

markdown 复制代码
---
paths:
  - "src/api/**/*.ts"
  - "lib/**/*.{ts,tsx}"
---

# API 开发规则
- 所有 endpoint 必须做入参校验
- 使用统一错误响应格式

不带 paths 的规则则无条件加载,优先级等同 .claude/CLAUDE.md~/.claude/rules/ 是用户级规则,在项目规则之前加载(项目规则优先级更高)。

2.4 Level 1 的天花板

  1. CLAUDE.md 全量常驻 ,官方建议单文件 200 行以内------"Longer files consume more context and reduce adherence"(越长越不遵守,这是个反直觉但很重要的事实);
  2. 它是上下文,不是配置 。官方原文:"Claude treats them as context, not enforced configuration." 想强制阻断某个行为,得用 PreToolUse hook
  3. Auto Memory 是机器本地的,不跨设备、不进云端环境;
  4. 子 agent 默认继承不到主会话的 auto memory(fork 除外);
  5. 只有加载,没有检索------它不会「想起」,只是每次被塞一遍。

📌 实践三条 :① CLAUDE.md 压到 200 行内,只写「不写就会做错的事」;② 长内容改成 .claude/rules/ + paths;③ 用 /context 确认到底加载了哪些文件,用 /doctor(v2.1.206+)让它帮你裁剪 CLAUDE.md


三、Level 2:把记忆的读写变成确定性动作

问题 :你把知识写进了 notes/,但模型「想不起来去读」。记忆系统的失败绝大多数不是存不下,是召回不触发

3.1 最小可用版本(Paweł Huryn 的原始配方)

Paweł Huryn(The Product Compass)最早流传的那段,简单到可以直接抄进 CLAUDE.md

markdown 复制代码
## Memory Management
When you discover something valuable for future sessions --- architectural
decisions, bug fixes, gotchas, environment quirks --- immediately append it
to .claude/memory.md

他后来又补了一层「知识分类」,这个分法很有用:

markdown 复制代码
## Learning
Track two types of knowledge:
- Domain: what things are (product context, user preferences, APIs,
  naming conventions, team decisions)
- Procedural: how to do things (deployment steps, debugging workflows)

⚠️ 注意 Paweł 本人后来的更新:"Since posting this note Claude Code got auto memory." ------Level 1 已经原生覆盖了这段配方的大部分 。今天再抄这段,价值主要在于分类规范,而不是「让它记东西」这个动作本身。

3.2 完整版(John Conneely 的结构化系统)

John Conneely 在 How I Finally Sorted My Claude Code Memory 里把它做成了完整目录:

text 复制代码
~/.claude/memory/
├── memory.md          # 索引:所有记忆文件的目录
├── general.md         # 跨项目通用约定
├── domain/{topic}.md  # 领域知识
└── tools/{tool}.md    # 工具配置

配套的三条规则(原文):

  • "When you learn something worth remembering, write it to the right file immediately"
  • "Read memory.md at session start. Load other files only when relevant."
  • "Before removing or modifying any existing memory entry, use AskUserQuestion to confirm with the user."

第三条是最容易被忽略、也最关键的一条 :给删除加一道人工确认。自动记忆系统最危险的失败模式不是记错,是悄悄删掉正确的东西

成效 :作者把 CLAUDE.md189 行压到 63 行 ,办法是进 plan mode 跑一句 reorganize memory,把密集的参考内容抽到主题文件里。

3.3 用 Hook 兜底:不依赖模型的自觉

系统的第二部分是一个 PreToolUse hook ,用 bash 包一层 Python 脚本,"injects your project memory and global index before the first tool call of every session---including for new subagents."

去重技巧值得抄:脚本用父进程 PID 做一次性标记,检查 /tmp/claude-memory-loaded-{ppid} 是否存在------每个会话上下文只注入一次,子 agent 因为 ppid 不同会各自触发一次。

选 hook 事件的原则:

Hook 事件 适合干什么
SessionStart 注入上次的工作摘要(最常用)
PreToolUse 兜底注入 + 硬阻断(唯一能真正阻止动作的机制)
PreCompact 压缩前抢救现场------把关键结论落盘,防止被摘要吃掉
Stop / SessionEnd 收尾时沉淀本次发现
InstructionsLoaded 调试:日志记录到底加载了哪些指令文件

这一层投入产出比最高。写入规范 + 召回钩子 + 删除确认,三件事做完,Agent 才算真的「记得住」。


四、Level 3:按意思搜,而不是按关键词

关键词搜索的致命伤:你搜 auth failure,笔记里写的却是「登录态过期导致 401」。

4.1 MemSearch(Zilliz 出品)

zilliztech/memsearch,MIT,约 2.4k star,Python 为主。它是这一层里工程完成度最高的。

核心设计哲学(原文):

"Markdown files are always the source of truth --- Milvus is a rebuildable shadow index."

这句话值得裱起来。向量库只是可重建的影子索引,Markdown 才是真相。这直接解决了向量方案最大的信任问题:索引崩了、模型换了、embedding 版本变了------重建就行,数据不丢。

三层记忆模型

内容 文件
Episodic(情景) 每日对话日志 .memsearch/memory/*.md,带 <!-- session:UUID --> 锚点
Semantic(语义) 项目状态、用户偏好 PROJECT.mdUSER.md
Procedural(程序) 反复出现的工作流蒸馏成 skill 可安装的 / 命令

三层渐进检索------这是它最值得学的部分:
#mermaid-svg-3S5VUvNpnqXfCqAx{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-3S5VUvNpnqXfCqAx .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-3S5VUvNpnqXfCqAx .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-3S5VUvNpnqXfCqAx .error-icon{fill:#552222;}#mermaid-svg-3S5VUvNpnqXfCqAx .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-3S5VUvNpnqXfCqAx .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-3S5VUvNpnqXfCqAx .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-3S5VUvNpnqXfCqAx .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-3S5VUvNpnqXfCqAx .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-3S5VUvNpnqXfCqAx .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-3S5VUvNpnqXfCqAx .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-3S5VUvNpnqXfCqAx .marker{fill:#333333;stroke:#333333;}#mermaid-svg-3S5VUvNpnqXfCqAx .marker.cross{stroke:#333333;}#mermaid-svg-3S5VUvNpnqXfCqAx svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-3S5VUvNpnqXfCqAx p{margin:0;}#mermaid-svg-3S5VUvNpnqXfCqAx .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-3S5VUvNpnqXfCqAx .cluster-label text{fill:#333;}#mermaid-svg-3S5VUvNpnqXfCqAx .cluster-label span{color:#333;}#mermaid-svg-3S5VUvNpnqXfCqAx .cluster-label span p{background-color:transparent;}#mermaid-svg-3S5VUvNpnqXfCqAx .label text,#mermaid-svg-3S5VUvNpnqXfCqAx span{fill:#333;color:#333;}#mermaid-svg-3S5VUvNpnqXfCqAx .node rect,#mermaid-svg-3S5VUvNpnqXfCqAx .node circle,#mermaid-svg-3S5VUvNpnqXfCqAx .node ellipse,#mermaid-svg-3S5VUvNpnqXfCqAx .node polygon,#mermaid-svg-3S5VUvNpnqXfCqAx .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-3S5VUvNpnqXfCqAx .rough-node .label text,#mermaid-svg-3S5VUvNpnqXfCqAx .node .label text,#mermaid-svg-3S5VUvNpnqXfCqAx .image-shape .label,#mermaid-svg-3S5VUvNpnqXfCqAx .icon-shape .label{text-anchor:middle;}#mermaid-svg-3S5VUvNpnqXfCqAx .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-3S5VUvNpnqXfCqAx .rough-node .label,#mermaid-svg-3S5VUvNpnqXfCqAx .node .label,#mermaid-svg-3S5VUvNpnqXfCqAx .image-shape .label,#mermaid-svg-3S5VUvNpnqXfCqAx .icon-shape .label{text-align:center;}#mermaid-svg-3S5VUvNpnqXfCqAx .node.clickable{cursor:pointer;}#mermaid-svg-3S5VUvNpnqXfCqAx .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-3S5VUvNpnqXfCqAx .arrowheadPath{fill:#333333;}#mermaid-svg-3S5VUvNpnqXfCqAx .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-3S5VUvNpnqXfCqAx .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-3S5VUvNpnqXfCqAx .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-3S5VUvNpnqXfCqAx .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-3S5VUvNpnqXfCqAx .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-3S5VUvNpnqXfCqAx .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-3S5VUvNpnqXfCqAx .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-3S5VUvNpnqXfCqAx .cluster text{fill:#333;}#mermaid-svg-3S5VUvNpnqXfCqAx .cluster span{color:#333;}#mermaid-svg-3S5VUvNpnqXfCqAx div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-3S5VUvNpnqXfCqAx .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-3S5VUvNpnqXfCqAx rect.text{fill:none;stroke-width:0;}#mermaid-svg-3S5VUvNpnqXfCqAx .icon-shape,#mermaid-svg-3S5VUvNpnqXfCqAx .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-3S5VUvNpnqXfCqAx .icon-shape p,#mermaid-svg-3S5VUvNpnqXfCqAx .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-3S5VUvNpnqXfCqAx .icon-shape .label rect,#mermaid-svg-3S5VUvNpnqXfCqAx .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-3S5VUvNpnqXfCqAx .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-3S5VUvNpnqXfCqAx .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-3S5VUvNpnqXfCqAx :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} chunk hash
需要更多
查询
L1 · 语义搜索

命中 chunk 片段
L2 · 展开

完整 Markdown 章节
L3 · 原始 transcript

逐字对话

上下文按需膨胀,而不是一次灌满。注意 L3 已经踩到了 Level 4 的地盘------好的方案本来就不是单层的。

技术栈

  • 向量库:Milvus,三种部署形态------Milvus Lite(默认,纯文件)/ Zilliz Cloud(有免费额度)/ 自建 Docker
  • Embedding:默认 ONNX bge-m3 ,本地 CPU 跑,首次下载约 558 MB;也可切 OpenAI / Ollama
  • 检索:BM25 稀疏 + 稠密向量混合,RRF 重排(不是纯向量,关键词精确匹配的场景不会退化)
  • 增量:SHA-256 内容哈希跳过未变更内容,省 embedding 调用

安装与使用

bash 复制代码
uv tool install "memsearch[onnx]"       # 或 pipx / pip install memsearch

memsearch config init
memsearch config set embedding.provider onnx

memsearch index ./memory/               # 建索引
memsearch search "Redis caching"        # 混合检索
memsearch expand <chunk_hash>           # 展开上下文(L2)
memsearch watch ./memory/               # 文件监听,实时增量索引
memsearch compact                       # LLM 摘要压缩

Claude Code 插件安装:

bash 复制代码
/plugin marketplace add zilliztech/memsearch
/plugin install memsearch

还支持 OpenClaw、OpenCode、Codex CLI------这已经是半个 Level 6 了(同一份记忆多端可读),只是靠共享文件系统而非服务端。

Python API:

python 复制代码
from memsearch import MemSearch
mem = MemSearch(paths=["./memory"])
await mem.index()
results = await mem.search("Redis config", top_k=3)

限制:ONNX 模型 558 MB 首次下载;后台维护任务默认关闭需手动开;skill 蒸馏出的候选项要手动安装才生效;文档未提供 MCP 接入。

4.2 什么时候该上这一层

代价 :向量库 + embedding 调用;索引更新策略(写了没入库 = 检索不到,比没搜索更糟);召回不准会引入噪声上下文反而干扰模型。

⚖️ 判断标准 :如果 grep + 目录结构还能找到,就先别上向量库。真正的分水岭是「你自己都想不起来当初写在哪个文件」。

⚖️ 选型时先问一句 :这个方案的真相源是什么?如果向量库本身就是真相源(不可重建),它坏掉的那天你会失去所有记忆。


五、Level 4:逐字回放历史会话

前三层存的都是「结论 」------摘要、规范、经验。但有时你要的是原话

「上周我们讨论限流方案时,我到底否决了哪个选项,理由是什么?」

摘要一定会丢掉这些细节。而 Claude Code 的会话 JSONL 里,那句话原封不动地躺着。

5.1 视频里的 Recall vs 你真正需要的 recall

⚠️ 这里有个需要说清楚的歧义 :视频链接的 recall.it 是一个个人知识库产品 ------存 YouTube / 播客 / PDF / 文章,自动打标签、建知识图谱、配间隔重复测验,浏览器插件 + 移动端,50 万用户。它做的是外部内容 的收集与理解,不是你和 Agent 的会话历史检索。

如果你要的是标题里那件事(recall verbatim conversations),真正对口的是这些:

工具 索引什么 技术
arjunkmrm/recall ~/.claude/projects/~/.codex/sessions/~/.pi/agent/sessions/*.jsonl SQLite FTS5 + BM25
akatz-ai/cc-conversation-search Claude Code 会话 语义搜索,返回 session ID 供 claude --resume
claude-historian Claude Code 会话 MCP server

5.2 arjunkmrm/recall 拆解

bash 复制代码
npx skills add arjunkmrm/recall

然后在 Claude Code / Codex / pi 里 /recall,或者直接说「找一下我们之前聊 XX 的那个会话」。

实现细节(都是可以直接抄的工程选择):

  • 索引库:~/.recall.dbSQLite FTS5,纯 Python stdlib,无外部依赖(Python 3.9+)
  • 双分词表 :英文用 Porter 词干还原,CJK 用 trigram 分词器------中文用户尤其要看这条,很多方案在中文上直接退化成不可用
  • 排序:BM25 + 时间衰减,30 天半衰期,近期会话最多加权 20%
  • 增量:按文件 mtime 更新
  • 排除 tool_use / tool_result / thinking / image 块------只索引真正的对话内容,这是索引质量的关键

天然限制只在本机 。笔记本和台式机的会话互相看不见,除非你自己同步 ~/.claude/projects/

5.3 用法边界

适合 :决策复盘、写文档、找「当时到底怎么说的」证据、找回丢失的会话去 --resume

不适合:日常上下文注入------原文太长太吵,直接塞进上下文是灾难。

📌 正确定位按需查询的档案馆 ,不是常驻记忆。

📌 顺带一提 :Claude Code 会话默认 30 天后过期(MemPalace 文档明确提到这点,并以此论证自动存档 hook 的必要性)。你的「档案馆」如果不主动落盘,是有保质期的。


六、Level 5:会自己长大的知识库

到这一层,记忆不再只是「存 + 搜」,而是有维护行为:新信息进来判断新增还是更新、定期去重合并、清理失效、建立交叉引用。

6.1 Karpathy 的 LLM Wiki:极简但完整的范式

gist.github.com/karpathy/442a6bf555914893e9891c11519de94f(2026 年 4 月)

它反对的是什么(原文):

"Most people's experience with LLMs and documents looks like RAG: you upload files, the LLM retrieves relevant chunks, and generates an answer. This works, but the LLM is rediscovering knowledge from scratch every question."

它主张的是什么

"the wiki is a persistent, compounding artifact. The cross-references are already there."

RAG 是每次重新发现 ,Wiki 是一次编译、持续复利

三层架构
#mermaid-svg-kRVkeFjdys2jflat{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-kRVkeFjdys2jflat .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-kRVkeFjdys2jflat .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-kRVkeFjdys2jflat .error-icon{fill:#552222;}#mermaid-svg-kRVkeFjdys2jflat .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-kRVkeFjdys2jflat .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-kRVkeFjdys2jflat .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-kRVkeFjdys2jflat .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-kRVkeFjdys2jflat .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-kRVkeFjdys2jflat .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-kRVkeFjdys2jflat .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-kRVkeFjdys2jflat .marker{fill:#333333;stroke:#333333;}#mermaid-svg-kRVkeFjdys2jflat .marker.cross{stroke:#333333;}#mermaid-svg-kRVkeFjdys2jflat svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-kRVkeFjdys2jflat p{margin:0;}#mermaid-svg-kRVkeFjdys2jflat .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-kRVkeFjdys2jflat .cluster-label text{fill:#333;}#mermaid-svg-kRVkeFjdys2jflat .cluster-label span{color:#333;}#mermaid-svg-kRVkeFjdys2jflat .cluster-label span p{background-color:transparent;}#mermaid-svg-kRVkeFjdys2jflat .label text,#mermaid-svg-kRVkeFjdys2jflat span{fill:#333;color:#333;}#mermaid-svg-kRVkeFjdys2jflat .node rect,#mermaid-svg-kRVkeFjdys2jflat .node circle,#mermaid-svg-kRVkeFjdys2jflat .node ellipse,#mermaid-svg-kRVkeFjdys2jflat .node polygon,#mermaid-svg-kRVkeFjdys2jflat .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-kRVkeFjdys2jflat .rough-node .label text,#mermaid-svg-kRVkeFjdys2jflat .node .label text,#mermaid-svg-kRVkeFjdys2jflat .image-shape .label,#mermaid-svg-kRVkeFjdys2jflat .icon-shape .label{text-anchor:middle;}#mermaid-svg-kRVkeFjdys2jflat .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-kRVkeFjdys2jflat .rough-node .label,#mermaid-svg-kRVkeFjdys2jflat .node .label,#mermaid-svg-kRVkeFjdys2jflat .image-shape .label,#mermaid-svg-kRVkeFjdys2jflat .icon-shape .label{text-align:center;}#mermaid-svg-kRVkeFjdys2jflat .node.clickable{cursor:pointer;}#mermaid-svg-kRVkeFjdys2jflat .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-kRVkeFjdys2jflat .arrowheadPath{fill:#333333;}#mermaid-svg-kRVkeFjdys2jflat .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-kRVkeFjdys2jflat .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-kRVkeFjdys2jflat .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kRVkeFjdys2jflat .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-kRVkeFjdys2jflat .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kRVkeFjdys2jflat .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-kRVkeFjdys2jflat .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-kRVkeFjdys2jflat .cluster text{fill:#333;}#mermaid-svg-kRVkeFjdys2jflat .cluster span{color:#333;}#mermaid-svg-kRVkeFjdys2jflat div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-kRVkeFjdys2jflat .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-kRVkeFjdys2jflat rect.text{fill:none;stroke-width:0;}#mermaid-svg-kRVkeFjdys2jflat .icon-shape,#mermaid-svg-kRVkeFjdys2jflat .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kRVkeFjdys2jflat .icon-shape p,#mermaid-svg-kRVkeFjdys2jflat .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-kRVkeFjdys2jflat .icon-shape .label rect,#mermaid-svg-kRVkeFjdys2jflat .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kRVkeFjdys2jflat .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-kRVkeFjdys2jflat .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-kRVkeFjdys2jflat :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} ingest
约束
📄 Raw Sources(原始素材)

PDF / 文章 / 笔记

不可变,LLM 只读
📚 The Wiki(维基)

摘要页 / 实体页 / 概念页 / 交叉引用

LLM 完全拥有并维护
📐 The Schema(规范)

CLAUDE.md / AGENTS.md

目录约定 + 命名 + 工作流

Schema 层的作用,用原文说是把 LLM 变成 "a disciplined wiki maintainer rather than a generic chatbot"(一个有纪律的维基维护者,而不是通用聊天机器人)。

三个操作

操作 做什么
Ingest 读素材 → 写摘要页 → 更新 index → 修订实体页和概念页 → 记 log。一份素材通常牵动 10~15 个 wiki 页面
Query 检索 wiki → 带引用综合作答 → "good answers can be filed back into the wiki as new pages" ------问答本身也在积累知识
Lint 定期体检:页面间矛盾、被新素材推翻的过时断言、无入链的孤儿页、缺失的交叉引用、数据缺口

两个基础设施文件

  • index.md:每个页面一行摘要 + 元数据,按类别组织,每次 ingest 更新。LLM 回答问题时先读它------这就是不需要 embedding 基础设施的原因(又是「索引 + 按需展开」)
  • log.md:只追加的时间线,统一前缀如 ## [2026-04-02] ingest | Article Title,标准工具可解析,充当审计轨迹

为什么这个模式成立(全文最好的一句):

"maintaining a knowledge base isn't the reading or thinking---it's the bookkeeping. Updating cross-references, keeping summaries current, noting when new data contradicts old claims."

维护知识库的痛点从来不是读和想,是记账 。而记账正是 LLM 不知疲倦、不会遗漏的强项。Karpathy 把分工说得很干脆:"The human's job is to curate sources, direct the analysis, ask good questions, and think about what it all means. The LLM's job is everything else."

gist 刻意不给实现细节:"directory structure, schema conventions, page formats, tooling---all that will depend on your domain, your preferences, and your LLM of choice." ------它是一个 idea 文件,设计上就是让你贴给自己的 Agent,让 Agent 陪你把细节长出来。

6.2 MemPalace:把 Wiki 思路做成工程

MemPalace/mempalace,本地优先,逐字存储 + 语义检索。

跑分 :LongMemEval 96.6% R@5 ,且 "zero API calls"------不调云端、不用 LLM 重排就能达到这个基线召回。它同时在 LoCoMo、ConvoMem、MemBench 上有可复现结果。

三级空间结构

层级 含义
Wings(翼) 按人 / 项目划分的集合
Rooms(房间) 翼内的主题分组
Drawers(抽屉) 具体的原始内容

意义在于限定检索范围而不是全库平铺召回------这是精度的主要来源。

可插拔后端 (接口在 mempalace/backends/base.py):

后端 类型 命名空间 词法检索
chroma(默认) 本地嵌入式
sqlite_exact 本地精确
milvus 本地 / 服务端
qdrant 服务端 REST
pgvector Postgres

命令

bash 复制代码
uv tool install mempalace          # 或 pipx install mempalace
mempalace init ~/projects/myapp

mempalace mine ~/projects/myapp                    # 挖项目文件
mempalace mine ~/.claude/projects/ --mode convos   # 挖 Claude Code 会话

mempalace search "why did we switch to GraphQL"
mempalace wake-up                                  # 新会话加载上下文

其他值得注意的

  • 知识图谱 :SQLite 支撑的时序实体关系图,带有效期窗口(validity windows)------这是少见的、把「事实会过期」做进 schema 的设计
  • 36 个 MCP 工具 ,运行时通过 mempalace_list_agents 发现,"no system-prompt bloat"(不预先撑爆系统提示词,这个取舍很聪明)
  • 专家 agent 各自拥有独立的 wing 和 diary
  • Embedding 模型支持 100+ 语言,约 300 MB 磁盘,核心检索不需要 API key
  • Claude Code 自动存档 hook:在上下文压缩前保存会话------"Claude Code sessions expire in 30 days without auto-save hooks wired."
  • ⚠️ 官方明确提醒有仿冒站点,认准 GitHub 仓库 / PyPI 包 / mempalaceofficial.com

6.3 Mem0:托管式记忆层

mem0.ai,三步走:Add → Learn → Retrieve 。核心是「记忆压缩引擎」,"automatically condenses chat history into compact memories that cut tokens and latency while keeping the right context."

技术上是 single-pass hierarchical distillation(单遍分层蒸馏)+ multi-signal retrieval(多信号检索)

官方跑分

基准 准确率 每次检索平均 token
LoCoMo 92.5% 6,956
LongMemEval 94.4% 6,787
BEAM 1M 64.1% 6,719
BEAM 10M 48.6% 6,914

对照组说法是 "Full-context approaches on these benchmarks routinely consume 25,000+ tokens per query" ,即约 3~4 倍 token 节省

⚠️ 读跑分要注意 :论文给了 Mem0 自己的准确率和 token 数,但没有给出被对比方法的准确率数字 ,也没点名 OpenAI Memory 等竞品做头对头比较。所以「3~4 倍 token 节省」是可信的,「准确率更高」则缺乏同表对照。另外注意 BEAM 10M 掉到 48.6%------规模上去之后所有记忆系统都会显著退化,这是行业现状,不是 Mem0 的问题。

部署与合规 :云托管(app.mem0.ai)或自托管(K8s / 私有云 / 气隙环境),"the same API everywhere";Python 和 Node.js SDK;SOC 2 Type 1、HIPAA、BYOK 加密、读写全审计日志。另有「Claude Code 集成减少 97% 记忆占用」的宣称。

6.4 三者怎么选

LLM Wiki MemPalace Mem0
形态 一份 idea 文档 本地 CLI + MCP 托管服务 / SDK
谁维护知识 你的 Agent 工具 + Agent 服务自动抽取
数据在哪 你的 markdown 你的机器 云端或自托管
上手成本 低(贴给 Agent 即可) 低(但要接 API)
可审计 ✅ 全是 markdown ✅ 本地文件 ⚠️ 靠审计日志
适合 个人研究、写作、长期主题积累 重度本地 Agent 用户、多项目 产品里给终端用户做记忆

核心难点是「遗忘」,不是「记住」 。一个只增不减的知识库,两个月后就是上下文污染源。评估任何 Level 5 方案,先看它的 Lint / 淘汰 / 有效期机制 ,再看写入能力。上面三家分别对应三种答案:LLM Wiki 的 lint 操作、MemPalace 的 validity windows、Mem0 的压缩引擎。没有这一项的方案,直接淘汰。


七、Level 6:所有 AI 工具共用一个大脑

前五层基本都绑在单一工具(或单台机器)上。Level 6 的目标:

Claude、ChatGPT、Cursor、Claude Code、以及下个月刚出的那个......共享同一份对你的持久记忆

7.1 OB1 / Open Brain

NateBJones-Projects/OB1,2026-03-11 发布,slogan 直白:

"The infrastructure layer for your thinking. One database, one AI gateway, one chat channel --- any AI plugs in. No middleware, no SaaS."

发布后 5 天拿到 259 star,热度来自它的成本主张:用各家免费额度,月成本约 0.10\~0.30

架构
#mermaid-svg-c7NGCPgr6nqTzbiL{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-c7NGCPgr6nqTzbiL .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-c7NGCPgr6nqTzbiL .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-c7NGCPgr6nqTzbiL .error-icon{fill:#552222;}#mermaid-svg-c7NGCPgr6nqTzbiL .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-c7NGCPgr6nqTzbiL .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-c7NGCPgr6nqTzbiL .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-c7NGCPgr6nqTzbiL .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-c7NGCPgr6nqTzbiL .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-c7NGCPgr6nqTzbiL .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-c7NGCPgr6nqTzbiL .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-c7NGCPgr6nqTzbiL .marker{fill:#333333;stroke:#333333;}#mermaid-svg-c7NGCPgr6nqTzbiL .marker.cross{stroke:#333333;}#mermaid-svg-c7NGCPgr6nqTzbiL svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-c7NGCPgr6nqTzbiL p{margin:0;}#mermaid-svg-c7NGCPgr6nqTzbiL .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-c7NGCPgr6nqTzbiL .cluster-label text{fill:#333;}#mermaid-svg-c7NGCPgr6nqTzbiL .cluster-label span{color:#333;}#mermaid-svg-c7NGCPgr6nqTzbiL .cluster-label span p{background-color:transparent;}#mermaid-svg-c7NGCPgr6nqTzbiL .label text,#mermaid-svg-c7NGCPgr6nqTzbiL span{fill:#333;color:#333;}#mermaid-svg-c7NGCPgr6nqTzbiL .node rect,#mermaid-svg-c7NGCPgr6nqTzbiL .node circle,#mermaid-svg-c7NGCPgr6nqTzbiL .node ellipse,#mermaid-svg-c7NGCPgr6nqTzbiL .node polygon,#mermaid-svg-c7NGCPgr6nqTzbiL .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-c7NGCPgr6nqTzbiL .rough-node .label text,#mermaid-svg-c7NGCPgr6nqTzbiL .node .label text,#mermaid-svg-c7NGCPgr6nqTzbiL .image-shape .label,#mermaid-svg-c7NGCPgr6nqTzbiL .icon-shape .label{text-anchor:middle;}#mermaid-svg-c7NGCPgr6nqTzbiL .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-c7NGCPgr6nqTzbiL .rough-node .label,#mermaid-svg-c7NGCPgr6nqTzbiL .node .label,#mermaid-svg-c7NGCPgr6nqTzbiL .image-shape .label,#mermaid-svg-c7NGCPgr6nqTzbiL .icon-shape .label{text-align:center;}#mermaid-svg-c7NGCPgr6nqTzbiL .node.clickable{cursor:pointer;}#mermaid-svg-c7NGCPgr6nqTzbiL .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-c7NGCPgr6nqTzbiL .arrowheadPath{fill:#333333;}#mermaid-svg-c7NGCPgr6nqTzbiL .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-c7NGCPgr6nqTzbiL .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-c7NGCPgr6nqTzbiL .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-c7NGCPgr6nqTzbiL .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-c7NGCPgr6nqTzbiL .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-c7NGCPgr6nqTzbiL .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-c7NGCPgr6nqTzbiL .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-c7NGCPgr6nqTzbiL .cluster text{fill:#333;}#mermaid-svg-c7NGCPgr6nqTzbiL .cluster span{color:#333;}#mermaid-svg-c7NGCPgr6nqTzbiL div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-c7NGCPgr6nqTzbiL .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-c7NGCPgr6nqTzbiL rect.text{fill:none;stroke-width:0;}#mermaid-svg-c7NGCPgr6nqTzbiL .icon-shape,#mermaid-svg-c7NGCPgr6nqTzbiL .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-c7NGCPgr6nqTzbiL .icon-shape p,#mermaid-svg-c7NGCPgr6nqTzbiL .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-c7NGCPgr6nqTzbiL .icon-shape .label rect,#mermaid-svg-c7NGCPgr6nqTzbiL .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-c7NGCPgr6nqTzbiL .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-c7NGCPgr6nqTzbiL .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-c7NGCPgr6nqTzbiL :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Claude Code
MCP Server(远程)
Claude Desktop
ChatGPT
Cursor
Slack / Discord Bot

(快速捕获)
Supabase + pgvector

thoughts 表 + 扩展 sidecar
AI Gateway
Edge Functions

(Serverless 扩展)

  • 数据库 :Supabase + pgvector;也可纯 K8s 自托管 PostgreSQL + pgvector,不依赖 Supabase
  • Schema :核心是一张 thoughts 表;扩展以 sidecar 形式挂载而非改基表------Agent Memory schema 记录来源、审核状态、使用策略、引用和审计轨迹;社区还有家庭维护、日历、备餐、CRM、求职跟踪等自定义表
  • 接入 :全部走 MCP,无 Zapier 之类中间件
  • 多用户 :PostgreSQL Row Level Security 做基于角色的隔离,够家庭 / 小团队用
  • :TypeScript 46% / JavaScript 32% / Python 10.5% / PL-pgSQL 7%,SvelteKit 和 Next.js 两套 dashboard
  • 搭建 :官方称 45 分钟,无需编码经验

限制:偏向向量检索和语义召回,不是传统关系型查询场景;共享模型止步于家庭 / 团队规模。

🔎 生态信号:OpenClaw 有 issue 讨论把 OB1 MCP 作为一等公民记忆目标,说明「记忆后端与 Agent 客户端解耦」这个方向不止一家在推。

7.2 真实代价

收益:终端里踩过的坑,IDE 和网页端不会重踩。

代价(这些没人在教程里讲):

  1. 你多了一个必须自己运维的有状态服务------权限、同步、备份、schema 迁移、隐私边界;
  2. 它是单点。大脑挂了,所有工具一起失忆,而且是在你最需要的时候;
  3. 隐私面变大。所有工具的上下文汇聚到一处,一次泄露的爆炸半径远大于分散存储;
  4. 写入质量的锅变大 。一个客户端写进去的垃圾记忆,会污染所有其他客户端------跨工具共享放大的不只是好记忆

⚖️ 建议 :只有当你确实在 3 个以上工具里重度工作、并且已经把 Level 2 做扎实了,再上这一层。否则你只是给自己加了一个新的故障源。


八、选型总表

层级 解决的问题 代表方案 数据在哪 成本 建议
L1 原生 基础约定不用重复说 CLAUDE.md + Auto Memory + .claude/rules/ 本机 极低 所有人必做
L2 可靠召回 记了但想不起来 Hooks + Skills + 结构化记忆目录 本机 性价比最高
L3 语义检索 记忆多到 grep 不动 MemSearch(Milvus + bge-m3 + RRF) 本机 / Zilliz Cloud 条目上千再上
L4 逐字回放 要原话不要摘要 recall(FTS5)、cc-conversation-search 本机 复盘 / 找回会话需求强再上
L5 自组织 知识库自己会腐烂 LLM Wiki / MemPalace / Mem0 视方案 长期知识沉淀才值得
L6 统一大脑 多工具记忆割裂 OB1(Supabase + pgvector + MCP) 自建云 很高 3+ 工具重度用户

选型五问:

  1. 我丢失的到底是规则 (→ L1/L2)、事实 (→ L3)还是原话(→ L4)?
  2. 这套方案的真相源是什么?向量库能不能重建?(MemSearch 的答案是「Markdown 是真相,Milvus 是影子」------这是黄金标准)
  3. 它有淘汰机制吗?lint / 有效期 / 体积上限,至少要有一个。
  4. 它对中文友好吗?(看有没有 trigram 分词或多语 embedding------很多方案在这里静默退化)
  5. 坏掉时我能发现吗?静默失效的记忆系统 = 负资产。

九、几条容易被忽略的原则

  1. 记忆的成本是上下文预算,不是磁盘。存下来不要钱,塞进上下文才要钱------所以「索引 + 按需展开」永远优于「全量注入」。所有六层最后都收敛到这个模式。
  2. 文件越长,遵守度越低 。官方原话:"Longer files consume more context and reduce adherence." 写得多 ≠ 记得牢,往往相反。
  3. 上下文不是强制力。要硬阻断某个行为,用 hook,不要用记忆文件写「禁止 XXX」。
  4. 给删除加确认。自动记忆最危险的失败不是记错,是悄悄删掉对的东西。
  5. 不要记录代码本身已经记录的东西 。目录结构、函数签名、git history------模型可以现场读,重复存只会过期得比代码还快。/doctor 的裁剪逻辑正是这个原则。
  6. 记忆会过期 。写入时把「上周」「下个月」换成绝对日期;记录 modified 时间戳;引用文件路径的记忆,用之前先确认文件还在。
  7. 规模上去了都会退化 。看看 Mem0 在 BEAM 10M 上的 48.6%------别指望任何方案在无限增长的记忆上保持精度。定期修剪比换更强的工具有效得多。
  8. 先跑通 L1 + L2,用一个月。多数人以为自己需要向量库,实际只是没写好那 20 行 hook。

十、参考链接

原始视频提到的

补充查证的

相关推荐
美团技术团队14 分钟前
KDD‘26 美团学术论文精选及KDD Cup‘26 DataAgents赛道冠军思路解读
人工智能
AKAMAI21 分钟前
当AI模型超出存储增长时
人工智能·云计算
DS随心转小程序1 小时前
ChatGPT 文字怎么转为 word?解析各类转换方案,AI 导出鸭成为高效文档转换新选择
人工智能·chatgpt·word·豆包·deepseek·ai导出鸭
乌恩大侠1 小时前
【AI-RAN】硬件产品:DELL 前传交换机
人工智能·spark·aerial·o-ru·ai-ran
星栈2 小时前
Rust 终于有能打的文档解析了?
人工智能
Vaxmzzy2 小时前
AI直播浪潮下的行业重构:从“人海战术”到“智能基建”
人工智能·重构
朴马丁2 小时前
国际与国产PLM在精细化工赛道的布局:2026年主要厂商技术特色
大数据·运维·人工智能·流程行业plm·化工新材料
狂奔蜗牛(bradley)2 小时前
深度学习三大基础激活函数详解:Sigmoid、Tanh、ReLU 公式、导数、图像与优缺点对比
人工智能·深度学习
阿里云大数据AI技术2 小时前
借助 EMR Serverless StarRocks 实现电商平台图搜图、文搜图场景
人工智能