逆向工程拆解ChatGPT的记忆功能,Manthan Gupta 2025

逆向工程拆解ChatGPT的记忆功能,Manthan Gupta 2025

6分钟 ·
播放数19
·
评论数0

看到一位印度的AI工程师Manthan Gupta 通过逆向工程拆解了 ChatGPT 的记忆功能。(原文地址:manthanguptaa.in

你会发现大道至简,作为大家公认实现得相对较好的记忆系统,ChatGPT没有用 RAG,而且就几层大家都能想到的信息一起输入:

1.会话元数据:时间、设备、是否付费、活跃度等等

2.当前会话窗口的最新会话和所有历史会话记录(超 token 限制的话截断)

3.跨会话窗口的 15 条左右历史会话摘要,只总结用户提问,不总结模型回答

4.user profile 级别的全局记忆,大概几十条,按照特定要求记录的用户姓名职业兴趣等长期事实,或者用户明确要求记录的东西

以下是原文的详细翻译:

我逆向工程了 ChatGPT 的记忆系统,这是我的发现!

作者:Manthan Gupta | 日期:2025年12月9日

当我询问 ChatGPT 记得关于我的什么信息时,它列出了 33 件事,从我的名字、职业目标到目前的健身习惯。它是如何存储和检索这些信息的?为什么感觉如此无缝?

经过大量的实验,我发现 ChatGPT 的记忆系统比我预期的要简单得多。没有向量数据库。没有基于对话历史的 RAG(检索增强生成)。

相反,它使用了四个独特的层级:适应你环境的会话元数据、长期存储的显式事实、近期聊天的轻量级摘要以及当前对话的滑动窗口

这篇博客将详细拆解每一层是如何工作的,以及为什么这种方法可能优于传统的检索系统。这里的所有内容都来自于通过对话逆向工程 ChatGPT 的行为。OpenAI 并没有公开这些实现细节。

ChatGPT 的上下文结构 (Context Structure)

在理解记忆之前,重要的是要理解 ChatGPT 在处理每一条消息时接收到的完整上下文。结构如下:

  • [0] 系统指令 (System Instructions)
  • [1] 开发者指令 (Developer Instructions)
  • [2] 会话元数据 (Session Metadata)(临时性的)
  • [3] 用户记忆 (User Memory)(长期事实)
  • [4] 近期对话摘要 (Recent Conversations Summary)(过去的聊天,标题 + 片段)
  • [5] 当前会话消息 (Current Session Messages)(本次聊天)
  • [6] 你最新的消息

前两个组件定义了高层行为和安全规则,不是本博客的重点。有趣的部分从会话元数据开始。

会话元数据 (Session Metadata)

这些细节在会话开始时注入一次。它们不会被永久存储,也不会成为长期记忆的一部分。这一块包括:

  • 设备类型(桌面/移动端)
  • 浏览器 + 用户代理 (User agent)
  • 大致位置/时区
  • 订阅等级
  • 使用模式和活动频率
  • 近期模型使用分布
  • 屏幕尺寸、深色模式状态、JS 启用状态等

会话元数据的示例:

Plaintext

Session Metadata:- User subscription: ChatGPT Go- Device: Desktop browser- Browser user-agent: Chrome on macOS (Intel)- Approximate location: India (may be VPN)- Local time: ~16:00- Account age: ~157 weeks- Recent activity:- Active 1 day in the last 1- Active 5 days in the last 7- Active 18 days in the last 30- Conversation patterns:- Average conversation depth: ~14.8 messages- Average user message length: ~4057 characters- Model usage distribution:* 5% gpt-5.1* 49% gpt-5* 17% gpt-4o* 6% gpt-5-a-t-mini* etc.- Device environment:- JS enabled- Dark mode enabled- Screen size: 900x1440- Page viewport: 812x1440- Device pixel ratio: 2.0- Session duration so far: ~1100 seconds

这些信息帮助模型根据你的环境调整回答,但在会话结束后,这些信息都不会保留。

用户记忆 (User Memory)

ChatGPT 有一个专门的工具用来存储和删除关于用户的稳定的、长期的事实。这些是数周和数月积累下来的片段,形成了一个持久的“档案”。

在我的例子中,模型存储了 33 个事实——比如:

  • 我的名字、年龄
  • 职业目标
  • 背景和过去的职位
  • 当前项目
  • 我正在研究的领域
  • 健身习惯
  • 个人偏好
  • 长期兴趣

这些不是猜测出来的;只有在以下情况时它们才会被显式存储:

  1. 用户说“记住这个”或“把这个存入记忆”;或者
  2. 模型检测到一个符合 OpenAI 标准的事实(如你的名字、职位或陈述的偏好),并且用户通过对话隐含地同意了。

这些记忆作为一个单独的块被注入到每一个未来的提示词 (Prompt) 中。

如果你想添加或删除任何内容,只需说:

  • “把这个存入记忆……”
  • “从记忆中删除这个……”

示例:

  • 用户的名字是 Manthan Gupta。
  • 曾在 Merkle Science 和 Qoohoo (YC W23) 工作。
  • 偏好通过视频、论文和动手实践混合的方式学习。
  • 构建了 TigerDB, CricLang, Load Balancer, FitMe。
  • 正在研究现代信息检索系统 (LDA, BM25, 混合检索, 稠密嵌入, FAISS, RRF, LLM 重排序)。

近期对话摘要 (Recent Conversations Summary)

这一部分最让我惊讶,因为我原以为 ChatGPT 会在过去的对话中使用某种 RAG。结果它使用的是一个轻量级摘要

ChatGPT 按照这种格式保留了一份近期对话摘要的列表:

1. <时间戳>: <聊天标题> |||| 用户消息片段 |||| |||| 用户消息片段 ||||

观察:

  • 它只总结的消息,不总结助手的。
  • 大约有 15 个摘要可用。
  • 它们充当了我近期兴趣的粗略地图,而不是详细的上下文。

这个块让 ChatGPT 在不拉取完整记录的情况下,拥有跨聊天的连续感。

传统的 RAG 系统需要:

  • 嵌入 (Embedding) 每一条过去的消息
  • 对每个查询运行相似性搜索
  • 拉取完整的消息上下文
  • 更高的延迟和 Token 成本

ChatGPT 的方法更简单:预计算轻量级摘要并直接注入。这是用详细的上下文换取速度和效率。

当前会话消息 (Current Session Messages)

这是目前对话的常规滑动窗口。它包含本次会话中交换的所有消息的完整历史记录(未摘要)。

我无法从 ChatGPT 那里套出确切的 Token 限制,但它确实确认了:

  • 上限基于 Token 数量,而不是消息条数。
  • 一旦达到限制,当前会话中较旧的消息会被移出(但记忆事实和对话摘要保留)。
  • 这个块中的所有内容都逐字传递给模型,保持完整的对话上下文。

这就是允许助手在一次会话中连贯推理的原因。

这一切是如何协同工作的

当你向 ChatGPT 发送消息时,会发生以下情况:

  1. 会话开始:会话元数据被注入一次,给 ChatGPT 提供关于你的设备、订阅和使用模式的上下文。
  2. 每一条消息:你存储的记忆事实(我这里是 33 条)总是包含在内,确保回答符合你的偏好和背景。
  3. 跨聊天感知近期对话摘要提供了你兴趣的轻量级地图,而无需拉取完整的记录。
  4. 当前上下文当前会话消息的滑动窗口保持对话内的连贯性。
  5. Token 预算:随着会话增长,旧消息会被移出,但你的记忆事实和对话摘要保留,保持连续性。

这种分层方法意味着 ChatGPT 可以让人感觉是个性化且具有上下文感知的,而没有搜索成千上万条过去消息的计算成本。

结论

ChatGPT 的记忆系统是一个多层架构,平衡了个性化、性能和 Token 效率。通过结合临时的会话元数据、显式的长期事实、轻量级对话摘要和当前消息的滑动窗口,ChatGPT 实现了一些了不起的事情:它让人感觉个性化且具有上下文感知,却没有传统 RAG 系统的计算开销。

这里的关键洞察是,并非所有东西都需要成为传统意义上的“记忆”。

  • 会话元数据实时适应你的环境。
  • 显式事实跨会话持久存在。
  • 对话摘要提供没有细节的连续性。
  • 当前会话保持连贯性。

这些动态组件结合在一起——随着会话进行和你的偏好演变而更新——创造了一个真正了解你的系统的错觉。

对于用户来说,这意味着 ChatGPT 随着时间的推移会感觉越来越个性化,而无需显式的知识库管理。对于开发者来说,这是实用工程的一课:有时更简单、更精心策划的方法胜过复杂的检索系统,尤其是当你控制整个流程时。

权衡是显而易见的:ChatGPT 牺牲了详细的历史背景来换取速度和效率。但对于大多数对话来说,这正是恰当的平衡。系统记住了重要的事情(你的偏好、目标和近期兴趣),同时保持快速和响应灵敏。

(注:本博文基于通过对话进行的实验和逆向工程,非官方文档——请辩证看待。)