我逆向了ChatGPT的Memory系统,发现它比想象中简单太多了 ChatGPT的Memory多好用不多说了,昨天,有个国外的老哥逆向了一波,发现了它由4层架构构成。 没有向量数据库,没有对历史对话做RAG检索。出乎意外的简单~ ChatGPT的上下文结构。一共由6部分构成。 前2部分是一些高级指令,如system prompt,instrucions。接下来4部分是Memory的核心。四层架构:会话元数据、长期用户记忆、最近对话摘要、当前对话窗口。 最后一部分是最后一条消息。 第一层:会话元数据 每次开启会话时,系统会注入一次性的环境信息,包括设备类型、浏览器、大致位置、订阅等级、使用习惯等。 包括你用深色模式还是浅色模式,屏幕尺寸多大。 这些信息帮助模型适配你的环境,但会话结束就没了,不会永久存储。 第二层:用户记忆 这是真正的长期记忆。ChatGPT有专门的工具来存储和删除关于你的稳定事实。 在我这里,模型存了33条,包括名字、年龄、职业目标、当前项目、学习方向等。 但这些不是猜测的,只有两种情况会存储:你明确说 记住这个 ,或者模型检测到符合条件的事实且你没反对。 想增删?直接说 记住xxx 或 删除xxx 就行。 第三层:最近对话摘要 这部分比较意外。大多数人应该会觉着他们会用RAG检索所有历史对话,其实它用的是轻量摘要。 格式大概是:时间戳 + 对话标题 + 用户消息片段。 只总结你说的话,不包括助手回复。大约保留15条左右。 这给了ChatGPT跨对话的连续感,但不需要拉取完整历史。 传统RAG需要嵌入每条消息、做相似度搜索、拉取完整上下文,延迟和成本都高。 ChatGPT的做法是预计算轻量摘要直接注入,用精度换速度。 第四层:当前对话窗口 这是当前会话的滑动窗口,包含完整对话历史(非摘要)。 具体token限制没问出来,但确认了:基于token数而非消息数计算,超出后旧消息滚动淘汰,但记忆事实和对话摘要始终保留。 在发消息的时候,会话元数据给环境上下文,用户记忆确保回复符合你的背景偏好,对话摘要提供跨对话的兴趣图谱,当前窗口维持会话内的连贯性。 当上下文紧张时,旧消息滚出,但核心记忆始终在。 详细细节可以在这里看到:https://manthanguptaa.in/posts/chatgpt_memory/
我逆向了ChatGPT的Memory系统,发现它比想象中简单太多了 ChatGPT的Memory多好用不多说了,昨天,有个国外的老哥逆向了一波,发现了它由4层架构构成。 没有向量数据库,没有对历史
阅读全文