当我们询问ChatGPT“你记得我什么”时,它能够列出数十条关于我们的具体事实。这背后是怎样一套记忆机制在运作呢?通过大量的对话实验与分析,一位工程师成功对ChatGPT的记忆系统进行了逆向工程。其核心发现令人惊讶:它并未依赖复杂的向量数据库或检索增强生成(RAG)技术,而是采用了一套精巧的“四层记忆”架构。这套架构由会话元数据、长期事实、近期对话摘要和当前会话窗口共同构成。本文将逐层拆解这一设计,揭示它在个性化体验、系统性能与运行成本之间取得的精妙平衡。
要理解记忆系统,首先需要明确ChatGPT在处理每条消息时所接收的完整上下文结构。其上下文按以下顺序组织:
[0] System Instructions
[1] Developer Instructions
[2] Session Metadata (ephemeral)
[3] User Memory (long-term facts)
[4] Recent Conversations Summary (past chats, titles + snippets)
[5] Current Session Messages (this chat)
[6] Your latest message
前两部分定义了模型的高层行为准则与安全规则,不属于本文重点。真正有趣的部分从“会话元数据”开始。
这部分信息在每次会话开始时一次性注入,具有临时性,不会被永久保存或纳入长期记忆。它主要用于让模型适应用户的即时环境,包含以下内容:
- 设备类型(桌面/移动)
- 浏览器与用户代理信息
- 大致地理位置/时区
- 用户订阅等级
- 使用模式与活跃频率
- 近期使用的模型分布
- 屏幕尺寸、深色模式状态、JavaScript启用状态等环境信息
一段示例会话元数据可能如下所示:
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: 900×1440
- Page viewport: 812×1440
- Device pixel ratio: 2.0
- Session duration so far: ~1100 seconds
这些信息帮助模型定制化响应,但在会话结束后便不复存在。
第二层:用户记忆 (User Memory)
这是ChatGPT用于存储和删除关于用户的稳定、长期事实的专用模块。这些信息经过数周甚至数月的积累,形成一个持久的“个人档案”。
以实验者为例,模型存储了33条关于他的事实,例如:
- 姓名与年龄
- 职业目标
- 背景与过往经历
- 当前进行中的项目
- 正在学习的领域
- 健身习惯与个人偏好
- 长期兴趣
这些事实并非模型猜测,仅在以下两种情况下被明确存储:
- 用户主动要求,如说出“记住这个”或“把这个存入记忆”。
- 模型检测到一个符合OpenAI设定标准的事实(如姓名、职位或明确陈述的偏好),且用户在对话中隐式同意。
这些记忆会作为一个独立的数据块,被注入到后续的每一个对话提示中。用户可以通过自然语言进行管理,例如:“把这个存入记忆…”或“从记忆中删除这个…”。示例如下:
- User‘s name is Manthan Gupta.
- Previously worked at Merkle Science and Qoohoo (YC W23).
- Prefers learning through a mix of videos, papers, and hands-on work.
- Built TigerDB, CricLang, Load Balancer, FitMe.
- Studying modern IR systems (LDA, BM25, hybrid, dense embeddings, FAISS, RRF, LLM reranking)。
第三层:近期对话摘要 (Recent Conversations Summary)
这一层的设计可能最出人意料。与人们预想的对历史对话进行RAG(检索增强生成)不同,ChatGPT采用了一种轻量级的摘要机制。
它会保留一系列近期对话的摘要,格式大致为:
1. <时间戳>: <对话标题>
|||| 用户消息片段 ||||
|||| 用户消息片段 ||||
关键观察点包括:
- 摘要仅基于用户的历史消息生成,而非助理的回复。
- 大约保留最近15个对话的摘要。
- 这些摘要更像是一张关于用户近期兴趣的“松散地图”,而非详细的上下文记录。
这种设计与传统的RAG系统形成鲜明对比。传统方案通常需要:嵌入每条历史消息、在每次查询时运行相似性搜索、并调取完整的消息上下文,这会导致更高的延迟与Token成本。而ChatGPT的方法则更为轻巧:预先计算好摘要并直接注入,用少量关键信息换取处理速度和效率。
第四层:当前会话消息 (Current Session Messages)
这是当前正在进行对话的完整滑动窗口,包含了本次会话中所有消息交换的未经总结的原始历史记录。
虽然ChatGPT未明确透露其Token限制的精确数字,但它确认了以下几点:
- 限制基于Token数量,而非消息条数。
- 一旦达到限制,当前会话中较早的消息会被“挤出”窗口,但用户记忆事实和对话摘要会得到保留。
- 此数据块中的所有内容都被逐字传递给模型,从而保证了对话上下文的完整性和连贯性。
系统如何协同工作
当你向ChatGPT发送一条消息时,整个系统按如下流程协同运作:
- 会话初始化:会话元数据被一次性注入,让ChatGPT了解你的设备、订阅状态和使用习惯。
- 长期身份识别:你所存储的所有记忆事实(例如前文提到的33条)被包含在每次请求中,确保回应的个性化和背景一致性。
- 跨会话连续性:近期对话摘要提供了一个关于你兴趣走向的轻量级指引,无需调取完整的历史记录。
- 维持当前对话逻辑:当前会话消息的滑动窗口保持了对话内部的连贯推理能力,你可以使用例如Python进行脚本分析来验证这一点。
- 资源管理:随着对话进行,较早的当前消息会被移出窗口以控制Token消耗,但核心的记忆事实和对话摘要得以保留,从而在性能和连续性之间取得平衡。
这种分层架构意味着ChatGPT能够提供高度个性化和上下文感知的体验,同时避免了为检索数千条历史消息而付出的巨大计算成本,这与许多需要依赖复杂数据库查询的方案不同。
结论与启示
ChatGPT的记忆系统是一个在个性化、性能与Token效率之间取得精妙平衡的多层架构。它通过结合临时性的会话元数据、明确且长期的用户事实、轻量级的对话摘要以及保持连贯性的当前消息窗口,实现了令人印象深刻的体验:系统让人感觉它既了解你又记得对话的来龙去脉,却没有传统复杂检索系统带来的高昂开销。
这一设计带来的核心洞见在于:并非所有信息都需要以传统“记忆”的形式保存。会话元数据负责实时环境适应,明确事实保障跨会话的持久性,对话摘要在不引入细节负担的前提下维持连续性,而当前会话则专注于处理即时逻辑。这些动态更新、相互协同的组件共同营造了“系统真正了解你”的用户感知。
对于用户而言,这意味着ChatGPT会随着使用时间的增长而愈发显得贴心,无需用户进行繁琐的“知识库”管理。对于开发者而言,这是一次关于务实工程学的生动演示:有时,经过精细设计的、更简单直接的方案,在你能掌控整个技术栈时,其效果可能优于复杂的通用检索系统。
当然,这种设计也存在权衡:ChatGPT以牺牲对详细历史上下文的精确检索能力为代价,换取了更快的响应速度和更高的运行效率。但对于绝大多数日常对话场景而言,这恰恰是恰到好处的平衡点——系统记住了真正重要的信息(你的偏好、目标与近期兴趣),同时保持了敏捷与流畅的交互体验。
本文基于对ChatGPT行为的实验与逆向工程分析而成,并非源自OpenAI官方文档,结论仅供参考。