让 AI 拥有跨平台长期记忆:我开源了一个基于 Notion 的 Memory Store

前段时间我的 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」,它会:

  1. 回顾当前对话内容
  2. 提取有价值的信息(事实、决策、偏好、技能等)
  3. 分解为原子化的记忆条目 – 一条记忆只记一件事
  4. 自动去重,写入 Notion 数据库

比如一次关于项目架构的对话,可能产生这样的记忆:

记忆类别
用户使用 uv 而非 pip 管理 Python 依赖Preference
项目 OpenClaw 使用 FastAPI + PostgreSQL 架构Decision
用户偏好用 Ruff 做代码格式化和 lintPreference

召回记忆

你可以显式地通过「参考 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

  1. 下载仓库中的两个 SKILL.md 文件
  2. 打开 https://claude.ai/customize/skills
  3. 点击 + -> Upload a skill,上传即可

OpenClaw

  1. 先安装 notion skill(提供 Notion API 访问能力)
  2. 再安装 memory-to-notionrecall-from-notion(在 ClawHub 搜索即可)

数据库长什么样

每条记忆是数据库中的一行,包含以下字段:

字段类型说明
TitleTitle记忆的一句话概括
CategorySelectFact / Decision / Preference / Context / Pattern / Skill
ContentRich Text记忆的详细内容
SourceSelect来自哪个平台
StatusSelectActive / Archived / Contradicted
ScopeSelectGlobal(全局)/ Project(项目级)
ProjectRich Text项目名
ExpirySelect过期策略(Never / 30d / 90d / 1y)
Source DateDate原始对话发生时间

精简到 9 个字段,砍掉了 Tags、Confidence、Last Used、Memory ID 等实践中证明冗余的字段。核心原则是:够用就好,字段越少写入越稳定

其中有几个设计值得说一下:

Scope 字段:区分全局记忆和项目级记忆。「用户偏好用中文交流」是全局的,「OpenClaw 项目使用 FastAPI」是项目级的。召回时会根据当前项目自动过滤,避免注入无关信息。

Status 字段:支持记忆的自我修正。当新记忆与旧记忆冲突时,旧的会被标记为 Contradicted,形成一个自愈循环。

Expiry 字段:不是所有记忆都该永久保留。临时的 workaround 设 30d,项目状态设 90d,核心偏好设 Never。

Notion Memory Store 数据库视图

Memory Store 字段配置

跨平台架构图

实际使用效果

技术细节

两个核心 Skill:

memory-to-notion(写入):

  • 分析对话,提取原子化记忆
  • 搜索已有记忆做去重和冲突检测
  • 冲突时标记旧记忆为 Contradicted,写入新记忆

recall-from-notion(召回):

  • 分析当前话题,提取关键词和语义查询
  • 双路召回:结构化查询(精确匹配)+ 语义搜索(覆盖盲区)
  • MCP 平台(Claude Code / Claude.ai)自动降级为单路语义搜索,<500 条记忆时体验无明显差异
  • 按相关性排序,注入 10-15 条最相关的记忆

注意事项

  1. 不要重命名数据库:Skill 靠 “Memory Store” 这个名字来发现数据库
  2. 避免同名数据库:一个工作区只保留一个 “Memory Store”
  3. 需要 Notion 连接:确保你的平台已连接 Notion(MCP / Connector)

以用户为中心

这一点我想单独强调:记忆完全由用户主导

  • 所有记忆都存在你自己的 Notion 里,你随时可以打开数据库查看
  • 觉得哪条记忆不对?直接在 Notion 里编辑
  • 不想让 AI 记住某件事?直接删除那一行
  • 想导出所有记忆?Notion 原生支持 CSV / Markdown 导出
  • 换平台、换账号、甚至换 AI 服务商?记忆还在你的 Notion 里,不会丢

没有黑箱,没有锁定。AI 帮你写入和召回,但数据的所有权始终在你手上。

最后

这个项目源于一次账号被封的惨痛教训。几个月的对话记忆一夜清零,让我意识到:AI 的记忆不应该是平台的附属品,而应该是用户自己的资产

Notion 作为记忆后端不是最终形态,但它可能是比较简单实用的方案 – 成熟的数据库能力、广泛的平台集成、数据完全归你所有。

项目完全开源,欢迎 Star、Fork、提 Issue:github.com/smilelight/notion-memory-store

← 如果人生可以重来,你想活几次?