我是一个常年混迹知识管理圈的开发者,平时最大的爱好就是折腾各种笔记工具、自托管服务和AI应用。今天要聊的这个项目,叫做 supermemory,名字很直白——超级记忆。它不是某个商业平台的附属功能,而是一个开源的AI知识库项目,核心定位是打造属于你自己的“第二大脑”:把你在网页上、PDF里、代码仓库中看到的有价值信息,统一收集起来,然后用自然语言和它对话、提问、检索。
这篇文章我想从项目思路、技术原理、部署实操到常见坑位,完整拆一遍,适合三类人看:一是被信息碎片搞得焦头烂额的知识工作者,二是对RAG、向量数据库感兴趣但还没上手玩过的开发者,三是准备自建一套私密知识库、不想把数据放在别人服务器上的隐私敏感型用户。我会尽量把每一步讲透,包括命令和参数背后的考量,确保你照着做就能搭起来。
1. 项目整体设计与核心思路
1.1 它到底解决什么问题
先聊一个很普遍的痛点:我们每天都会接触大量信息,浏览器里收藏了几百个网页,硬盘里堆着几十个PDF,GitHub上Star了一堆仓库,看到好内容的时候心里想着“以后再看”,但这个“以后”基本永远不会来。真正要用到某个知识点的时候,要么忘记在哪看过,要么搜索关键词匹配不到,要么找到了一堆关联度极低的垃圾结果。
supermemory 的解题思路跟传统笔记软件完全不同。传统工具的核心是“手动整理”——你负责建目录、打标签、写摘要,工具只负责存储。而 supermemory 的核心是“自动记忆 + 语义检索 + 主动回答”:你把信息源丢给它,它自动切片、向量化、索引;你要用的时候,不用记关键词,不用翻文件夹,直接用大白话问它,它能把最相关的内容捞出来,再交给大语言模型组织成回答。本质上,它是把“采、存、管、用”这四件事里的“管”和“用”全部自动化了。
1.2 为什么选这个项目而不是其他同类工具
知识管理这个赛道并不冷门,跟它定位相似的工具至少有十几个,比如 Rewind、Mem.ai、Coda AI,还有各种自托管的RAG方案。我当初选 supermemory,除了它开源、能自托管之外,最看重的是三个点。
第一是信息源接入的广度。它能直接抓取网页正文、浏览器书签、PDF 文档,甚至还能导入 GitHub 仓库内容,这对开发者来说特别友好。很多同类工具只支持“粘贴文本”或者“上传文档”,收集动作的摩擦感很强,而 supermemory 尽量做到了“丢链接进去就行”。
第二是技术栈足够现代。它后端用了轻量级的 Hono 框架,部署在 Cloudflare Workers 这种边缘环境上,向量存储用的是 PostgreSQL 的 pgvector 扩展,整个链路没有一堆重型中间件,个人部署的学习成本不高。
第三是提供了比较清晰的扩展边界。除了开箱即用的前端界面,它还暴露了 API,如果你想把它嵌入自己的博客、微信机器人或者任何自动化工作流里,都有明确的对接方式。
1.3 它和“超级记忆”这个概念的对应关系
supermemory 的英文名起得很妙。人的记忆有两个致命弱点:一是遗忘曲线导致信息随时间衰减,二是存储和提取都依赖线索,线索断了信息就找不回来。supermemory 用数据库替代了遗忘曲线,用向量语义匹配替代了线索依赖。你要做的不是努力记住,而是努力“输入”,剩下的交给系统。从这个角度看,它确实是对人脑记忆机制的一次外挂式增强。
2. 技术原理解析:记忆是怎么被“写入”和“读取”的
很多人听到 AI 知识库就觉得黑魔法,其实底层逻辑拆开看并不复杂。supermemory 把从“输入信息”到“回答问题”的全过程拆成了三个环节:采集、嵌入、检索问答。我给你一个个讲清楚。
2.1 嵌入模型:把文字变成坐标
这里必须花点篇幅讲一下嵌入(Embedding)的概念,因为它是整个系统的地基。通俗地理解,嵌入模型的作用是:把一段文字转换成一串固定长度的数字数组,比如 1536 个浮点数。如果你把这段文字想象成多维空间里的一个点,那么语义相近的文本,它们对应的点在空间里距离就越近。
举个例子,“今天天气很好”和“阳光明媚的午后”字面上没有任何重合词,但在向量空间里,这两个点的距离会非常近。反过来,“今天天气很好”和“服务器又宕机了”的距离就会非常远。这就是语义搜索和传统关键词搜索最本质的区别——它不看字面,看语义。
supermemory 在嵌入这一步,一般是调用 OpenAI 的 text-embedding-3-small 或类似的模型。你把每个文档切片后的内容送去生成向量,然后连同原文、来源链接、元数据一起存入数据库。这个过程就是“写入记忆”。
2.2 向量数据库和 RAG:怎么从记忆中找到答案
有了向量之后,查询就变成了一个纯数学问题:把你现在问的问题同样转成一个向量,然后在数据库里用余弦相似度(Cosine Similarity)或欧式距离去找最接近的那批向量。pgvector 就是专门干这个的扩展,它能在 PostgreSQL 里直接建向量索引,用索引做近似最近邻搜索(ANN),速度快得惊人。
找到最相关的片段之后,系统并不会直接把片段甩给你,而是把所有命中片段连同你的问题一起塞给大语言模型,让模型基于片段内容组织出一个自然语言回答。这个流程就是在行业里被反复提到的 RAG(Retrieval-Augmented Generation,检索增强生成)。RAG 的核心价值在于:模型回答的内容不是凭空生成的,而是有资料依据的,所以准确性比裸考大模型高很多,还能注明信息来自哪篇文章。
2.3 为什么这个架构选择很合理
如果你之前搭过类似的工具,会发现 supermemory 的架构选择是很务实的。它没有自研搜索引擎(虽然可以接),没有自研向量引擎(直接用全文索引加向量索引),甚至前端容器部署都不是必须的。每个环节都用成熟组件,这样项目维护成本低,社区二次开发的门槛也低。
还有一点值得单独提:它把“记忆存储”和“模型推理”剥离开了。存储端用 PostgreSQL,稳定可靠,数据不会丢;推理端是后接的大模型接口,模型更新换代的时候,你的知识库完全不受影响。这种设计保证了工具的生命力,不会因为某个模型版本过时就说整条链子崩了。
3. 部署实操:从零搭建一个能用的 supermemory
理论讲完了,接下来是纯实操环节。我假设你的系统是 Ubuntu 22.04 或 Debian 的服务器,并且已经安装了 Docker 和 Docker Compose。即使你没接触过 Docker,只要按命令复制粘贴,也能跑起来。
3.1 准备工作:环境、依赖和镜像获取
这个项目要跑起来需要三样东西:数据库、存储、执行推理的模型接口。数据库一般就是 PostgreSQL 带 pgvector 扩展,存储可以挂在本地磁盘,模型接口用 OpenAI 兼容的服务即可。
如果你不想自己编译源码,直接用官方提供的 Docker 镜像是比较稳妥的选择。项目根目录下有个 docker-compose.yml 文件,里面把前后端、数据库都定义好了。在你 clone 代码之后,需要先复制环境变量模板:
git clone https://github.com/supermemoryai/supermemory.git cd supermemory cp .env.example .env然后打开 .env 文件,逐个配置环境变量。这一步是整个部署中出错率最高的地方,下面列几个关键项。
3.2 关键配置项逐一说明
首先是OPENAI_API_KEY。这是必填项,负责生成嵌入向量和回答问题的推理请求。如果你用的是其他兼容OpenAI接口的模型提供商,比如国内的一些大模型服务、或者本地部署的 vLLM 服务,那对应的OPENAI_BASE_URL也要改。比如:
OPENAI_API_KEY=sk-your-key OPENAI_BASE_URL=https://api.openai.com/v1其次是数据库的配置。如果是本地 Docker 起的 PostgreSQL,一般长这样:
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/supermemory注意,这里要保证 PostgreSQL 提前装上了 pgvector 扩展。官方 Docker 镜像里其实已经集成了,如果你是自己安装的 PostgreSQL,需要额外执行CREATE EXTENSION vector;。
还有一个容易被忽略的AUTH_SECRET,这是用来加密会话和用户凭证的密钥。生产环境里千万别用默认值,最好用openssl rand -base64 32生成一个随机字符串填进去。
3.3 启动服务与数据迁移
配置完成后,执行下面的命令启动所有服务:
docker compose up -d第一次启动时,Docker 会自动拉取镜像并创建容器。启动完成后,还需要执行数据库迁移,把表结构初始化好:
docker compose exec backend npx prisma migrate deploy这是一个特别容易踩坑的步骤,很多人在启动后直接访问前端,发现一直报“Internal Server Error”,其实就是忘记跑迁移了。迁移完成后,打开浏览器访问http://localhost:3000,你应该能看到登录注册页面。注册一个账号,登录进去,就进入了主界面。
3.4 前端界面:把内容喂给它
主界面比较简洁,左边是信息源列表,中间是对话窗口,右边是收集箱。你可以直接把一个网页链接粘贴进去,点击“Memorize”按钮,进入那种感觉,但这不是我一个人瞎吹出来的,实测下来,隔了一天再去问同一个问题,它依然能从刚收藏的文章里给出答案。
我最常用的操作是浏览推特精选文章时,把长文链接丢进去,然后顺手给这段内容打上主题标签。第二天用 RAG 搜“Web3”时,它能把几天前乃至几周前收藏的问题和链接全部关联起来。这个“延迟记忆”能力,是超笔记之前最打动我的地方。
4. API 对接:把 supermemory 嵌入到自己的自动化工作流里
如果你有一点开发能力,建议把 supermemory 当成一个本地服务来调用,而不是只满足于在网页界面里跟它聊天。我目前的做法是在自己的 RSS 阅读器里装了一个一键保存的脚本,凡是打星的条目,自动通过 API POST 到 supermemory 的收集箱。大概用了几行 Python:
import requests SUPERMEMORY_API_URL = "http://localhost:3000/api/memorize" API_TOKEN = "your-token-here" def remember(url: str, title: str): payload = { "url": url, "title": title, "sources": ["rss"], "tags": ["read-later"] } headers = {"Authorization": f"Bearer {API_TOKEN}"} resp = requests.post(SUPERMEMORY_API_URL, json=payload, headers=headers) if resp.status_code == 200: print("saved") else: print(resp.text) remember("https://example.com/great-article", "Example Article")就这么几行代码,我就把一个“只要收藏就永远不再看”的书签变成了一个主动沉淀的知识资产。同理,你还可以写浏览器插件把当前标签页一键发送到 supermemory,也可以写 Telegram 机器人,把群里值得收藏的链接直接转存进去。
5. 常见问题与排查技巧实录
我实际使用过程中遇到了不少问题,专门整理成一份速查表,帮助你把踩坑时间省下来。
| 问题表现 | 可能原因 | 排查方法 |
|---|---|---|
| 页面打不开 | 容器没启动中 | docker compose ps查看容器状态 |
| 一直转圈 | 数据库迁移没跑 | 重新执行prisma migrate deploy |
| 能登录但无法收藏 | API Token 配错 | 检查.env中API_TOKEN,一般需要从后台页面获取 |
| 抓取网页内容为空 | 目标网站禁止抓取 | 在页面里开启“手动抓取”,或改用第三方抓取服务 |
| 搜索返回结果太差 | 嵌入模型参数不对 | 先确认.env里EMBEDDING_MODEL设置正确 |
| 数据库内存飙升 | 向量索引过多 | 给 PostgreSQL 分配更大的内存,并配置maintenance_work_mem |
两个比较大的坑,单独提一下。
第一个是AUTH_SECRET设置问题。很多自托管用户图省事,直接沿用默认密钥,导致用户Session可以被伪造,还有跨服务器碰撞的风险。我一开始也踩了这个坑,后来改成强随机字符串重新部署,所有Session要重新登录,但这才是正常的安全状态。
第二个是向量索引的构建。数据量小一点的时候还好,收藏了几千条之后,如果不给向量列建立 HNSW 索引,查询速度会从毫秒级直线掉到秒级甚至更慢。建立索引的 SQL 是:
CREATE INDEX ON documents USING hnsw (embedding vector_cosine_ops);这一步是我查阅资料才发现的,官方 README 里没细讲,但它对实际体验的影响极大。如果你数据量已经很大,建议在流量较低的时段执行这条语句。
6. 数据隐私与备份建议
用 supermemory 存储个人的阅读记录、笔记、文章,数据安全和隐私保护是要认真对待的。我的建议是:不要只用 Docker 默认的匿名卷,明确指定宿主机目录来持久化 PostgreSQL 数据,就像下面这样:
volumes: - ./pgdata:/var/lib/postgresql/data这样以后升级镜像、重启容器也不怕数据丢失。再配合 cron 任务,每天把pgdata目录压缩备份到另一个磁盘或对象存储,基本上就万无一失了。考虑到这些内容可能包含你个人的想法和研究线索,我认为这个备份习惯跟“刷牙”一样重要。
另外我还会定期把 supermemory 的收藏列表导出为 JSON,用一个小脚本把每条记录的标题、URL、抓取时间整理进一个表格里。这个动作的意义在于:即使以后这个工具停止维护,我的知识资产也不会被锁死在里面。
7. 未来扩展思路:这个方向还能怎么玩
如果你已经完整跑通了 supermemory,建议顺着下面这些方向去探索,它们会大幅提升它的价值。
先说跟浏览器深度绑定的玩法。官方其实支持在浏览器里通过 plugin 把当前页面发给 supermemory,我觉得这一步做得特别顺滑。装了插件之后,能一键保存页面,还能顺手添加批注,把当时的想法一起存进去,后面再翻出来的时候,情境感会强很多。
再说与本地模型的结合。如果你有本地显卡,可以部署一个开源嵌入模型,比如 BAAI/bge-m3 或诺尔的 E5,然后在.env里把EMBEDDING_BASE_URL指向本地模型服务。这样,嵌入生成完全离线,隐私性进一步拉满,推理端仍然用云端大模型或者也切到本地。这种做法牺牲一些速度,但换来的是数据完全不出服务器。
最后说说知识图谱。现在的 supermemory 本质上还是文档检索,当数据量到了一定级别,能不能把收藏的内容按主题、作者、事件维度抽成图谱,再用图查询的方式去做深度分析,是一个很有意思的方向。目前群里有人已经开始在 postgres 里导出实体和关系表了,我觉得这个方向跟知识管理的终局形态是很接近的。
从我个人的体验来看,supermemory 最理想的使用方式,是把它当成一个“只进不出的记事本”来用。很多人记笔记、收藏链接,脑子里想的是“我以后一定翻”,但实际收藏的下一秒就忘了。supermemory 的出现,让我可以放心地把“记住”这件事外包给机器,自己的大脑只管提问和判断。这个感觉真的很舒服,已经回不去用普通收藏夹的日子了。如果你也被信息过载困扰,不妨把项目拉下来跑一遍,花一个下午搭起来,相信它不会让你失望。