Agent-memory-记忆存储
前一节我们提到,记忆写入的方式策略主要有即时写入(用户说自己不喜欢太死板的文字格式,或者说自己不喜欢喝牛奶,想要早餐推荐,这类记忆就需要及时存储下来),延迟写入(开始说每次对话完生成摘要,就需要等到明确的会话结束信号或者窗口达到上限才会生成摘要并存储记忆)和反馈写入(用户说把某个项目记为a,就出发逻辑,判断并将其写入长期记忆)。
但是这三种策略,如果全用即时写入,会一次性引入大量的噪声,影响存储质量;如果全用延迟写入,那么有些记忆更新的慢就会导致模型误会用户的用意;全用反馈写入就更不现实,模型不能指望用户去强调哪些要记,哪些要记为长期、中期和短期,这还不如自己做一个语音输入的记录app。
如何存储
那么有了方法,自然就需要我们判断哪些记忆要用哪些存储方式才不会让记忆乱套。首先,是做关键词的检测提醒来触发记忆的写入(这一步是为了防止短期大量触发存储,占用大量算力,影响模型性能),比如说当用户说“以后都”,“记住”,“一直是”这些,触发后,就判断这些记忆属于偏好、个人基本信息、事件还是其他记忆类型,紧接着用一个记忆评分公式:memory_value = (importance × 0.4) + (frequency × 0.3) + (future_use × 0.3)来对记忆进行价值打分,分数越高,越有可能作为中期记忆甚至长期记忆,这里的三个参数就是上一节所说的重要性、频率和未来可用性。
短期记忆一般存储在内存,因为其很可能是因为用户在当前对话提到的,需要做到马上存储马上调用,结束后再清空内存,也就是重新开一个窗口一样。而中期记忆一般存储在向量数据库,存储的时间一般以小时为单位,主要是为了存储许多事件这类较大的内容;而长期记忆一般会存储在外部数据库,作为一个重要性比较高,不太会更改的记忆库,时间也会更久,一般以天为单位。
如何提高存储质量
我们一般会采用四种方法:
-
存储记忆不会都集中在某些功能处,很可能是很多个小功能都会需要用到记忆存储,最好是把记忆存储这个功能抽象为一个类,每个功能需要做记忆存储动作时去调用这个类,不然只要功能结构稍微复杂一些,就会衍生出大量重复的记忆功能,占用性能。
-
存储记忆这个动作,不要与任务对话在同一个队列,因为不管是不是实时存储,其都会和推理抢占性能,可能会使得模型输出变慢,降低用户体验,那么用户很可能就会不想用这个模型,那就更别谈记忆了。
-
每次记忆的存储,都会被记录下来并存储在日志里,如果不定期清除或压缩,那么就算我们不是将每个记忆都存,时间久了内存也会不够用,从而产生各种问题。
-
对于记忆的增删改,要做好回滚和关键的事务锁,也就是说对于某些关键的记忆以及事件,对其有动作时一定要让用户知道,记忆操作的透明是很有必要的,这关乎于用户到底信不信任这个产品,同时也是给用户设置保障,让其知道即使误操作了,也不会产生很严重的后果,还有后路,就跟word的自动保存以及崩溃时还能找到上次更改的版本一样。
更多推荐



所有评论(0)