首页 › new-tools › AI金鱼脑有救了:海外记忆层三件套

国内还在卷提示词模板的时候,海外开发者圈已经悄悄把一件事做成了独立的基础设施:给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["回复里带着历史的你"]

注意两个关键点:

  1. 记忆不是聊天记录。聊天记录是“流水账”,记忆是“用户喜欢喝冰美式”“他公司的数据库是PostgreSQL”这种抽取后的事实。流水账占空间还没法检索,事实才能精准召回。
  2. 记忆层是独立服务。它插在应用和LLM之间,模型随便换——今天用GPT明天换Claude后天跑本地Ollama,记忆都跟着应用走,不跟着模型走。这一点是被国内严重低估的:很多人以为换个模型记忆就没了,其实在架构上这俩根本该解耦。

海外的三个玩家,正好对应三种“存记忆”的哲学:存成事实卡片(Mem0)、存成分层工作区(Letta)、存成知识图谱(Zep/Graphiti)。

二、Mem0:两行代码上车的“傻瓜式记忆”

项目地址:https://github.com/mem0ai/mem0 (官网 mem0.ai)

Mem0的定位最直白:不想让你改架构,只想让你在现有代码里加两行。

pip install mem0ai

然后核心API就两个动作:

抽取和检索这一来一回,中间的embedding、去重、冲突更新全由它包了。它的开源核心支持接OpenAI、Anthropic,也支持通过Ollama接本地模型——也就是说你可以整套跑在自己机器上,一行APIkey都不用给外面。对国内用户来说这是个关键加分项:数据不出本地,也没有海外服务的网络问题。

它同时有托管平台版(Mem0 Platform),不想自己维护存储的可以直接用云服务。这种“开源核心+托管收费”的双轨结构,和Supabase、Langfuse是一个打法,个人玩开源版,公司化用托管版。

适合谁: - 给自家Chatbot/客服/教练类应用加“记得用户”的能力,今天下午就想上线 - 用Dify、FastAPI之类搭应用,不想为记忆重构代码的 - 个人开发者——这是三个里面上手成本最低的,Python两行起步

和国内方案的对比:国内常见的做法是把历史对话截断塞回system prompt,或者拿pgvector手搓一个向量召回。前者费token还容易超窗,后者你得自己解决“什么时候写入、怎么去重、旧信息怎么覆盖”这些脏活——这些恰恰是Mem0封装掉的部分。国内编排平台(Dify、扣子)里记忆基本是“变量+会话历史”的思路,独立记忆层的选型和讨论都很少。

三、Letta:MemGPT正统续作,把AI当操作系统管

项目地址:https://github.com/letta-ai/letta (官网 letta.com)

如果说Mem0是“给现有应用补记忆”,Letta的野心大得多:整个Agent就是一个长期存活的进程,记忆是它的内存。

它的前身是大名鼎鼎的MemGPT——就是那篇提出“把LLM当操作系统、分层管理上下文”的论文。团队后来直接把公司改名叫Letta,论文思路做成了开源产品。

Letta的核心玩法:

  1. 跑一个Agent服务器(letta server),Agent的状态持久化在数据库里。会话断了、服务重启了,Agent还是那个Agent——它记得自己是谁、记得用户是谁。
  2. 记忆是一块块可编辑的“积木”(block)。核心记忆里通常有persona块(Agent的人设)和human块(用户画像),Agent在对话中可以自己调用工具改写自己的记忆——用户说“以后叫我老王”,Agent就自己把human块更新了。
  3. 分层结构:核心记忆(永远在上下文里)→ 对话历史 → 归档记忆(arrested...不对,是archival,塞在外面按需检索)。相当于操作系统里“内存-缓存-磁盘”的分层,页面不够了自动往archival换出。
  4. 可视化开发环境(ADE):网页上实时看到Agent当前的记忆块内容,甚至可以直接手改——调记忆问题不用再猜“它脑子里到底装了啥”。

还值得一提的是它的sleep-time计算:让一个后台Agent在空闲时整理主Agent的记忆——该归档的归档、该总结的总结,不打扰主线程干活。这思路很像操作系统后台的垃圾回收,是“Agent工程”里相当前沿的一招。

适合谁: - 要做长期存活的Agent:个人助理、运维值守、每天定时干活的员工型Agent - 受够了“每次重启全失忆”的自动化流程 - 想认真研究Agent记忆机制的工程师——Letta是目前把MemGPT思想实现得最完整的教学级范本

和Mem0怎么选:一句话——Mem0是“记忆中间件”,粘到哪个应用都行;Letta是“带记忆的Agent运行时”,你等于把整个Agent托管给它。项目已有Dify式自建应用,选Mem0;从零做一个长命Agent,直接上Letta。

四、Zep / Graphiti:把记忆存成一张会过期的图谱

项目地址: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就能上车

七、行动指南

  1. 今晚就能做(10分钟):pip install mem0ai,拿你手头任何一个Chatbot demo,在消息入口加m.add()、拼prompt前加m.search(),跑三天看召回质量。
  2. 本周可以试:Docker起一个Letta server,在ADE里手动改一次Agent的human记忆块,感受“Agent自己管内存”和“你替它管上下文”的差别——这个体感比看十篇文档都直观。
  3. 评估再决定:如果你的场景是客服/CRM/企业知识库,把Graphiti拉下来连个Neo4j,灌50条带时间的对话,测试“张三换部门之后还答不答对旧部门的问题”——这一条就能筛掉所有纯向量方案。
  4. 省着点花:三家开源版都能全本地跑(Mem0接Ollama、Letta/Graphiti自托管),个人项目一个字都不用发给海外云。

参考来源

  1. Mem0 开源仓库:https://github.com/mem0ai/mem0
  2. Letta(MemGPT 正统续作)开源仓库:https://github.com/letta-ai/letta
  3. Graphiti 时序知识图谱引擎:https://github.com/getzep/graphiti
  4. Mem0 官网与文档:https://mem0.ai
  5. Letta 官网与文档:https://www.letta.com

    本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护。 聚焦5G/6G核心网、3GPP标准、AI工具实战。知识星球「51学通信」提供深度技术答疑和行业洞察。

任务汇报(操作记录,非正文,发布前请删除本节)

2. 下一步计划(What's next)

3. 注意事项(If applicable)

[!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 等场景全覆盖。

51学通信知识星球海报-扫码加入