国内还在卷提示词模板的时候,海外开发者圈已经悄悄把一件事做成了独立的基础设施:给AI装一个长期的、跨会话的记忆层。
你肯定遇到过这种憋屈:跟ChatGPT聊得好好的,第二天开个新会话,它把你忘得一干二净;客服机器人昨天刚登记过你的手机号,今天再问一遍;Agent跑了半小时的任务,中途重启一次,全部从头来。大多数人以为这是“模型不行”,其实模型记不住东西是天性——上下文窗口再大,也不可能把你一年的对话全塞进去,就算塞进去,token费也够你喝一壶。
真正的解法在模型外面:加一层独立的“记忆系统”。它负责从对话里抽取事实、存起来、在需要的时候捞出来塞回提示词。这个赛道在海外已经跑出了三个风格完全不同的开源玩家,GitHub上都是几千星级的活跃项目,但国内社区对这个方向的系统讨论还很少——大部分人手上项目的“记忆”,还是把聊天记录整段砍了塞回prompt,或者干脆用向量库手搓一个粗版RAG糊弄事。
这篇文章把三个工具一次讲透:Mem0、Letta、Zep(Graphiti)。看完你至少知道自己的项目该抄哪家的作业。
在讲工具之前,先把架构图放在这,后面三家的差异全都能对着这张图理解:
flowchart TD
U["用户消息进来"] --> E["记忆层:抽取事实"]
E --> S{"和已有记忆冲突?"}
S -->|是| UP["更新旧记忆"]
S -->|否| ADD["写入新记忆"]
UP --> DB[("记忆库:向量或图谱")]
ADD --> DB
U --> Q["带着当前问题去检索"]
Q --> DB
DB --> R["召回相关的那几条"]
R --> P["拼进最终Prompt"]
P --> L["LLM作答"]
L --> A["回复里带着历史的你"]
注意两个关键点:
海外的三个玩家,正好对应三种“存记忆”的哲学:存成事实卡片(Mem0)、存成分层工作区(Letta)、存成知识图谱(Zep/Graphiti)。
项目地址:https://github.com/mem0ai/mem0 (官网 mem0.ai)
Mem0的定位最直白:不想让你改架构,只想让你在现有代码里加两行。
pip install mem0ai
然后核心API就两个动作:
m.add(对话内容, user_id=...) —— 从这段对话里自动抽取事实存起来m.search("用户预算多少?", user_id=...) —— 按当前问题召回相关记忆抽取和检索这一来一回,中间的embedding、去重、冲突更新全由它包了。它的开源核心支持接OpenAI、Anthropic,也支持通过Ollama接本地模型——也就是说你可以整套跑在自己机器上,一行APIkey都不用给外面。对国内用户来说这是个关键加分项:数据不出本地,也没有海外服务的网络问题。
它同时有托管平台版(Mem0 Platform),不想自己维护存储的可以直接用云服务。这种“开源核心+托管收费”的双轨结构,和Supabase、Langfuse是一个打法,个人玩开源版,公司化用托管版。
适合谁: - 给自家Chatbot/客服/教练类应用加“记得用户”的能力,今天下午就想上线 - 用Dify、FastAPI之类搭应用,不想为记忆重构代码的 - 个人开发者——这是三个里面上手成本最低的,Python两行起步
和国内方案的对比:国内常见的做法是把历史对话截断塞回system prompt,或者拿pgvector手搓一个向量召回。前者费token还容易超窗,后者你得自己解决“什么时候写入、怎么去重、旧信息怎么覆盖”这些脏活——这些恰恰是Mem0封装掉的部分。国内编排平台(Dify、扣子)里记忆基本是“变量+会话历史”的思路,独立记忆层的选型和讨论都很少。
项目地址:https://github.com/letta-ai/letta (官网 letta.com)
如果说Mem0是“给现有应用补记忆”,Letta的野心大得多:整个Agent就是一个长期存活的进程,记忆是它的内存。
它的前身是大名鼎鼎的MemGPT——就是那篇提出“把LLM当操作系统、分层管理上下文”的论文。团队后来直接把公司改名叫Letta,论文思路做成了开源产品。
Letta的核心玩法:
letta server),Agent的状态持久化在数据库里。会话断了、服务重启了,Agent还是那个Agent——它记得自己是谁、记得用户是谁。还值得一提的是它的sleep-time计算:让一个后台Agent在空闲时整理主Agent的记忆——该归档的归档、该总结的总结,不打扰主线程干活。这思路很像操作系统后台的垃圾回收,是“Agent工程”里相当前沿的一招。
适合谁: - 要做长期存活的Agent:个人助理、运维值守、每天定时干活的员工型Agent - 受够了“每次重启全失忆”的自动化流程 - 想认真研究Agent记忆机制的工程师——Letta是目前把MemGPT思想实现得最完整的教学级范本
和Mem0怎么选:一句话——Mem0是“记忆中间件”,粘到哪个应用都行;Letta是“带记忆的Agent运行时”,你等于把整个Agent托管给它。项目已有Dify式自建应用,选Mem0;从零做一个长命Agent,直接上Letta。
项目地址:https://github.com/getzep/graphiti (官网 zep.ai)
前两家的记忆都是“一条条独立的事实”,Graphiti走的是第三条路:时序知识图谱。
它把对话里的实体(人、公司、产品)和关系(谁就职于哪、谁的预算是多少)抽出来,连成一张图,最特别的是每条关系都带时间戳——“老张在A公司”这条边是3月成立的,“老张跳槽到B公司”是9月成立的。查询时按时间线判断现在哪条边有效,新的信息自动覆盖旧的,而不是像普通向量库那样新旧两条并存、召回时看运气。
底层用Neo4j做图存储。这对有一类场景是降维打击:CRM、企业客服、销售助理——这些场景里事实之间本来就是强关联的(客户-联系人-商机-沟通记录),单纯“事实卡片”丢了关系网,图谱天然就是给这种数据长的。
Zep是Graphiti之上的商业化服务,开箱即用;Graphiti是开源的图记忆引擎,可以自己拿来当Mem0的图谱版用。
适合谁: - 场景里实体关系复杂、且“信息会过期”(人事变动、价格变更、状态流转)的 - 已经在用Neo4j或者对图谱有积累的团队 - 觉得向量召回“召回了但答不对”的——很多时候问题就出在缺关系和时间线
| 维度 | Mem0 | Letta | Zep/Graphiti |
|---|---|---|---|
| 一句话定位 | 记忆中间件,两行接入 | 带记忆的Agent运行时 | 时序知识图谱记忆引擎 |
| 记忆形态 | 事实卡片(向量+抽取) | 分层记忆块+自编辑 | 实体关系图+时间戳 |
| 上手成本 | 最低(pip装完即用) | 中(要起服务器、理解模型) | 较高(要懂图谱和Neo4j) |
| 改造成本 | 几乎为零 | 需把Agent迁到它的运行时 | 需自己设计图谱写入逻辑 |
| 最香场景 | C端个性化Chatbot | 长期值守Agent、Agent平台 | CRM、企业知识、多跳关系问答 |
| 本地化能力 | 开源核心可全本地 | 开源可自托管 | 开源可自托管 |
| 你可能以为的 | 海外已经跑通的 |
|---|---|
| 记忆就是把聊天记录塞回prompt | 记忆是抽取后的事实/图谱,流水账反而没用 |
| 上下文窗口越大,越不需要记忆 | 窗口再大,跨会话、低成本、精准召回还得靠记忆层 |
| 换个模型记忆就没了 | 记忆层是独立服务,模型随便换记忆不丢 |
| 记忆=向量库RAG | 向量只是形态之一,图谱+时间线正在接管复杂场景 |
| 记忆要自己手搓 | 三种哲学各有成熟开源件,pip/docker就能上车 |
pip install mem0ai,拿你手头任何一个Chatbot demo,在消息入口加m.add()、拼prompt前加m.search(),跑三天看召回质量。本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护。 聚焦5G/6G核心网、3GPP标准、AI工具实战。知识星球「51学通信」提供深度技术答疑和行业洞察。
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
