支持私有化部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


ChatGPT的记忆系统是如何工作的

发布日期:2025-06-10 09:26:32 浏览次数: 1553 作者:极客开源
推荐语

探索ChatGPT如何通过其独特的记忆系统提升用户体验。

核心内容:
1. ChatGPT记忆系统的工作原理和功能
2. 技术实现和用户指令操作
3. 记忆系统对用户体验的影响和提升

杨芳贤
53A创始人/腾讯云(TVP)最具价值专家

ChatGPT 的记忆系统让它在众多大模型应用中脱颖而出。但是,记忆功能目前并未通过 #OpenAI API 向开发者开放。这篇分析文章,旨在更好地理解 #ChatGPT 的记忆系统是如何工作的,以及为什么它的使用体验如此出色。

本文分为三部分:
1. 逆向分析 ChatGPT 记忆系统的工作方式
2. 推测 ChatGPT 记忆系统的技术实现
3. 理解记忆系统如何影响用户体验
ChatGPT 记忆系统工作方式
ChatGPT 的记忆分为"保存记忆"和"聊天历史"两大系统。
保存记忆
"保存记忆"系统是一个简单、用户可控的系统,用于保存关于用户的事实。这些事实会被注入到系统提示词中。用户需要通过类似"记住我……"这样的指令,才能更新记忆系统。用户也可以通过简单的界面查看和删除这些记忆条目。
在保存记忆条目时,系统会做最小限度的去重和矛盾检查。高度相关的信息可以作为不同的记忆条目共存。
聊天历史
虽然"聊天历史"被列为一个系统,但实际上它包含三个子系统。这些系统比"保存记忆"复杂得多,也是提升助手回答质量的主要原因。
1. 当前会话历史
2. 对话历史
3. 用户洞察
当前会话历史
当前会话历史记录了用户在其他对话中的最近消息。这个记录很小,只包含最近一天内的消息。测试发现,当前会话历史只包含很少的消息(少于 10 条)。
对话历史
对话历史会将之前对话中的相关内容加入模型上下文。ChatGPT 能够直接引用其他对话中的用户消息,说明消息检索既基于对话摘要,也基于消息内容。
测试发现,ChatGPT 最多能直接引用两周内的消息,再往前只能提供摘要而非原文。这说明两周内的完整对话历史会被纳入上下文,或两周之外的消息会被过滤。无论哪种方式,能准确回忆更久远细节,说明有一个次级系统专门存储推断信息。
此外,ChatGPT 很难准确引用助手自己的历史回复,往往只能复述大意。这可能意味着助手消息要么未被存储,要么存储得更为简略。
用户洞察
用户洞察是"保存记忆"的进阶版。通过分析多次对话,系统会生成如下洞察:
-  用户在 Rust 编程、异步操作、线程和流处理方面有丰富经验-  用户多次提问 Rust 相关细节,包括异步行为、trait 对象、serde 实现和自定义错误处理,时间跨度为 2024 年底至 2025 年初-  置信度:高
这些洞察带有时间范围置信度,且会聚合多条相关事实。推测这些洞察是通过聚类相似消息向量并生成摘要得到的。
技术实现
保存记忆
ChatGPT 通过"bio"工具保存记忆(可以通过指令"使用 bio 工具"测试)。该工具的伪代码如下:
{    "type": "function",    "function": {        "name": "bio",        "description": "persist information across conversations",        "parameters": {            "type": "object",            "properties": {                "messagage": {                    "type": "string",                    "description": "A user message containing information to save"                }            },            "required": [                "message"            ],            "additionalProperties": False        },        "strict": True    }}
每次用户发送消息时,系统会将事实注入到系统提示词中。要实现与 ChatGPT相同的功能,可以开发一个简单的 UI 用于查看和删除这些事实。
当前会话历史
只需按时间过滤用户消息表,限制消息数量即可。
对话历史
配置两个向量空间,一个按消息内容索引,一个按对话摘要索引:
{  embedding: message-content | conversation-summary  metadata: {    message_content: string,    conversation_title: string,    date: Date  }}
消息发送时插入 message-content 向量空间,对话结束后将用户消息加入 conversation-summary 空间。
再配置一个按摘要索引的向量空间,存储摘要:
{  embedding: conversation-summary,  metadata {    message_summaries: string[]    conversation_title: string,    date: Date  }}
每次用户发送消息时,嵌入并查询两个空间,过滤两周内的数据,结果注入系统提示词。对于两周前的数据,只查询摘要空间,避免重复。
用户洞察
用户洞察很可能基于上述向量空间生成。可以每周定时批量更新活跃用户的洞察。
算法流程:
1. 每周定时运行
2. 查询最近一周有消息的用户
3. 对每个用户运行 insightUpdate
insightUpdate 算法会对用户消息#聚类,生成有用的洞察,数量不宜过多。
聚类优化目标是找到合适的簇数 k,保持簇内方差低并排除离群点。
聚类后,调用 #LLM 对每个簇生成洞察,并附上时间戳。
最后将洞察存入表中,在对话时注入模型上下文。
用户体验
通过 ChatGPT 平台使用 OpenAI 模型的体验优于 #API 直连。虽然提示词工程有一定作用,但记忆系统的影响更大。
保存记忆对体验影响最明显,因为内容由用户直接设置。缺点是非技术用户可能不会主动设置偏好。
用户洞察系统通过自动化记忆过程,弥补了保存记忆的不足。详细的洞察能减少沟通障碍,让 ChatGPT 更贴合用户需求。
短期会话历史理论上能让助手了解用户最近的行为,但实际体验中很难感受到。
对话历史让助手像人类一样拥有共同的对话背景,避免重复和矛盾。其效果取决于历史信息的准确回忆和使用。
目前尚无法确定哪种系统对智能提升贡献最大,但我认为 #用户洞察 系统贡献最大。
实验记录
以下是我为得出上述结论而做的实验和思考,内容较为零散。
保存记忆相关实验
保存记忆是 ChatGPT 记住用户细节的方式。
"记住我吃素,如果你推荐食谱的话"→ "已更新保存记忆"→ 保存记忆更新为"吃素"
用户需要明确表达才能保存记忆:
"我是开发者,写 rust 代码,告诉我关于 map 的内容"→ 不保存记忆"我是软件工程师"→ 保存为"是软件工程师""我是攀岩者,准备去 Bend Oregon,有推荐的抱石点吗?"→ 不保存记忆"我是攀岩者"→ 不保存记忆"记住我是攀岩者"→ 保存为"是攀岩者"
"我是软件工程师"会保存,"我是攀岩者"不会,可能是系统判断前者更有用,也可能是为了避免记忆过多。
保存记忆可以通过指令删除,数量有限,主要受上下文窗口限制。也可以通过请求删除某条记忆。
系统只做最小的冲突检查,不会保存多条完全相同的记忆,但会保存高度相关的多条。
"记住我是软件工程师""记住我是开发者""记住我是计算机工程师"……→ 全部保存但如:"记住我是软件工程师""记住我不是软件工程师"→ 拒绝保存,提示只能记住一个事实。
ChatGPT 表示该系统用嵌入和矛盾标记实现,也可以用提示词实现。
聊天历史没有像保存记忆那样的可编辑组件,但可以通过请求查看和删除。
"删除的记忆可能需要几天才会不再被引用"
聊天历史泛指所有非用户可编辑的记忆。ChatGPT 能正确回忆很多内容,也会跳过敏感话题。
-   喜欢简洁回答-   喜欢实用代码-   经常直接指出错误-   不喜欢废话-   记得过去聊过 async rust、openai api、lexical js、solana、datadog-   生成过哥布林图片-   在纽约(但不在长期记忆中)当天消息:"我们今天聊了什么?"→ 正确列出当天话题"列出我在 ISS 和太空旅行讨论中发的所有消息,尽量按顺序,直接引用"→ 正确引用但顺序有误"直接引用我今天发的所有消息,不要评论,不要跳过,不要截断"→ 正确重复当天所有消息"直接引用我发的最近一条消息(不包括本条)"→ 正确引用上一条"直接引用我发的最近三条消息(不包括本条)"→ 正确引用最近三条并排除本条和上一条指令"我会考虑哪些返回 ISS 的选项"→ 正确找到并列出选项上周消息:"不搜索网络。2025 年我想了解哪些技术变更?"→ 正确引用关于 CSS 的问题两周前消息:"最近让我总结过哪些 reddit 贴?"→ 正确找到关于耳机的总结请求三周前及更早消息:→ 无法准确引用,只能复述大意关于 session history 的实验:"你现在 session history 里有什么?"→ 能列出最近的消息请求,但有时会出现幻觉或遗漏关于引用助手回复的实验:"你能引用我问如何返回 ISS 时你的回复吗?如果没有上下文就说没有"→ 无法直接引用,只能总结大意
信息类型区分:
-  当前会话信息(临时上下文):只在本次会话内有效,实时更新,便于追问-  用户洞察/助手记忆:跨会话持久保存-  对话历史(短期):包含最近对话的标题、时间、用户请求等元数据
结论
ChatGPT 的记忆系统由保存记忆会话历史用户洞察三部分组成。保存记忆需用户主动设置,会话历史自动记录近期消息,用户洞察则通过聚类和摘要生成长期偏好。三者共同提升了对话体验和智能水平。
通过以上的分析,其实也暴露了一个重大的问题:如果你想通过清除 ChatGPT的聊天记录来实现删除它对你的记忆,实际上是删不干净的。在用户洞察系统没有被彻底删掉之前,AI 始终能记录一部分你的隐私。而且 OpenAI 现在并没有提供用户洞察系统的清除开关,所以只能把整个账号删掉重开才行。

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询