返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

有人逆向拆解了ChatGPT 的记忆功能

[复制链接]
链载Ai 显示全部楼层 发表于 昨天 17:13 |阅读模式 打印 上一主题 下一主题

2025年在开发创业产品的时候,有一个比较困扰团队的问题就是“记忆”模块怎么写:一方面行业里从Mem0开始各种刷榜SOTA的第三方记忆服务就层出不穷,从RAG到GraphRAG到艾宾浩斯遗忘曲线,怎么高端大气上档次怎么来。另一方面实际一试呢,就非常像接入了一个又一个阿尔兹海默+强迫性幻想综合患者。

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

你会发现大道至简,作为大家公认实现得相对较好的记忆系统,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

SessionMetadata:-Usersubscription:ChatGPTGo-Deviceesktopbrowser-Browseruser-agent:ChromeonmacOS(Intel)-Approximatelocation:India(maybeVPN)-Localtime:~16:00-Accountage:~157weeks-Recentactivity:-Active1dayinthelast1-Active5daysinthelast7-Active18daysinthelast30-Conversationpatterns:-Averageconversationdepth:~14.8messages-Averageusermessagelength:~4057characters-Modelusagedistribution:*5%gpt-5.1*49%gpt-5*17%gpt-4o*6%gpt-5-a-t-mini*etc.-Deviceenvironment:-JSenabled-Darkmodeenabled-Screensize:900x1440-Pageviewport:812x1440-Devicepixelratio:2.0-Sessiondurationsofar:~1100seconds

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


用户记忆 (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 牺牲了详细的历史背景来换取速度和效率。但对于大多数对话来说,这正是恰当的平衡。系统记住了重要的事情(你的偏好、目标和近期兴趣),同时保持快速和响应灵敏。

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


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ