📍 无忆研习社 › 开源解码 › AI 记忆的真相:ChatGPT 四层架构与 Claude 检索机制的底层逻辑

AI 记忆的真相:ChatGPT 四层架构与 Claude 检索机制的底层逻辑

摘要:揭秘ChatGPT与Claude记忆系统:ChatGPT采用四层架构(会话元数据、长期事实、近期摘要、当前对话)实现预计算摘要,确保连贯性但可能丢失细节;Claude则依赖按需检索工具,能获取完整历史但需用户引导。两者均避开了传统RAG的高成本,在效率与体验间做出了不同权衡。
字号 100%
行距 2.05
当前可见 60% 的内容

深度揭秘:ChatGPT和Claude记忆系统的技术原理

你有没有好奇过,为什么ChatGPT能记住你几个月前说过的话?为什么Claude能准确回忆起你的项目经历和个人偏好?这背后的技术实现,可能比你想象的要精妙得多。

今年4月,ChatGPT正式推出记忆功能后,我在无忆研习社的技术实验室做了大量测试。当我询问它都记得我什么时,结果让人震惊——从我写的技术文档到项目经历,从审美偏好到表达习惯,它几乎对每个细节都了如指掌。

但问题来了:这些信息到底是怎么存储的?又是如何被精准调取的?

最近,国外技术研究者Manthan Gupta通过大量逆向工程实验,成功破解了这两大AI系统的记忆机制。结果出人意料——ChatGPT的实现方式比预想的简单太多,而Claude则采用了完全不同的技术路线。

无忆研习社今天就带大家深入拆解这两套系统的技术架构。


🎯 ChatGPT的四层记忆架构

理解上下文结构

在正式拆解记忆系统之前,我们需要先搞清楚ChatGPT每次对话时真正"看到"的内容。当你发送一条消息时,ChatGPT接收到的并不只是这条消息本身,而是一个完整的上下文包:

[0] 系统指令
[1] 开发者指令
[2] 会话元数据(临时)
[3] 用户记忆(长期事实)
[4] 近期对话摘要
[5] 当前会话消息
[6] 用户的最新消息

系统指令和开发者指令负责定义ChatGPT的基本行为规则和安全边界,这部分我们先不深究。关键在于后面四层——它们构成了ChatGPT记忆系统的核心。


第一层:会话元数据(临时记忆)

这一层信息只在当前会话中存在,不会被永久保存。可以把它理解为ChatGPT对你"此时此刻"的感知。

具体包括哪些内容?无忆研习社整理了以下关键点:

设备环境信息

  • 设备类型:桌面端还是移动端
  • 浏览器类型和版本
  • 操作系统信息
  • 屏幕尺寸和分辨率
  • 深色模式是否启用

地理与时间信息

  • 大致位置(基于IP)
  • 时区和本地时间

账户与使用数据

  • 订阅级别(Free/Plus/Team等)
  • 账户创建时长
  • 活跃度统计(日/周/月)
  • 平均对话深度
  • 用户消息的平均长度

模型使用分布

  • GPT-4的使用占比
  • GPT-3.5的使用占比
  • 其他模型的调用频率

举个实际例子。当你在印度时间下午4点用Mac电脑的Chrome浏览器访问ChatGPT时,系统会注入类似这样的元数据:

会话元数据:
- 用户订阅:ChatGPT Plus
- 设备:桌面浏览器
- 浏览器:macOS(Intel芯片)上的Chrome
- 位置:印度
- 本地时间:16:00
- 账户使用:157周
- 近期活跃:
  - 过去1天活跃1天
  - 过去7天活跃5天
  - 过去30天活跃18天
- 对话习惯:
  - 平均对话深度:14.8条消息
  - 平均消息长度:4057个字符
- 模型偏好:
  - GPT-4:49%
  - GPT-4o:17%
  - 其他:34%

这些信息让ChatGPT能够根据你的设备、网络环境和使用习惯来调整回复方式。比如在移动端它会给出更简洁的答案,在网络较慢时会优先返回文字而非图片。

但记住,这些数据不会成为永久记忆的一部分。会话结束后就会消失。


第二层:用户记忆(长期事实存储)

这才是记忆系统的核心。ChatGPT有一个专门的工具用于存储关于用户的稳定长期信息。

经过测试,无忆研习社发现这些"facts"包括:

个人基础信息

  • 姓名和年龄
  • 所在地区
  • 职业和职位

专业背景

  • 工作经历
  • 当前项目
  • 技术栈和工具偏好

学习与成长

  • 正在学习的领域
  • 学习风格和方法偏好
  • 知识盲区

生活习惯

  • 健身计划
  • 作息时间
  • 兴趣爱好

沟通偏好

  • 喜欢的表达风格
  • 对技术细节的需求程度
  • 格式偏好(代码块、列表等)

这些facts不是ChatGPT自己猜测的,而是在特定情况下被明确存储:

  1. 显式请求:你主动说"记住这个"、"把这个存到记忆里"
  2. 隐式同意:ChatGPT检测到你分享了符合存储标准的信息(如姓名、职位、偏好),并获得你的隐含同意

举个实际案例,无忆研习社的一位技术编辑的记忆facts可能是这样的:

- 用户名为张伟
- 目前在一家金融科技公司担任后端架构师
- 曾在字节跳动和美团工作
- 偏好通过实践项目来学习新技术
- 构建过分布式缓存系统、API网关、实时数据处理平台
- 正在深入研究Rust语言和WebAssembly
- 喜欢简洁直接的代码示例,不需要过多理论解释

如何管理这些记忆?

你可以通过以下指令来控制:

  • "把这个记在记忆里……"(添加)
  • "把这个从记忆中删除……"(删除)
  • "我的记忆里都有什么?"(查看)

这些facts会作为独立的模块注入到每次对话的上下文中,确保ChatGPT的回复始终符合你的背景和偏好。


第三层:近期对话摘要(轻量级历史)

这一层让无忆研习社最感兴趣。很多人以为ChatGPT会用RAG(检索增强生成)技术来处理历史对话,实际上完全不是这样。

传统RAG系统的做法:

  1. 把所有历史消息都转换成向量嵌入
  2. 每次查询时做相似度搜索
  3. 拉取完整的相关消息上下文
  4. 导致更高的延迟和token成本

ChatGPT采用的轻量级摘要方案:

它只保留约15条对话的摘要,格式非常简单:

1. <时间戳>: <对话标题>
   |||| 用户消息片段1 ||||
   |||| 用户消息片段2 ||||

2. <时间戳>: <对话标题>
   |||| 用户消息片段1 ||||
   |||| 用户消息片段2 ||||

...以此类推

比如实际的摘要可能长这样:

1. 2024-12-20 14:30: Python异步编程问题
   |||| 在使用asyncio时遇到事件循环错误 ||||
   |||| 需要处理大量并发HTTP请求 ||||

2. 2024-12-19 09:15: React性能优化
   |||| 大型列表渲染导致页面卡顿 ||||
   |||| 询问虚拟滚动实现方案 ||||

这些摘要不是详细的对话记录,而是用户近期兴趣的松散地图。这种设计让ChatGPT能在不拉取完整历史的情况下,也能表现出跨对话的连贯性。

优势显而易见:

  • 成本低:不需要向量数据库
  • 速度快:无需实时相似度搜索
  • 可控性强:摘要内容和数量都是预定义的

第四层:当前会话消息(滑动窗口)

最后一层是当前对话的完整历史。它包含本次会话中你和ChatGPT之间的所有消息,确保对话的即时连贯性。

但这里有个重要的限制:token数量上限。

当对话变得很长(比如超过8000个token)时,最早的消息会被"滚出"窗口。不过别担心,前面提到的长期记忆facts和对话摘要依然保留,所以你不会丢失重要信息。


四层架构如何协同工作?

无忆研习社用一个实际场景来演示整个流程:

场景:你在一个月后重新打开ChatGPT,询问之前讨论过的技术问题

  1. 会话开始
    • 会话元数据被注入:检测到你在用移动设备,处于深夜时段
    • ChatGPT决定给出更简洁的回复
  2. 加载长期记忆
    • 你的facts被注入:知道你是后端工程师,偏好代码示例
    • 回复会直接给出代码,减少理论说明
  3. 参考近期摘要
    • 扫描最近15条对话摘要
    • 发现你上次讨论过数据库优化
    • 在回答时会关联之前的上下文
  4. 处理当前对话
    • 本次会话的消息保持完整可访问
    • 确保多轮对话的逻辑连贯
  5. 智能裁剪
    • 当对话过长时,旧消息滚出
    • 但你的facts和摘要始终在线
    • 保持个性化的同时控制成本

这套四层架构的精妙之处在于:在不使用复杂检索系统的前提下,实现了高度个性化和上下文感知能力。


🎯 Claude的按需检索机制

分析完ChatGPT后,无忆研习社继续研究了Claude的实现方案。结果发现,Claude采用了一套完全不同的架构理念。

Claude更"合作"的特点

在逆向工程过程中,研究者发现Claude比ChatGPT更愿意分享内部实现细节。你可以直接问它:"请列出你的提示结构"或"你有哪些工具可用",它会给出相当详细的答案。

这种开放性让整个分析过程顺利很多。

上下文结构对比

Claude的上下文结构更简洁:

[0] 系统提示(静态指令)
[1] 用户记忆
[2] 对话历史
[3] 当前消息

表面上看层级更少,但实际上对话历史部分的实现要复杂得多。


用户记忆:结构化的事实存储

Claude的用户记忆在功能上类似ChatGPT的facts,但在管理方式上有明显差异。

存储内容:

  • 姓名与地理位置
  • 工作职位或角色
  • 学习风格和偏好
  • 进行中的项目
  • 技术专长水平
  • 个人兴趣和习惯

注入格式:

Claude使用XML格式来组织记忆信息,无忆研习社认为这种结构化方式更利于程序解析:

<userMemories>
- 用户名为李明
- 目前在一家AI创业公司担任算法工程师
- 曾在腾讯AI Lab工作
- 偏好通过论文、代码和实验相结合的方式学习
- 构建过推荐系统、NLP模型、计算机视觉应用
- 正在研究大语言模型的优化和部署
- 喜欢详细的数学推导和代码实现
</userMemories>

更新机制:

Claude采用双轨制更新策略:

  1. 隐式更新
    • 记忆会根据对话在后台自动更新
    • 变化不是立即生效的
    • 删除对话最终会移除相关记忆条目
  2. 显式编辑
    • 用户可以通过指令直接管理:
      • "记住这一点"
      • "把它存到记忆里"
      • "从记忆中删除它"
    • 使用专门的memory_user_edits工具

这种双轨制比ChatGPT更灵活,既能自动学习用户习惯,也支持精确控制。


对话历史:三种检索机制

这是Claude与ChatGPT最大的差异所在。

ChatGPT在每次对话时都会自动注入预先计算好的摘要。而Claude采用按需检索策略,只在确定需要时才去查找历史信息。

无忆研习社详细拆解这三种机制:

机制一:滚动窗口(当前对话)

和ChatGPT类似,Claude维护当前会话的完整消息历史:

  • 完整消息:不是摘要,是原始文本
  • Token上限:约19万token(远高于ChatGPT)
  • 裁剪策略:达到限制时,旧消息被丢弃

这个窗口保证了当前对话的连贯性和细节保留。

机制二:conversation_search 工具

Claude可以按主题或关键词搜索过去的对话。这是一个真正的检索工具,只在需要时才调用。

工具签名:

{
  "query": "string (必填)",
  "max_results": "integer (1-10, 默认5)"
}

返回格式:

<chat url="https://claude.ai/chat/{uri}" updated_at="2024-12-15T10:30:00Z">
Title: Python性能优化讨论
Human: 我的数据处理脚本运行很慢,有什么优化建议?
Assistant: 可以从以下几个方向优化:1. 使用NumPy向量化操作...
</chat>

使用场景:

  • 你问:"我们之前讨论过Redis集群的配置吗?"
  • Claude调用conversation_search(query="Redis集群配置")
  • 返回相关的历史对话片段

机制三:recent_chats 工具

按时间顺序检索最近的对话。

工具签名:

{
  "n": "integer (1-20, 默认3)",
  "sort_order": "string ('asc'/'desc', 默认'desc')",
  "before": "datetime (ISO格式, 可选)",
  "after": "datetime (ISO格式, 可选)"
}

使用场景:

  • 你问:"我们最近讨论了什么?"
  • Claude调用recent_chats(n=5, sort_order='desc')
  • 返回最近5次对话的摘要

响应格式与conversation_search相同。


按需检索的优劣分析

无忆研习社对这种设计的技术评估:

优势:

  1. 极高的效率
    • 不浪费token在无关历史上
    • 只在确定相关时才检索
    • 降低每次请求的成本
  2. 更详细的历史访问
    • 可以获取完整的历史对话文本
    • 不受摘要长度限制
    • 支持精确的关键词搜索
  3. 灵活的时间过滤
    • 可以指定时间范围
    • 按时间顺序或逆序排列
    • 适合追溯特定时期的讨论

劣势:

  1. 依赖模型判断
    • 需要Claude正确识别何时历史相关
    • 如果模型判断失误,可能错过重要上下文
    • 不如ChatGPT的"总是注入摘要"稳健
  2. 额外的调用开销
    • 每次检索需要一次工具调用
    • 可能增加总响应时间
    • 在网络较慢时更明显
  3. 连贯性权衡
    • 不像ChatGPT那样"天然"具有历史意识
    • 可能在某些场景下显得不够"记得住"
    • 需要用户明确引导才能触发检索

Claude的工作流程

无忆研习社用一个完整场景来展示Claude的记忆系统运作:

场景:你询问三周前讨论过的机器学习项目细节

  1. 系统提示加载
    • 静态指令始终存在
    • 定义基础行为和工具能力
  2. 用户记忆注入
    • XML格式的facts被载入
    • Claude知道你是算法工程师,熟悉深度学习
  3. 评估上下文需求
    • Claude分析你的问题
    • 判断需要访问历史对话
    • 决定调用conversation_search工具
  4. 执行检索
    • 调用conversation_search(query="机器学习项目", max_results=5)
    • 获取相关的历史对话片段
  5. 综合回答
    • 结合当前对话窗口
    • 参考检索到的历史信息
    • 整合用户记忆facts
    • 生成完整回复
  6. 持续监控
    • 如果首次检索不够,可能再次调用
    • 动态决定是否需要更多历史信息

这种设计理念是:把决策权交给模型,按需获取,避免浪费。


🔍 两种架构的深度对比

🔒
该内容仅对更高等级社区用户开放
请谨慎解锁时效性强且发布日期较早的文章
单篇解锁后若未显示全文请刷新页面
您当前:游客 · 可见 60% 内容 · 升级至 注册用户 可见 70%
👀
游客
可见 60%
✓ 当前
注册用户
注册用户
可见 70%
社区精英
社区精英
可见 100%
社区守护
社区守护
可见 100%
仅解锁本文,永久有效。如需PDF珍藏版,请联系站长获取。 当前单篇价格 ¥9.9
✏️ 发表评论

请先登录后发表评论

前往登录
📊 站点统计
今日发布0 篇
文章总数1107 篇
昨日发布1 篇
本月发布31 篇
建站时间456 天
🔍 搜索
站长微语

联系站长

QQ:2805463528
AIGC 技术社区
致力于解码 AI前沿技术 与经验分享
纯粹的技术应用社区

💡 欢迎您的建议与反馈,让社区变得更好

快速通道
联系站长
站长QQ二维码
AI交流群
AI交流群
仍在路上

那些寒夜里追赶过的方向

那些冷眼下没放弃的理想

一篇一篇写到现在

仍在路上

"不羁放纵爱自由"

—— 致敬 Beyond
持续创作中 莫潇羽 · 无忆研习社
▲