如何让agent拥有对话记忆?
如何让“Agent”真正拥有对话记忆?
这篇文章是“深度Agent解析”系列的开篇。让AI掌握某个知识库,最经典的做法就是“检索增强生成”(Retrieval-augmented Generation,简称RAG)。简单说,就是把知识切片、向量化存储,在对话时联想相关片段,喂给大模型,让它借用这些知识来生成回答。这个思路启发了一个关键问题:能不能用同样的方式,让AI记住和用户的每一次对话,慢慢熟悉用户?无论AI的定位是“情感陪伴”还是“深度进入情境的连续咨询”,这种针对用户的“长期记忆”都是核心体验。做到长期记忆不难,但效果的差距,真的可以天差地别。实际上,让Agent记忆对话,远比想象中复杂。这篇文章就来系统拆解一下,如何为GPT-4o构建一个 App级别的、可靠的对话长期记忆。
让AI记忆对话的任务分解
说起来容易,真要做得漂亮,难。为什么?因为这不是简单的“存进去、取出来”那么简单。要实现真正有效的长期记忆,必须处理好几个关键环节。
关注度标注
遗忘和唤醒
多层级存储
对话总结 & 记忆整理
印象冲击
第一个问题很现实:对话记忆会随着时间不断膨胀,持续降低检索效率,命中率下降,误检率上升。怎么办?记忆得有重点。这就引入了
关注度标注
唤醒
对话信息本身是零散的,完整的语义往往存在于上下文中。光想起某一句单句话,很多时候没什么用。这就需要对对话进行
整理总结
当信息来源变多,冲突就可能出现。用户嘴上说自己心情不错,但他描述的境遇和对话中流露的特征,都反映出情绪很焦虑。面对这种矛盾,Agent怎么得出一个最终会采用的结论?对任何是非判断,答案不是非黑即白的,而是一个0到1之间的信念值。和人一样,Agent需要定期
整理记忆
最后,人类对话中存储的信息不只包含表层事实,还有表层信息所传递的深层意味。比如在交流中,我们会下意识形成对对方心情、性格的印象。这个过程并不简单。每个微弱的印象最初都在潜意识层面,只有被重复冲击,才会浮现到感知流中被使用。这需要一个完备的
印象冲击系统
关注度标注
每个进入感知流的信息,都会被标注一个“关注度”,决定它在多大程度上值得被关注。具体的做法是设计一个关注度标注函数:每次信息出现时,让GPT按0到10分给它打分。但单纯这么做有问题。GPT不会依据AI自身特有的知识和经验来进行关注度标注,而这些特有经验恰恰应该影响关注度。举个例子,按常识,GPT不会对“桌上有喝了一半的牛奶”这种信息产生关注。但如果用户对牛奶过敏,关注这条信息就很可能是有意义的。
完整的关注度标注,需要从长期记忆中联想相关信息,而这些信息本身就带有自己的关注度。把联想到的长期记忆信息的关注度,作为工作记忆的参考,再让GPT对目标信息打分。这样,系统就能基于已有经验来判断新信息的价值。
遗忘和唤醒
长期记忆的关注度由两个变量加总得到:长期关注度和短期关注度。长期关注度变化缓慢,衰减也慢;短期关注度变化迅速,衰减也快。无论什么原因导致的关注度增加,就是
唤醒
遗忘
关注度减少的原因比较单一:自然衰减。长期关注度衰减慢,短期关注度衰减快。而关注度的增长,与信息被回忆和使用有关。对长期关注度来说,每次信息被回忆联想(被有效使用),都会增加一些长期关注度,同时大幅增加短期关注度。短期关注度还有一个额外的唤醒来源:当长期记忆中某个单一信息被回忆使用时,会带动相关信息短期关注度的提升。这个机制可以叫“区域性唤醒”。
区域性唤醒在人类身上能找到清晰证据。当我们持续在某个领域思考时,就能唤醒该领域的长期记忆,大幅提升思考效率。
多层级存储
搜索运算,无论对人还是对机器,随着长期记忆的增加,代价都会逐步放大。即便有遗忘机制,每次搜索都要遍历全部记忆,运算消耗依然巨大。人类进化出了一套与关注度相关的多级存储模型。信息在不同层级之间流动,流动依据就是关注度(包括短期和长期)。关注度高的信息被唤醒到更高层,优先被检索;关注度低的则沉到更低层,检索优先级降低。
这背后的精神可以这样理解:虽然我大部分时候不会去搜索所有记忆,但系统总能确保你想起重要记忆时,它正好在我愿意搜索的范围之内。
有了多层级存储,就可以在运算中灵活利用这个层级。对系统认为重要的运算任务,愿意消耗更多资源,检索可以抵达更深层级,去搜索那些低关注的信息。对不那么重要的任务,只会在最高关注度的层级里检索。比如系统在进行认知求解时,会根据问题的关注度生成一个求解动机,这个动机决定了检索深度。动机越高,检索越深,越可能找到那些低关注的记忆。
所以,一个运算能否检索到需要的信息(假设信息存在),取决于两个因素:一是运算本身的求解动机,决定了检索深度;二是相关信息被唤醒的程度。尤其是当长期关注度不太容易变化时,相关信息的短期关注度有没有在唤醒中被提升。这两点都能在人类身上找到证据:一个一开始想不明白的问题,讨论或思考一段时间后就想通了,背后可能就是这两个因素在变化:二次思考带来了更高的求解动机,持续思考导致了区域性短期关注度提升。
对话总结 & 记忆整理
对话总结只需要封装一个GPT API,定期对对话的实质内容进行总结,并对其中的大类事件(比如用户遭遇、活动)进行标签和记录。每次总结打上大类事件标签时,都会去记忆中寻找相同的大类事件(比如“用户去迪士尼”或“用户感冒”),再调用一个GPT API对事件信息进行总结合并。合并后的信息应包含该事件主干的发展脉络。同时,大类事件需要有时效评估。如果一个事件隔了很长时间没有更新,再出现类似信息时,应判定为新的大类事件。比如用户又去了迪士尼,但上一个“用户去迪士尼”的事件是半年前,那就应该归为新事件。
Agent存续期间,每天都会形成各种事实类型的信息,包括具体事件、抽象知识等。有些信息相似,有些相互矛盾。堆积下去,系统会越来越混乱。这就需要
记忆整理
从人类身上可以借鉴整理策略:为避免影响即时思考的时效,整理不会在信息产生时马上进行,而是选择在系统空闲时,比如人在休息或睡眠中,在潜意识层面完成。具体操作上,可以以每天新形成的是非类信息为起点,让它在记忆中检索相关旧信息,然后封装一个GPT API,根据新信息调整旧信息的信念。
这里有一个难点需要克服:GPT重算信息的信念并不完全稳定,不一定能让信念往更客观的方向收敛。做法上,不要以一次GPT的输出去直接替换,而应采用类似印象冲击的方式逐步调整。
印象冲击
系统里有一个“推知者”,它利用因果类知识,根据原始信息的信念和因果知识的充分性,推知出新的信息。这些被推知的信息叫作
印象
猜想
在植物性认知的印象冲击模型中,生成的印象自带信念。因果知识的充分性不同,原始信息信念不同,推知信息的信念也不同(在MTS Agent中,这些复杂运算完全交由GPT完成)。只有在信念突破阈值时,印象才会变为猜想。信念运算为什么必要?因为很多单次推知非常微弱,需要积累才能变成一个相对可靠的猜想,此时才会写入感知流被意识到。比如每句对话都可能形成对对方性格的推知,但作用都很微弱。而有些推知一次就能得到合理猜想:一个人如果喉咙痛,在一般情况下就可以合理猜想他是不是感冒了。
为了计算累积多少印象能形成猜想,我们需要信念。推知者会推知信息,同样的信息在一段时间内被重复推知,印象不断累积,突破阈值就变成猜想。这里“一段时间”的标准怎么定?比如推知人的性格,时效性很长,因为性格在较长时间里不怎么改变。而“某人感冒”的印象时效性就很短,一个月前留下的印象,放到现在进行冲击意义不大。
处理印象时效性的机制大致是这样:生成印象时,让GPT API同时输出这个印象的时效,然后按这个时间让印象的信念衰减。时效越长,信念衰减越慢;时效越短,衰减越快。比如感冒的印象衰减很快,可能几天就衰减没了;性格的印象几年都不会衰减完。一个印象只要在一段时间内信念累积超过阈值,成为一个显著猜想,就可以变为一个带时间的具体事件,存入长期记忆。
在GPT-4o发布时,它的App展现出了非常强的、与用户相关的长期记忆能力,达到了“全对话记忆”的级别。在此之前,OpenAI App上的长期记忆还只是“定向抽取”的水平。此外,GPT-4o的App比API版本多了不少特性,体验也好了很多,这些都是“模型外”算法的效果。
与用户相关的长期记忆,是“情感陪伴AI”好与坏的核心分水岭。用户总是希望自己的伙伴能慢慢了解自己,从陌生人变成朋友,变成好友,甚至知心的恋人。这需要极高水平的对话长期记忆能力。同时,对话长期记忆也是“深度进入用户情境的连续咨询AI”的核心能力。用户之前咨询了身体不适,AI无法做出有效诊断和建议;第二天用户突然说“我开始发烧了”,Agent需要精准联想起之前所有“身体不适”的相关信息,而不是让用户重复一遍背景。这才是“连续”的真正含义。类似心理咨询、健康咨询、法务咨询、母婴咨询、宠物咨询、企业管理咨询,要做到人类级别的交互,都离不开强大的对话长期记忆支持。这篇文章是对Agent长期记忆构建的一次深度总结,希望能帮助大家快速提升应用层Agent长期记忆的水准线。
THE END
-
- 关于宇宙的好的网名有哪些
- 角色扮演 | 1
- 网名