![图片]
当我们还在讨论向量数据库、复杂检索系统的时候,ChatGPT其实用了一个相当朴素的方案。没有向量数据库,没有复杂的RAG检索系统,只有四个简单层次的组合。
四层记忆架构
1. 会话元数据(临时层)
在会话开始时注入一次,包含:
- 设备类型(桌面/移动端)
- 浏览器信息和用户代理
- 地理位置/时区
- 订阅级别和使用模式
- 屏幕尺寸、深色模式状态等
这些信息帮助模型根据你的环境调整回应,但不会在会话结束后持久化。
2. 用户记忆(长期事实层)
这是ChatGPT存储的稳定、长期的用户事实。作者有33个存储事实:
- 姓名、年龄
- 职业目标
- 背景和过去角色
- 当前项目
- 学习领域
- 健身习惯
- 个人偏好
- 长期兴趣
这些记忆不是猜测的,只有在以下情况下才会明确存储:
- 用户说"记住这个"或"存储在记忆中"
- 模型检测到符合OpenAI标准的事实(如你的姓名、职位或明确偏好),且用户通过对话默示同意
3. 近期对话摘要(跨会话连续性)
最令人意外的是这一层。我原以为ChatGPT会对过去的对话使用某种RAG系统,但它使用了轻量级摘要:
1. <时间戳>: <对话标题>
|||| 用户消息片段 ||||
|||| 用户消息片段 ||||
特点:
- 只摘要用户消息,不包含助手回复
- 大约15个摘要可用
- 作为用户近期兴趣的松散映射,而非详细上下文
这种设计避免了传统RAG系统的复杂性:嵌入每条过去消息、对每个查询运行相似性搜索、拉取完整消息上下文。
4. 当前会话消息(即时上下文)
当前对话的普通滑动窗口,包含本次会话中所有消息的完整历史(非摘要)。
- 基于token数量限制,而非消息数量
- 达到限制时,当前会话中的旧消息会滚动移除
- 但记忆事实和对话摘要保持不变
- 此块中的所有内容都逐字传递给模型,保持完整对话上下文
工作原理
当你发送消息给ChatGPT时,按以下顺序发生:
- 会话开始:注入会话元数据,提供设备、订阅和使用模式上下文
- 每次消息:存储的记忆事实始终被包含,确保回应与你的偏好和背景一致
- 跨会话感知:近期对话摘要提供轻量级兴趣映射,无需拉取完整记录
- 当前上下文:当前会话消息的滑动窗口保持对话内连贯性
- Token预算:随着会话增长,旧消息会滚动移除,但记忆事实和对话摘要保持不变,保持连续性
关键点
所有信息直接进入上下文
与传统的RAG系统不同,ChatGPT没有本地查询机制。所有相关信息都是直接预注入到上下文中:
每次请求的上下文结构:
[0] System Instructions
[1] Developer Instructions
[2] Session Metadata (会话开始时注入一次)
[3] User Memory (每次都注入)
[4] Recent Conversations Summary (每次都注入)
[5] Current Session Messages (滑动窗口)
[6] 用户最新消息
简单胜过复杂
ChatGPT的方法是预计算轻量级摘要并直接注入。这用详细上下文换取速度和效率。 传统RAG系统需要:
- 嵌入每条过去消息
- 在每个查询上运行相似性搜索
- 拉取完整消息上下文
- 更高的延迟和token成本
这篇文章基于实验和通过对话进行的逆向工程,而非官方文档——所以请谨慎对待
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf
客服小蜜蜂(微信:freebee1024)



