项目背景:AI 应用缺个“记忆皮层”
现在的 LLM 对话也好,Agent 也好,一个常见痛点是记不住东西。每次对话都是独立上下文,用户上次说过的偏好、历史结果,下轮就得重新喂。传统做法是把对话历史拼进 prompt,但 token 坐火箭似的涨,成本高,还容易冲淡关键信息。
Supermemory 就瞄准了这个场景 —— 它提供一个 memory engine,说白了就是帮你把一个用户的长期记忆(文本、向量甚至结构化数据)存起来,然后通过 API 快速查询最相关的记忆片段。今天 GitHub 一天涨了 2.3 万 star,说明大家被这个问题折磨得不轻。
核心功能:一个 API 管记忆

根据项目文档,Supermemory 提供 REST API,你只需要把用户的文本(比如对话、笔记)POST 上去,它就会自动分块、向量化、索引。查询时传入当前上下文,返回最相关的记忆。
下面是一个能跑的最小示例(假设你有 API Key 和 base url,用 curl 演示,代码逻辑通用):
bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 存储用户记忆
curl -X POST "https://api.supermemory.ai/v1/memory" \
-H "Authorization: Bearer sk-your-key" \
-H "Content-Type: application/json" \
-d '{
"user_id": "u_123",
"data": "我喜欢喝冰美式,工作日上午通常用来提神。"
}'
# 查询记忆:用户问“帮我推荐喝的”,我们传入上下文
curl -X POST "https://api.supermemory.ai/v1/query" \
-H "Authorization: Bearer sk-your-key" \
-H "Content-Type: application/json" \
-d '{
"user_id": "u_123",
"query": "我想喝点提神的,有什么推荐?"
}'
# 返回大概这样:
# {
# "results": [
# {
# "id": "mem_456",
# "content": "我喜欢喝冰美式,工作日上午通常用来提神。",
# "relevance": 0.92
# }
# ]
# }
返回的内容你可以直接拼进 system prompt 或作为 RAG 上下文。注意 user_id 是必传的,保证了多用户隔离。
它和同类方案比,差异在哪?
我目前主要看到三个路线:
- LangChain 的
Memory模块:本质是内存中的列表或会话缓存,重启就丢,持久化需要自己接外部数据库。Supermemory 开箱即用,不用自己搭向量库。 - MemGPT(现在叫 Letta):本地运行,但架构复杂,要起服务、调 agent 框架。Supermemory 更轻量,就是一个 API 代理,你的 LLM 应用通过 HTTP 调它就够了。
- 自己用 Pinecone + OpenAI Embedding:Pinecone 没有内置分块和自动索引,还得自己写逻辑处理分块、重试、租户隔离。Supermemory 把这些封装了,但代价是丧失了自定义分块策略的灵活性。
个人观点:如果你团队就两三个人,想快速给聊天机器人加记忆,Supermemory 是个捷径。但如果你有大规模、细粒度控制的需求(比如自定义 chunk 大小、embeddings 模型),它目前是黑盒。
适用场景与局限
适用场景:
- 个人助手/聊天机器人:需要记住用户偏好和之前的对话。
- 知识库问答:用户提问后,能检索到之前存过的答案(类似个人 wiki)。
- 轻量级 RAG:不想自己管理向量数据库的团队。
局限和坑(来自文档未提及的推测):
- 数据一致性:目前没看到事务或冲突检测。如果用户同时更新一条记忆(比如同一段对话被两个请求插入),可能造成重复或覆盖。生产环境需要幂等设计。
- 延迟不确定性:它宣称“extremely fast”,但底层存储未知。如果后端是 Postgres+pgvector 或者 SQLite,并发稍高可能变慢。建议上线前压测。
- 隐私:数据存在第三方服务(现在是他们托管),对于企业内部敏感数据可能合规风险。自部署选项目前未开放。
- 没有实体抽取:它只能存文本、查文本,不会帮你提取出“用户喜欢冰美式”这样的结构化信息。如果要做更精细的记忆(比如知道用户过敏食物),还需要自己加一层 NER。
快速上手:10 分钟接入
- 注册获取 API Key:去 https://supermemory.ai 注册(注意现在可能还在 beta,需要排队)。
- 写个测试脚本(上面 curl 示例即可)。
- 集成到你现有的 LLM 调用流程:
- 每次用户发消息时,先调用
/query获取相关记忆。 - 把返回的
results拼成一段文字,放到 system prompt 末尾。 - 用户回复后,再调用
/memory存进去。
- 每次用户发消息时,先调用
推荐用 Node.js 写个封装,因为项目本身是 TypeScript,官方 SDK 应该很快会出。临时可以用 fetch。
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const MEMORY_API = 'https://api.supermemory.ai/v1';
const apiKey = 'sk-your-key';
async function remember(userId, context) {
const res = await fetch(`${MEMORY_API}/query`, {
method:'POST',
headers:{'Authorization':`Bearer ${apiKey}`, 'Content-Type':'application/json'},
body: JSON.stringify({user_id: userId, query: context})
});
return res.json();
}
async function store(userId, data) {
const res = await fetch(`${MEMORY_API}/memory`, {
method:'POST',
headers:{'Authorization':`Bearer ${apiKey}`, 'Content-Type':'application/json'},
body: JSON.stringify({user_id: userId, data})
});
return res.json();
}
- 测试:存几条数据,换不同 query 看召回效果。
最后,建议你读一下他们的 README 的 FAQ 部分(如果有的话)。目前才第一天爆火,文档可能还很简陋,遇到问题提 issue 才是常态。