前段时间我的 Claude 账号突然被封了。几个月来积累的对话、技术决策、项目上下文,一夜之间全没了。那种感觉很难受 – 不是丢了几段聊天记录,而是丢了一个「懂你」的 AI 助手。
这件事让我意识到:把记忆交给平台,就是把命运交给平台。于是我做了这个开源项目。
痛点
目前主流 AI 助手的记忆能力有三个硬伤:
1. 记忆不跨平台
在 Claude.ai 上积累的上下文,Claude Code 不知道;在 Claude Code 里做的技术决策,OpenClaw 看不到。每个平台都是一座孤岛。
2. 记忆不持久
对话一关,上下文就没了。下次开聊,AI 又是一张白纸。虽然有些平台提供了记忆功能,但要么容量有限,要么无法导出。账号一封、服务一停,什么都没了。
3. 记忆不可控
平台帮你记了什么?你看不到、改不了、删不掉。记忆应该是用户的资产,不是平台的黑箱。
解决方案:Notion Memory Store
我的思路很简单:用 Notion 作为 AI 的外部记忆库。
Notion 天然适合做这件事:
- 结构化数据库,支持多维度标签和筛选
- 各主流 AI 平台都有 Notion 集成(MCP / Connector)
- 数据在你自己的 Notion 工作区,完全可控
- 你可以随时浏览、编辑、删除任何一条记忆 – 这是你的数据,不是 AI 的
项目地址:github.com/smilelight/notion-memory-store
它能做什么
写入记忆
对 AI 说「总结记忆到 Notion」或「summarize memory to notion」,它会:
- 回顾当前对话内容
- 提取有价值的信息(事实、决策、偏好、技能等)
- 分解为原子化的记忆条目 – 一条记忆只记一件事
- 自动去重,写入 Notion 数据库
比如一次关于项目架构的对话,可能产生这样的记忆:
| 记忆 | 类别 |
|---|---|
| 用户使用 uv 而非 pip 管理 Python 依赖 | Preference |
| 项目 OpenClaw 使用 FastAPI + PostgreSQL 架构 | Decision |
| 用户偏好用 Ruff 做代码格式化和 lint | Preference |
召回记忆
你可以显式地通过「参考 Notion 中的相关记忆」等表述来触发。
跨平台共享
这是核心价值:同一个 Notion 数据库,被 Claude.ai、Claude Code、OpenClaw 共同读写。在任何一个平台产生的记忆,其他平台都能召回。
零配置设计
我在设计上花了不少心思来降低使用门槛。最终采用了约定优于配置的方案:
- 数据库固定命名为 “Memory Store”
- Skill 每次运行时按名称搜索数据库,找到就用
- 首次使用时自动创建数据库
- 无需配置文件、环境变量或手动填写 ID
安装即用,真正的零配置。
安装方式
Claude Code
git clone https://github.com/smilelight/notion-memory-store.git
claude plugin add ./notion-memory-store
Claude.ai
- 下载仓库中的两个 SKILL.md 文件
- 打开 https://claude.ai/customize/skills
- 点击 + -> Upload a skill,上传即可
OpenClaw
- 先安装 notion skill(提供 Notion API 访问能力)
- 再安装
memory-to-notion和recall-from-notion(在 ClawHub 搜索即可)
数据库长什么样
每条记忆是数据库中的一行,包含以下字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| Title | Title | 记忆的一句话概括 |
| Category | Select | Fact / Decision / Preference / Context / Pattern / Skill |
| Content | Rich Text | 记忆的详细内容 |
| Source | Select | 来自哪个平台 |
| Status | Select | Active / Archived / Contradicted |
| Scope | Select | Global(全局)/ Project(项目级) |
| Project | Rich Text | 项目名 |
| Expiry | Select | 过期策略(Never / 30d / 90d / 1y) |
| Source Date | Date | 原始对话发生时间 |
精简到 9 个字段,砍掉了 Tags、Confidence、Last Used、Memory ID 等实践中证明冗余的字段。核心原则是:够用就好,字段越少写入越稳定。
其中有几个设计值得说一下:
Scope 字段:区分全局记忆和项目级记忆。「用户偏好用中文交流」是全局的,「OpenClaw 项目使用 FastAPI」是项目级的。召回时会根据当前项目自动过滤,避免注入无关信息。
Status 字段:支持记忆的自我修正。当新记忆与旧记忆冲突时,旧的会被标记为 Contradicted,形成一个自愈循环。
Expiry 字段:不是所有记忆都该永久保留。临时的 workaround 设 30d,项目状态设 90d,核心偏好设 Never。




技术细节
两个核心 Skill:
memory-to-notion(写入):
- 分析对话,提取原子化记忆
- 搜索已有记忆做去重和冲突检测
- 冲突时标记旧记忆为 Contradicted,写入新记忆
recall-from-notion(召回):
- 分析当前话题,提取关键词和语义查询
- 双路召回:结构化查询(精确匹配)+ 语义搜索(覆盖盲区)
- MCP 平台(Claude Code / Claude.ai)自动降级为单路语义搜索,<500 条记忆时体验无明显差异
- 按相关性排序,注入 10-15 条最相关的记忆
注意事项
- 不要重命名数据库:Skill 靠 “Memory Store” 这个名字来发现数据库
- 避免同名数据库:一个工作区只保留一个 “Memory Store”
- 需要 Notion 连接:确保你的平台已连接 Notion(MCP / Connector)
以用户为中心
这一点我想单独强调:记忆完全由用户主导。
- 所有记忆都存在你自己的 Notion 里,你随时可以打开数据库查看
- 觉得哪条记忆不对?直接在 Notion 里编辑
- 不想让 AI 记住某件事?直接删除那一行
- 想导出所有记忆?Notion 原生支持 CSV / Markdown 导出
- 换平台、换账号、甚至换 AI 服务商?记忆还在你的 Notion 里,不会丢
没有黑箱,没有锁定。AI 帮你写入和召回,但数据的所有权始终在你手上。
最后
这个项目源于一次账号被封的惨痛教训。几个月的对话记忆一夜清零,让我意识到:AI 的记忆不应该是平台的附属品,而应该是用户自己的资产。
Notion 作为记忆后端不是最终形态,但它可能是比较简单实用的方案 – 成熟的数据库能力、广泛的平台集成、数据完全归你所有。
项目完全开源,欢迎 Star、Fork、提 Issue:github.com/smilelight/notion-memory-store