社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  chatgpt

逆向工程:ChatGPT 的记忆是如何工作的

吃果冻不吐果冻皮 • 3 月前 • 100 次点击  
来源:AI寒武纪

 

分享一篇好文:《ChatGPT 的记忆是如何工作的》,非常值得一读

这篇文章是名为eric 工程师对ChatGPT记忆系统的深度逆向工程和技术实现推测。它详细拆解了“可保存记忆”和包含“当前会话历史”、“对话历史”、“用户洞察”三个子系统的“聊天历史”,分析了它们的工作原理、可能的实现方案(如向量数据库、聚类算法),并探讨了这些记忆系统如何显著提升ChatGPT的用户体验,认为“用户洞察”是体验提升的关键

文章深度剖析了“用户洞察”(User Insights)高级记忆系统,分析了ChatGPT如何从你的多轮对话中自动学习、总结你的专业背景(如对Rust编程的深入理解)、知识领域乃至沟通偏好,并附上置信度和时间范围,悄然注入后续对话的上下文中。这正是ChatGPT能提供“千人千面”且高度相关回复的核心秘密

地址:https://macro.com/app/md/54115a42-3409-4f5b-9120-f144d3ecd23a

原文很长,这里做一个重点梳理

ChatGPT的记忆系统:不止一种,而是一套组合拳

Eric发现,ChatGPT的记忆并非单一系统,而是主要由两大部分构成:“可保存记忆(Saved Memory)”和“聊天历史(Chat History)”。

可保存记忆 (Saved Memory)

这个比较好理解,就是用户可以主动控制、让ChatGPT记住一些关于你的事实。比如你可以明确告诉它:“记住,我喜欢简洁的技术解释”,或者“记住,我是个素食主义者”。这些信息会被ChatGPT存起来,并在后续对话中作为背景知识(注入系统提示)使用。用户还可以通过一个简单的界面查看和删除这些记忆条目

有趣的是,这个系统在去重和矛盾检测方面做得比较“粗放”,即使是高度相关的信息,也可能作为独立的记忆条目共存

聊天历史 (Chat History):复杂且强大的“幕后功臣”

这部分就厉害了。虽然名字叫“聊天历史”,但Eric通过实验发现,它实际上可能包含了三个子系统,并且是提升助手响应质量的主要功臣

  • • 当前会话历史 (Current Session History): 这部分记录了用户在其他对话中最近发送的少量消息(比如过去一天内,少于10条)。这使得ChatGPT能捕捉到你最近的一些零散想法或上下文,尽管Eric表示在实际使用中不太容易察觉到这个系统的作用
  • • 对话历史 (Conversation History): 这是真正的“聊天记录”精华。ChatGPT能够从过去的对话中提取相关上下文,甚至能直接引用你在其他对话中发送过的消息!实验表明,它能准确引用长达两周前的消息。超过两周后,虽然不能精确引用,但也能提供消息的摘要。这暗示着消息检索系统同时基于对话摘要和消息内容进行索引。不过,ChatGPT自身的回复,引用准确性似乎要差一些,要么是没存,要么是存得更粗略
  • • 用户洞察 (User Insights): 这才是重量级选手,堪称“可保存记忆”的自动化、高级版。根据Eric“套”出来的ChatGPT上下文信息,这些洞察是这样的格式:
    
    
    
        
    > “用户在Rust编程方面拥有丰富的经验和知识,尤其是在异步操作、线程和流处理方面”
    > “用户在2024年底至2025年初的几次对话中,多次询问关于Rust编程的详细问题,包括异步行为、trait对象、serde实现和自定义错误处理”
    > “置信度=高”

看到没?这些洞察是跨多个对话生成的,还带有时间范围和置信度!置信度可能代表了用于生成该洞察的消息向量的相似度或数量。这些洞察的生成,显然依赖于一个比两周直接引用窗口更大的数据集。

技术实现猜想:向量数据库、聚类与LLM的巧妙配合

Eric作为工程师,自然会思考这些功能背后可能的技术实现

可保存记忆: 可能通过一个类似“bio”工具的函数实现。用户说“记住XX”,就调用这个工具,LLM将用户消息转化为事实列表,进行简单的检查后存入数据库。这些事实随后会被注入到系统提示中

当前会话历史: 实现起来相对简单,可能就是对聊天消息表按时间筛选用户最近的消息

对话历史: 这部分就复杂了。Eric推测使用了向量数据库。消息被嵌入(embedding)后存入,一个库按消息内容索引,另一个按对话摘要索引。当用户发送新消息时,系统会查询这两个向量空间,找出两周内的相似内容。对于更早的对话,则可能查询一个存储了对话摘要和消息摘要的第三个向量空间

用户洞察: 这是最复杂也最核心的部分。Eric认为这可能是一个批处理任务,比如每周运行一次的定时任务(cron job):

1.  找出过去一周活跃的用户。
2.  对每个用户运行一个“洞察更新”程序。
3.  这个程序的核心可能是对用户的消息历史(嵌入表示)进行**聚类分析**(比如k-NN算法),目标是找到一些有意义的消息簇。
4.  然后,将每个簇内的消息文本喂给一个LLM,用特定提示词(prompt)让LLM生成洞察摘要,并附上时间戳和置信度。
5.  最后,这些洞察被存起来,并在用户与ChatGPT对话时加载到上下文中。

为什么ChatGPT用起来那么爽?

通过ChatGPT平台使用模型,体验远超直接调用API,这几乎是共识。除了提示工程的优化,记忆系统绝对是幕后功臣

可保存记忆最直接,用户主动定制,让ChatGPT更“合身”。缺点是,不那么懂技术的用户可能不知道怎么用

用户洞察弥补了这个不足。它自动学习用户的偏好和知识背景(比如Eric的洞察显示他懂Rust,喜欢技术性解释),从而让ChatGPT的回答更符合用户的“胃口”,避免鸡同鸭讲,减少沟通成本。Eric甚至认为,用户洞察系统贡献了80%以上的体验提升!

当前会话历史理论上能让新对话更快进入状态,但实际感知不强

对话历史则赋予了ChatGPT一种“人类对话者”应有的上下文感知能力,避免重复和矛盾。

参考:https://macro.com/app/md/54115a42-3409-4f5b-9120-f144d3ecd23a

 

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/183009
 
100 次点击