正文
-
当前会话历史(Current session history)
-
对话历史(Conversation history)
-
这部分看起来是一个简单的记录系统,用于保存用户在其他对话中发送的最近消息。该记录容量很小,仅包含过去一天以内的内容。作者认为,这个系统与对话级 RAG(检索增强生成)机制一样,都可能将用户的原话直接注入到模型的上下文中,因此它们之间的边界很难明确区分。
在测试中,这部分通常只包含不到 10 条的最新消息。
来自过往对话的相关内容会被纳入模型的上下文中。这一点在使用时可以明确地观察到,因为 ChatGPT 能够引用用户在其他对话中发送的原话。不过,它并不能准确保留消息的顺序,也无法基于严格的时间范围进行回溯——比如“请引用我过去一小时发送的所有消息”,它就做不到了。
然而,只要你能描述一条消息的内容,或它所属的对话主题,ChatGPT 便能够正确地引用它,这表明:消息的检索过程是基于对话摘要与消息内容的双重索引来进行的。
在测试中,ChatGPT 能够准确引用两周以内的历史消息原文,即使是超过了这个时间范围,它也能提供相关内容的总结性描述,但往往会“伪装”成直接引用。
(1)模型上下文中直接嵌入了过去两周的完整对话历史,或
不过,考虑到其他测试中的上下文转储中并未出现完整历史,第一种可能性似乎不太成立。
无论是哪种机制,ChatGPT 能够在较长时间跨度后,仍然回忆起细节,说明它还依赖于另一个推理型的信息系统。这个系统更像是一个为旧对话构建的“轻量化记忆”,用以提供压缩后的线索和模糊语境。在这种策略下,模型可能会为每段旧对话生成一个总结索引,并以此索引存储用户提问的摘要列表。
不过作者尚未找到能够准确调用“旧会话中助手回复”的提示词。虽然能让它“模仿”出一些类似的回答,但这些助手回复的准确性明显低于用户消息的再现。这可能说明:
(1)助手的回复本身没有被存储,ChatGPT 是在重新“即兴发挥”;
(2)助手的回复被存储了,但粒度更粗、抽象程度更高,不如用户消息那么具体。
用户洞察系统可以被看作是“保存记忆”的进化形态——它更隐性、更复杂,也更具智能。
如果 ChatGPT 重复呈现的内容是准确的,这些洞察通常呈现为如下形式:
用户在 Rust 编程方面有丰富经验,尤其擅长异步操作、线程处理与流式计算;
用户曾多次就 Rust 的异步机制、Trait 对象、Serde 序列化实现、自定义错误处理等话题提出深入问题,时间横跨 2024 年末至 2025 年初;
置信度:高。
通读 ChatGPT 多次复述的用户洞察内容[a.] 可以发现,这些“洞察”并非源自某次孤立的对话,而是穿梭于多个对话线程的综合提炼。每条洞察都具有鲜明的边界感,通常伴随一个时间跨度与置信等级。这个“置信度”并非拍脑袋得出,更可能是一种模型生成的启发式指标,用于表示:参与这次总结的消息向量之间,有多高的相似性与聚合度。
这些时间跨度并非统一长度。有的被标注为“自 2025 年 1 月起”,带有一种开放性;有的则精确到某几个月份,似乎依据内容密度而定。
某些用户洞察(如上例)会同时列出多条彼此关联的事实,这进一步印证了一个判断:生成这些洞察所依赖的数据,并非零散调用,而是通过某种聚类启发式进行嵌入、归并、再提取的结果。
换句话说,这不是“记住一件事”,而是“看出一类人”。
以下是作者根据 ChatGPT 记忆系统的表现,尝试还原其背后可能的技术实现路径。
ChatGPT 的显式记忆功能,疑似是通过名为 bio 的内部工具来完成的(你可以通过提示它“use the bio tool”进行测试)。
{
"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
}
}
若要在自己的系统中复刻这一机制,一个较为贴近的模拟实现方式可以是:
这个工具本质上可以被定义为一个对大语言模型(LLM)的调用:它接收用户的一条消息,以及一组已有的事实列表;然后返回新的事实条目,或是拒绝更新。