项目背景:AI 应用缺个“记忆皮层”

现在的 LLM 对话也好,Agent 也好,一个常见痛点是记不住东西。每次对话都是独立上下文,用户上次说过的偏好、历史结果,下轮就得重新喂。传统做法是把对话历史拼进 prompt,但 token 坐火箭似的涨,成本高,还容易冲淡关键信息。

Supermemory 就瞄准了这个场景 —— 它提供一个 memory engine,说白了就是帮你把一个用户的长期记忆(文本、向量甚至结构化数据)存起来,然后通过 API 快速查询最相关的记忆片段。今天 GitHub 一天涨了 2.3 万 star,说明大家被这个问题折磨得不轻。

核心功能:一个 API 管记忆

supermemory api request response example

根据项目文档,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:不想自己管理向量数据库的团队。

局限和坑(来自文档未提及的推测):

  1. 数据一致性:目前没看到事务或冲突检测。如果用户同时更新一条记忆(比如同一段对话被两个请求插入),可能造成重复或覆盖。生产环境需要幂等设计。
  2. 延迟不确定性:它宣称“extremely fast”,但底层存储未知。如果后端是 Postgres+pgvector 或者 SQLite,并发稍高可能变慢。建议上线前压测。
  3. 隐私:数据存在第三方服务(现在是他们托管),对于企业内部敏感数据可能合规风险。自部署选项目前未开放。
  4. 没有实体抽取:它只能存文本、查文本,不会帮你提取出“用户喜欢冰美式”这样的结构化信息。如果要做更精细的记忆(比如知道用户过敏食物),还需要自己加一层 NER。

快速上手:10 分钟接入

  1. 注册获取 API Key:去 https://supermemory.ai 注册(注意现在可能还在 beta,需要排队)。
  2. 写个测试脚本(上面 curl 示例即可)。
  3. 集成到你现有的 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();
}
  1. 测试:存几条数据,换不同 query 看召回效果。

最后,建议你读一下他们的 README 的 FAQ 部分(如果有的话)。目前才第一天爆火,文档可能还很简陋,遇到问题提 issue 才是常态。