小林是一位刚入职的行政助理。入职第一天,他的办公桌干净得像一面镜子;到了下午,桌上就堆满了客户资料、会议纪要和各种便利贴。最尴尬的是,接待一位重要客户时,他完全忘了客户半小时前刚说过“只喝温水不喝咖啡”,只好灰溜溜地去换了一杯。问题出在哪?不是小林记性差,而是他的“桌面”太小了。 AI Agent 也面临着同样的难题。所谓“上下文窗口”,就是大模型的办公桌面——大小固定,塞得越多越拥挤。用户多聊几轮,早前的信息就被挤出桌面,Agent 就“失忆”了。 MemGPT(现名 Letta)的解法,是给 AI Agent 请来一位经验丰富的办公室主任:把正在用的文件放在桌面(核心区),把旧资料归档进文件柜(归档区),把每天的工作写进日志(召回区),甚至让 Agent 自己决定什么时候该收拾、什么时候该翻档案。这套“操作系统式”的分层记忆架构,让长对话不再丢上下文。这篇文章将从一张办公桌说起,带你完整理解 MemGPT 的设计思想、Letta 的落地方式,以及如何选型。

岗位关联

对 AI 从业者而言,掌握 MemGPT 的分层记忆设计,能直接指导你解决 Agent 长对话丢上下文、跨会话记忆持久化等真实痛点,是构建稳定 Agent 应用的必备技能。

目录
  1. 可视化演示
  2. 记忆痛点
  3. 虚拟内存思想
  4. 三层记忆架构
  5. 自我编辑机制
  6. 系统指令设计
  7. Letta落地实践
  8. 应用场景解析
  9. 与Mem0对比
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

动态演示MemGPT分层记忆架构与L的核心机制,通过概览/流程/对比/趋势四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

MemGPT分层记忆架构与L:MemG MemGPT的核心设计动机 核心区存放当前工作记忆 核心机制可视化 MemGPT分层记忆架构与L整体架构与关键组件

记忆痛点

小林第一天上班,办公桌干净得像一面镜子。可到了下午,桌上堆满了打印资料、便利贴、客户名片。想找早上记的会议要点,得翻半天。更糟糕的是,接待客户时,他完全忘了客户上午刚说过“只喝茶不喝咖啡”——因为那条信息被埋在了文件堆底下。

AI Agent 也面临同样的窘境。大语言模型(LLM)的上下文窗口就是它的“办公桌面”——空间固定,塞得越满越容易丢东西。用户和 Agent 多聊几轮,旧信息就会被挤出窗口,或者因为太长而不得不做粗暴的“摘要压缩”,细节在压缩中流失。再加上窗口越长,显存占用和推理延迟越高,成本也随之水涨船高。

具体来说,LLM 的上下文窗口大小有限,从几千到几十万 token 不等。小型 Agent 应用如果每轮都把所有历史对话塞进去,成本会迅速膨胀;滑动窗口只保留最近几轮,又会把早前关键信息忘掉。这就是所谓的“上下文窗口限制”——它不是一个可绕过的工程小坑,而是 Agent 应用的底层瓶颈。

小林后来明白,问题不在于他记性差,而在于“桌面”只有那么大。AI 也一样——它缺的不是一张更大的桌子,而是一套把文件搬进搬出的方法。这正是 MemGPT 存在的理由。

ctxUsage=usedTokenswindowSize\text{ctxUsage} = \frac{\text{usedTokens}}{\text{windowSize}}
上下文占用率 = 已用 token 数 ÷ 总窗口大小。当它接近 1 时,Agent 必须做出取舍,而取舍恰恰是丢记忆的开始。
  1. 分子 usedTokens当前对话、工具返回、系统提示里所有 token 的总和,即“桌面上已经堆了多少文件”。
    usedTokens=∑tokens(messages)\text{usedTokens} = \sum \text{tokens}(\text{messages})
  2. 分母 windowSize模型支持的最大上下文长度,即“办公桌的物理面积”。
    windowSize=模型常量\text{windowSize} = \text{模型常量}
  3. 比值 ctxUsage上下文占用率,衡量“桌面还有多少空位”。
    ctxUsage∈[0,1]\text{ctxUsage} \in [0, 1]

虚拟内存思想

小林去请教经验丰富的办公室主任陈姐。陈姐的办公桌同样不大,但她永远能在三秒内找到资料。秘密是:陈姐把旧资料全部归档到文件柜,桌面上只放手头正用的三份文件。要用旧资料时,打开文件柜取出一个文件夹,用完再放回去。

操作系统解决内存不足的思路,与“陈姐的文件柜”如出一辙。虚拟内存让程序仿佛拥有无限内存,实际只在物理内存(RAM)中保留常用数据,把不常用数据“换出”到磁盘,用时再“换入”。这是计算机系统中最成熟的分层存储思想之一。

MemGPT 团队将此思想迁移到 AI Agent:把 LLM 的上下文窗口视为“物理内存”,把外部存储视为“磁盘”。当上下文快满时,Agent 将低优先级信息“页面置换”到归档区;当需要旧信息时,再按关键词或语义搜索“召回”。于是,Agent 的有效记忆范围远超模型的窗口大小。

小林学会了陈姐的“虚拟记忆法”——桌面放不下,就把旧资料送进文件柜。从此他的小桌子也能承接一年的工作。对 Agent 来说,这套“换入换出”的调度策略,就是打破上下文墙的钥匙。

effectiveMem=coreSize+hitRatearchive×archiveSize\text{effectiveMem} = \text{coreSize} + \text{hitRate}_{\text{archive}} \times \text{archiveSize}
有效记忆 = 核心区大小 + 归档区命中率 × 归档区容量。归档区再大,找不到也白搭;核心区再小,只要调度得当也能发挥大作用。
  1. coreSize常驻在上下文窗口内的记忆量,相当于“桌面能放的文件数”。
    coreSize=窗口内常驻 tokens\text{coreSize} = \text{窗口内常驻 tokens}
  2. hitRate_archive归档信息的检索命中率,即平均每十次查询能命中几次。
    hitRatearchive=hittotalQueries\text{hitRate}_{\text{archive}} = \frac{\text{hit}}{\text{totalQueries}}
  3. 乘积项归档区为有效记忆兜底,能否“查到”决定整个公式的成败。
    hitRatearchive×archiveSize\text{hitRate}_{\text{archive}} \times \text{archiveSize}

三层记忆架构

陈姐的“虚拟记忆法”其实有三个抽屉:桌面、文件柜、工作日志。桌面放正在处理的事务;文件柜存长期资料;工作日志则记录了每一天见过谁、办过什么事。三个抽屉各司其职,缺一不可。

MemGPT 将 Agent 的记忆划分为三层:核心区(Main Context)、归档区(Archival Storage)、召回区(Recall Storage)。核心区就在 LLM 的上下文窗口内,始终被模型“看见”;归档区是外部持久化存储,存放长期事实和知识;召回区是对话历史的自动日志,方便随时回溯。

三层的生命周期各不相同。核心区内容每轮都在变化,由 Agent 自己决定保留什么;归档区数据由 Agent 通过工具写入,可跨会话持久化;召回区则自动记录每一次交互,不占用主窗口。三层协同,让 Agent 既有“工作记忆”又有“长期记忆”。

三个抽屉定位清晰:桌面放正在用的,文件柜存不常用的,日志记发生过的。小林照着做了之后,再也没出现“忘了客户不喝咖啡”的尴尬。三层记忆架构,就是 AI Agent 的“三个抽屉”。

memState=⟨core,archive,recall⟩\text{memState} = \langle \text{core}, \text{archive}, \text{recall} \rangle
Agent 的记忆状态 = 三元组(核心区内容,归档区内容,召回区日志)。三者共同决定 Agent“记得什么”。
  1. core 分量当前上下文窗口内的明文信息,模型每轮推理都能直接读到,相当于“桌面上的文件”。
    core⊆window\text{core} \subseteq \text{window}
  2. archive 分量外部持久化存储,模型不能直接读,需通过检索工具访问,相当于“文件柜里的档案”。
    archive∈外部向量库或数据库\text{archive} \in \text{外部向量库或数据库}
  3. recall 分量历史消息的完整流水,可搜索、可回放,帮助 Agent 回忆“当时怎么说的”。
    recall={m1,m2,…,mn}\text{recall} = \{m_1, m_2, \dots, m_n\}

自我编辑机制

陈姐最厉害的不是整理,而是“判断”。她不会等桌面堆成山才开始收拾,而是每处理完一个项目就顺手归档;每次感受到“桌子快满了”,就立刻行动。这套自动化的“整理节奏”,就是她的自我编辑能力。

MemGPT 的 Agent 也具备这种“自我编辑”能力:它通过函数调用来读写记忆。当上下文快满时,系统会给 Agent 发送一个中断信号,Agent 可以主动调用记忆工具,把旧信息移入归档区,或者从归档区检索需要的内容。整个决策过程由模型自主完成,无需人工干预。

核心工具包括:core_memory_append 追加核心记忆、core_memory_replace 替换核心记忆、archival_memory_insert 写入归档、archival_memory_search 检索归档、conversation_search 搜索历史对话。“何时用哪个工具”由 Agent 根据系统指令自行判断——这是真正的“让模型管理自己的记忆”。

小林学到的“整理节奏”,正是 MemGPT 的自我编辑机制。不等桌面爆满就行动,才能让长期使用不失控。Agent 的记忆管理,从“被动溢出”变成了“主动调度”。

garch={trueif ctxUsage>θfalseotherwiseg_{\text{arch}} = \begin{cases} \text{true} & \text{if } \text{ctxUsage} > \theta \\ \text{false} & \text{otherwise} \end{cases}
归档触发条件:上下文占用率超过阈值 θ 时执行换出。θ 通常由系统指令预设,决定 Agent 的“整理阈值”。
  1. 条件判断Agent 每次处理完消息后检查上下文占用率,判断“桌面是否快满了”。
    ctxUsage=usedTokenswindowSize\text{ctxUsage} = \frac{\text{usedTokens}}{\text{windowSize}}
  2. 阈值 θ系统设定的换出阈值,如 70%,对应“桌面用到七成就该收拾了”。
    θ∈[0.5,0.9]\theta \in [0.5, 0.9]
  3. 输出 g_arch决策结果——true 则调用档案写入工具执行归档。
    garch∈{true,false}g_{\text{arch}} \in \{\text{true}, \text{false}\}

系统指令设计

陈姐给小林打印了一份《办公桌管理 SOP》:什么时候归档、什么时候查档案、什么内容绝不能丢——写成一页纸贴在显示器边上。小林照着做,效率立刻提升。那份 SOP,就是系统指令。

MemGPT 的系统提示词里也嵌入了“记忆管理 SOP”,明确告诉模型:你可以访问记忆工具,你的上下文窗口是有限的;当 context 快满时,应把死信息移入归档区,把关键信息写进核心记忆。这个“指令层”与模型权重无关,却显著改变了记忆行为。

系统指令还包括“自我反省提示”:每轮交互后,Agent 要检查自己的记忆是否过期、是否需要更新。“分页控制”让 Agent 把超大内容拆成小块存储,避免一次塞爆窗口。“优先级保护”确保用户名、安全限制等核心记忆不会被冲掉。

没有 SOP 的整理是碰运气,有了 SOP 才有章法。系统指令就是贴在小林显示器上的那张纸,让 Agent 的每个记忆决策都“有法可依”,而不是靠模型临场发挥。

scorei=α×recencyi+β×importancei\text{score}_i = \alpha \times \text{recency}_i + \beta \times \text{importance}_i
记忆保留优先级 = α×时效性 + β×重要性。越新、越重要的记忆越值得留在核心区。
  1. recency_i第 i 条记忆的时效性,最近用过的记忆更容易再次被使用。
    recencyi=11+Δti\text{recency}_i = \frac{1}{1 + \Delta t_i}
  2. importance_i重要程度,如用户身份、任务目标等,通常由开发者或模型标注。
    importancei∈[0,1]\text{importance}_i \in [0, 1]
  3. 加权求和α、β 是预设权重,决定“新”和“重要”哪个更占优势。
    α+β=1\alpha + \beta = 1

Letta落地实践

理论学完,小林正式上岗。公司给他配了办公软件和权限,他把 SOP 录入系统,开始接待客户。让“记忆管理”真正跑起来,就是落地实践。纸上谈兵再完美,也要有趁手的工具把它变成现实。

Letta 是 MemGPT 的工程化框架(MemGPT 已更名 Letta)。它提供 Python API 和可视化控制台,让开发者可以创建 Agent、配置记忆块、接入本地或云端模型。你不需要从零实现“自我编辑逻辑”——Letta 内置了完整的分层记忆引擎,开箱即用。

在 Letta 中,Agent 有一个可编辑的“记忆块”,包含人格、用户信息、身份设定等核心记忆;对话与文档自动进入召回区与归档区。通过 le.Tool 和 le.MemoryBlock 等抽象,开发者可以自定义记忆操作。部署时,Letta 默认将记忆存在本地数据库中,记忆跨会话持久化。

小林的专业度不只靠聪明,更靠把那套 SOP 落到了日常系统里。Letta 就是 Agent 的那套“办公系统”——把记忆管理的理念封装成了可运行的产品。

St=⟨Ct,At,It⟩S_t = \langle C_t, A_t, I_t \rangle
智能体在时间 t 的状态 =(核心记忆块,归档存储,中断指令队列)。Letta 框架负责维护这个三元组。
  1. C_t 核心记忆块开发者预置与 Agent 运行时更新的核心信息,如用户画像、任务目标。
    Ct=coreMemoryBlock(t)C_t = \text{coreMemoryBlock}(t)
  2. A_t 归档存储Agent 通过工具写入的外部知识,持久化保存,不占主窗口。
    At=archivalStorage(t)A_t = \text{archivalStorage}(t)
  3. I_t 中断指令系统触发的自我反省事件,驱动记忆整理节奏。
    It={interrupt1,…,interruptk}I_t = \{\text{interrupt}_1, \dots, \text{interrupt}_k\}

应用场景解析

小林的客户越来越多。他发现,长期客户最满意的是“你还记得我上次说要什么”——这正是持久化记忆的价值。不同的客户、不同的需求,考验的是他调度档案的能力。

哪些场景最需要 MemGPT?共同特征是:长对话 + 强上下文依赖 + 跨会话记忆。典型的包括长对话客服助手、多用户个人助理、企业知识问答 Agent。这类场景的共同痛点是:单轮对话不算难,难在把几十轮、上百轮的上下文连贯起来。

客服场景里,Agent 要记住每个用户的历史偏好,MemGPT 可以把用户画像写进核心区,把历史工单放进归档区;多用户场景中,不同用户的记忆天然隔离,按会话切换;知识问答场景中,文档块自动进入归档区,检索召回实现“无限知识库 + 受控上下文”。

小林的客户留存率高,不是因为他记性好,而是因为他有“翻档案”的习惯。Agent 也一样,把记忆调度做好,长对话自然就稳了。选对场景,MemGPT 的价值才能放大。

Tsustainable≈hitRate×windowSizetokensperTurnT_{\text{sustainable}} \approx \frac{\text{hitRate} \times \text{windowSize}}{\text{tokens}_{\text{perTurn}}}
可持续对话轮数 ≈ 归档命中率 × 窗口大小 ÷ 每轮 token 数。命中率越高、窗口越大,Agent 越能聊得久。
  1. 分子有效上下文容量 = 命中率 × 窗口大小,是“实际可用的记忆空间”。
    effective=hitRate×windowSize\text{effective} = \text{hitRate} \times \text{windowSize}
  2. 分母每轮对话平均消耗的 token 数,包括输入、输出和工具调用开销。
    tokensperTurn>0\text{tokens}_{\text{perTurn}} > 0
  3. 商在记忆不溢出的前提下,Agent 能连续稳定对话的轮数。
    Tsustainable∈[1,∞)T_{\text{sustainable}} \in [1, \infty)

与Mem0对比

隔壁公司的秘书是另一种风格:不做分层归档,而是把所有客户信息都抄进一个“万能备忘录”,每次接待客户前通读一遍。很省事,但客户一多,通读也要很久。这是两种不同的记忆管理哲学。

Mem0 就是那个“万能备忘录”:它从对话中抽取用户偏好、事实等结构化记忆,存入向量库。每次推理前把相关记忆追加到上下文。而 MemGPT/Letta 则是“操作系统式”分层管理——核心区、归档区、召回区各司其职,由模型自己调度。

两者的定位差异很清晰:Mem0 关注“提取什么记忆”,MemGPT 关注“如何调度记忆”。Mem0 适合快速接入、需求简单的记忆增强;MemGPT/Letta 适合需要长期自主运行、记忆量和复杂度都很高的 Agent。两者也可以组合:用 Mem0 做知识抽取,用 Letta 做上下文管理。

通读备忘录的秘书适合小公司,分层归档的秘书适合大客户长战线。选型先想清楚自己是谁——是快速验证原型,还是构建长期运行的 Agent 系统。

choice=arg⁡max⁡m(retrievalm+integrationm)\text{choice} = \arg\max_{m} \left( \text{retrieval}_m + \text{integration}_m \right)
选型评估 = 最大化(检索效率 + 整合便捷度)。没有绝对好坏,只看哪个更契合你的场景。
  1. 检索效率Mem0 基于向量检索,MemGPT 基于分层调度,两者在不同数据量下各有优劣。
    retrievalm∈[0,1]\text{retrieval}_m \in [0, 1]
  2. 整合便捷度接入成本、维护成本、与现有系统的契合度。
    integrationm∈[0,1]\text{integration}_m \in [0, 1]
  3. 取最大值综合得分最高的方案胜出,也可组合使用。
    choice∈{Mem0,MemGPT,组合}\text{choice} \in \{\text{Mem0}, \text{MemGPT}, \text{组合}\}

AI 应用场景

场景1:长对话电商客服助手

阶段:对话记忆管理

解决的问题:传统客服 Agent 每轮对话后遗忘用户偏好,用户需要反复说明自己的尺码、颜色偏好、收货习惯;使用 MemGPT 后,客服 Agent 把用户画像写入核心区,把历史订单放入归档区,需要时自主检索,彻底告别“自我介绍式客服”。

具体案例:某电商平台接入 Letta 后,用户第三次咨询时,Agent 直接说出“您上次换货的那双鞋已经退款到账了,这次还看同款吗?”——记忆跨会话持久化,客服满意度提升 30%。

场景2:多租户个人知识助理

阶段:多会话隔离与记忆检索

解决的问题:一个 Assistant 服务多个用户,但用户之间的信息必须严格隔离。传统方案需要为每个用户单独维护一套记忆,成本极高;MemGPT 天然支持按 Agent 实例隔离记忆,每个用户拥有独立的核心区和归档区。

具体案例:某 SaaS 平台接入 Letta,为 1000 名用户各创建独立 Agent 实例,每个实例拥有自己的记忆块与归档存储。用户 A 的偏好和文件不会被用户 B 查询到,同时每个 Agent 都能记住与各自用户的全部历史交互。

场景3:企业知识问答 Agent

阶段:长期记忆与知识检索

解决的问题:企业文档动辄上万页,传统 RAG 每次检索都全量扫描,延迟高且无法记住用户之前的提问偏好。MemGPT 将文档块写入归档区,通过语义检索精准召回,同时把用户关注领域写入核心区,让回答越来越“懂你”。

具体案例:一家咨询公司将十年积累的项目文档导入 Letta 归档区,Agent 不仅能在 2 秒内找到相关案例,还能记住某个客户“偏好看图表不要看表格”的展示习惯,每次输出自动调整格式。

Python 演示

python74 行
"""简化版 MemGPT 分层记忆模拟器(教学演示) 三层记忆:核心区(桌面) / 归档区(文件柜) / 召回区(工作日志)""" class AgentMemory:    """模拟 MemGPT 的核心区/归档区/召回区三层记忆"""     def __init__(self, core_limit=4):        self.core_list = []          # 核心区:当前上下文可见        self.archive_map = {}        # 归档区:持久化存储        self.recall_list = []        # 召回区:消息流水日志        self.core_limit = core_limit        self.event_id = 0     def write_to_core(self, name, content):        """写入核心区,超出容量时自动归档最旧项"""        entry = {"name": name, "content": content}        if len(self.core_list) >= self.core_limit:            self._archive_from_core()        self.core_list.append(entry)        self._log("write", name)     def _archive_from_core(self):        """把核心区最旧的一条记忆移入归档区"""        old = self.core_list.pop(0)        self.archive_map[old["name"]] = old["content"]        self._log("archive", old["name"])     def recall_from_archive(self, name):        """从归档区找回记忆并放回核心区"""        if name not in self.archive_map:            return None        content = self.archive_map.pop(name)        self.core_list.append({"name": name, "content": content})        self._log("recall", name)        return content     def search_recall_log(self, name):        """在召回区日志中搜索历史事件"""        return [e for e in self.recall_list if e["name"] == name]     def _log(self, op, name):        """记录一条召回区日志"""        self.event_id += 1        self.recall_list.append({"id": self.event_id, "op": op, "name": name})     def snapshot(self):        """打印当前三层记忆的状态"""        print("核心区:", [e["name"] for e in self.core_list])        print("归档区:", list(self.archive_map.keys()))        print("召回区:", self.recall_list)  if __name__ == "__main__":    mem = AgentMemory(core_limit=3)    print("== 写入 5 条记忆 ==")    for i in range(5):        mem.write_to_core(f"知识{i}", f"这是第{i}条业务知识")    mem.snapshot()     print("\n== 召回 知识0 ==")    result = mem.recall_from_archive("知识0")    if result:        print("召回内容:", result)    mem.snapshot()     print("\n== 搜索召回日志中的 知识3 ==")    for event in mem.search_recall_log("知识3"):        print(event)     print("\n== 搜索召回日志中的 recall 事件 ==")    for event in mem.search_recall_log("知识0"):        print(event)
目的:用不到 60 行代码模拟 MemGPT 的三层记忆机制——核心区写入自动触发归档(页面置换),归档区可召回(换入),召回区持续记录所有操作日志。运行后即可直观理解“分层记忆如何让有限的桌面承载无限的历史”。
  1. class AgentMemory:定义一个三层记忆模拟器,对应 MemGPT 的 Agent 记忆管理模块
  2. self.core_list = []核心区用列表模拟,始终对模型“可见”,相当于办公桌桌面
  3. self.archive_map = {}归档区用字典模拟,按键存取,相当于文件柜
  4. write_to_core(self, name, content)模拟 core_memory_append,先检查容量,满了就触发归档
  5. _archive_from_core(self)模拟页面置换,把核心区最旧的一条记忆移入归档区
  6. recall_from_archive(self, name)模拟 archival_memory_search + 召回,把归档区记忆放回核心区
  7. _log(self, op, name)每次操作都写入召回区,形成完整的历史流水
  8. mem.snapshot()打印三层记忆状态,直观展示核心区、归档区和召回区的实时构成

常见误区

误区听名字带"GPT",以为 MemGPT 是 OpenAI 发布的某个新模型,换一个更大的模型就能解决长对话问题,不需要额外的记忆框架。

正解MemGPT 不是模型,而是一套“记忆操作系统”。它管理的是 LLM 的上下文窗口,而不是模型自身的权重。它通过函数调用让模型自己决定“什么时候把什么信息搬到哪一层”,类似于给办公桌配了一个智能秘书。模型再大,桌面也是有限的;没有调度机制,大窗口照样会被灌满。

为何常见:名称中的"GPT"太有迷惑性,加上很多科普文章只谈效果不谈实现,导致大家把它当成一个新模型。

误区以为 MemGPT 把历史信息放在显存里,模型每轮都能“看到”全部记忆,所以不会有遗忘,也不会有性能开销。

正解归档区是在外部存储(数据库、向量库)中,模型并不能直接读取。每次访问都要经过工具调用 + 检索的过程,这意味着:有查不到的风险(hit rate 问题),也有额外的延迟开销。MemGPT 的价值恰恰在于“有选择地换入换出”,而不是“全部都在线”。

为何常见:人们容易把“记忆”想象成随时可访问的缓存,而忽略了 MemGPT 的分层本质——只有核心区才是模型每轮都能直接看到的。

误区市面上提到 AI 记忆就绕不开 Mem0 和 MemGPT,初学者常以为它们功能重叠,随便选一个用就行。

正解两者解决的问题层次不同。Mem0 专注“提取什么记忆”——从对话中抽取结构化信息存入向量库;MemGPT 专注“如何调度记忆”——设计了一套上下文窗口的分层管理机制。Mem0 像是把所有客户信息抄进备忘录的秘书,MemGPT 是分层归档的办公室主任。两者完全可以组合使用:Mem0 负责抽取,Letta 负责调度。

为何常见:大家看到“AI 记忆”这个共同关键词,就下意识认为它们是竞品,而忽略了它们分别卡在记忆链条的不同环节。

误区以为接入 MemGPT/Letta 后,Agent 就拥有了无限记忆,任何历史信息都能 100% 准确召回,产品文档可以当证据使用。

正解MemGPT 只是把“遗忘”从突发事故变成了可管理的过程。归档区依赖搜索,搜索就可能漏检;核心区容量有限,该换出的记忆还是要被移走。安全关键信息、合规证据等不能依赖模型记忆,应存到权威数据库,通过硬编码规则读取。工具推荐在场景1、2中都有体现——记忆调度再好,也有检索成本和命中率上限。

为何常见:宣传材料强调“让长对话不再失忆”,让人产生了“零遗忘”的错觉,忽略了任何存储和检索系统都存在物理极限。

面试题

Q1. MemGPT 的分层记忆设计主要借鉴了哪个系统的思想?

单选题 · easy

  • A.数据库索引系统
  • B.操作系统虚拟内存← 正确答案
  • C.浏览器缓存机制
  • D.分布式搜索引擎

答案:B。MemGPT 的核心灵感来自操作系统虚拟内存的分层分页机制——把上下文窗口当“物理内存”,把外部存储当“磁盘”,Agent 自主管理换入换出。数据库索引(A)和浏览器缓存(C)虽然也涉及分层,但不是 MemGPT 的直接借鉴来源。

Q2. 在 MemGPT 的三层记忆中,“核心区”最合适的比喻是什么?

单选题 · easy

  • A.抽屉里的名片夹
  • B.正在处理的文件堆← 正确答案
  • C.工作日志本
  • D.客户通讯录

答案:B。核心区始终在上下文窗口内、模型每轮都能直接读到,对应办公桌上“正在处理的文件堆”。归档区对应文件柜(长期存储),召回区对应工作日志(历史流水),名片夹和通讯录都模糊了这三层的边界。

Q3. MemGPT 的“自我编辑”能力主要体现在哪个方面?

单选题 · mid

  • A.模型微调与权重更新
  • B.调用函数读写核心与归档记忆← 正确答案
  • C.自动扩展上下文窗口
  • D.缓存常用提示词

答案:B。MemGPT 通过函数调用(core_memory_append、archival_memory_insert 等)让模型自己管理记忆,这就是“自我编辑”。它不是修改模型权重(A),也不能突破硬件窗口(C),更不是简单缓存提示词(D)。

Q4. 在 MemGPT 中,召回区(Recall Storage)的主要职责是什么?

单选题 · mid

  • A.存储长期用户画像
  • B.记录全部对话流水← 正确答案
  • C.存放模型权重参数
  • D.缓存工具执行结果

答案:B。召回区记录完整的对话历史流水,支持按关键词搜索“当时怎么说的”,相当于工作日志。长期用户画像归属归档区(A);模型权重与框架无关(C);工具执行结果只是临时数据,不归召回区管(D)。

Q5. 关于上下文占用率公式 ctxUsage = usedTokens / windowSize,下列说法正确的是?

多选题 · mid

  • A.占用率接近 1 时触发归档← 正确答案
  • B.占用率永远保持不变
  • C.窗口越大占用率越低← 正确答案
  • D.占用率只取决于对话轮数

答案:AC。占用率接近 1 时,Agent 会触发记忆换出(A 对);窗口大小增加而 token 数不变时,占用率下降(C 对)。B 错——占用率随对话动态变化;D 错——工具返回、系统提示同样占用 token。

Q6. Letta 是 MemGPT 的什么?

单选题 · easy

  • A.底层基座模型
  • B.工程化框架与产品← 正确答案
  • C.向量数据库
  • D.提示词编译器

答案:B。MemGPT 已正式更名 Letta,提供 Python API、记忆块管理、可视化控制台等工程化能力。它不是模型(A),不是数据库(C),也不是编译器(D),而是把分层记忆理论落地为可用的 Agent 框架。

Q7. 与 Mem0 相比,MemGPT 的典型特征包括哪些?

多选题 · hard

  • A.使用核心/归档/召回分层架构← 正确答案
  • B.模型可自我编辑记忆← 正确答案
  • C.只做对话摘要压缩
  • D.每次推理把全部历史塞进上下文

答案:AB。MemGPT 用三层记忆架构(A 对),并通过函数调用进行自我编辑(B 对)。C 错——摘要压缩是传统方案,不是 MemGPT 的做法;D 错——这正是不采用的做法,MemGPT 的核心理念就是“不全部塞入”。

Q8. 在 MemGPT 的分页控制中,超大内容通常如何处理?

单选题 · mid

  • A.直接丢弃以节约空间
  • B.拆分为小块分批存储← 正确答案
  • C.加密压缩后存入核心区
  • D.原样留在上下文防止丢失

答案:B。分页控制让 Agent 把长文档拆成小块,分批写入归档区,避免一次塞爆主窗口。直接丢弃(A)丢失信息;压缩存入核心区(C)仍占窗口;原样保留(D)没有解决窗口溢出的问题。

Q9. 为什么 MemGPT 比“简单摘要压缩”能保留更多细节?

单选题 · hard

  • A.摘要算法更复杂
  • B.原始信息移入外存而非被抹掉← 正确答案
  • C.模型记忆能力更强
  • D.上下文窗口被自动扩展

答案:B。摘要压缩把旧信息“揉成”摘要,细节永久丢失;MemGPT 把原始信息整体移入归档区,需要时按原样召回,信息无损。摘要算法复杂度(A)不是关键,模型记忆能力(C)和窗口扩展(D)都不是 MemGPT 的方案。

Q10. 以下哪些场景适合选用 MemGPT/Letta?

多选题 · hard

  • A.跨会话持久记忆的客服助手← 正确答案
  • B.百万级实时关键词匹配
  • C.多用户隔离记忆的个人助理← 正确答案
  • D.长期运行的知识管理 Agent← 正确答案

答案:ACD。跨会话持久记忆(A)、多用户隔离(C)、长期知识管理(D)都是 MemGPT 的典型场景。B 是传统搜索引擎/数据库的强项,与记忆分层调度无关,用 MemGPT 反而增加不必要的复杂度和延迟。