首页
学习
活动
专区
圈层
工具
发布

OpenAI 是如何让ChatGPT记住你的?!

一直以来都很好奇ChatGPT的记忆功能到底是如何实现的,因为在使用它的过程中,这个记忆的体验确实很好。

正好今天刷到一篇博客,作者逆向拆解了一番,

发现这个记忆系统比想象的要简单许多。

链接在此: https://manthanguptaa.in/posts/chatgpt_memory/

先来看下ChatGPT每次收到用户发送的信息的时候的整个上下文结构。

[0]系统指令

[1]开发者指令

[2]会话session的元数据

[3]用户记忆(长期)

[4]最近对话的摘要

[5]当前session的对话记录

[6] 最新发送的消息

会话session的元数据是非常临时性的,并不属于长期记忆,不会永久存储。

这部分的元数据包括了一些设备信息、订阅等级、当地时间、最近使用什么模型等等,

就看上去是一些基本信息。

一个session元数据示例:

用户记忆是长期存储的。ChatGPT 有专门的工具来帮助用户积累存储或者删除记忆。

这部分记忆包括各种:

你的名字

职业生涯目标

背景

学习领域

个人喜好

...

这些记忆不是ChatGPT自己猜是否需要存储,

而是当用户明确说“帮我记住...“或者“存储这部分记忆"时,ChatGPT 才会记住。

当然,这部分的记忆能写入,也能删除。

除了会话session元数据和用户记忆,还有一个部分是近期对话内容总结。

这里并没有采取传统的RAG做法。

传统的RAG有非常大的弊端,

它需要向量化每一个过往的消息、做相似度查询匹配、延迟高、token消耗大。

ChatGPT的做法非常简单,只总结用户发送的消息,直接把总结好的内容注入到上下文中。

按照作者的观察,ChatGPT有15个总结摘要可用,这个摘要一般是下面这种格式:

1. <Timestamp>: <Chat Title>

|||| 用户消息片段1||||

|||| 用户消息片段2||||

最后就是当前session的消息记录。

这部分就是包含了完整的对话消息了,不做任何的总结摘要。

但这里要注意的是,它实质上是一个滑动窗口。

如果这个窗口的上下文已经达到了限制,那旧的消息就会被删去,但是用户记忆和消息历史摘要是保留的。

这样既确保了ChatGPT不会忘记你,也确保了整个对话的连贯性。

最后,总结一下,当我们把消息发送给ChatGPT的时候,会发生什么:

会话开始:元数据注入,包括你的设备,订阅信息,模型使用习惯

每条消息都包含了存储的用户记忆,这样保证了ChatGPT的回答是符合你的喜好的

跨聊天的感知:轻量级的近期对话总结

当前的上下文:使用了一个滑动窗口来保证当前对话的一致性

Token 预算:当Token达到上限之后,旧的消息就会被删去,但是记忆和对话的摘要总结仍然保留。

>/ 作者: Bubble

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OKo5mnnWscwB12_SzB4LA2cg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

相关快讯

领券