长短期记忆有什么区别?
长短期记忆有什么区别?
提示
题眼: 短期存指令,交互,对话。长期存历史对话,知识库,用户特征等
重要
参考答案:
短期记忆的话就是上下文里的 messages 信息,它主要维持着当前任务的状态和内容,比如说任务运行的进度和状态,用户的输入,模型或者工具的输出等,这些内容。只要当前任务还在运行,这一块记忆就会一直保存,当任务结束,并且对话已关闭,那么短期记忆就会被清理掉。然后,短期记忆一般会依赖于上下文窗口,因此也不能记录太多内容,如果超过了最大限制,就可能会出现遗忘的问题。这个时候就需要上下文压缩,或者将短期记忆处理后,暂存到长期记忆里。
长期记忆其实本质上就是一个存储,将用户某一个任务中的产生的短期记忆存起来,这样在后续的交互中能够快速加载,避免出现异常。(比如,咱们今天晚上的对话和任务,睡了一觉起来再继续推进,发现 Agent 不知道昨天晚上的一些设定了。)然后,它和短期记忆的区别,主要是两个。
第一个是存储的方式,短期记忆是存在上下文里,一般依赖于服务器的内存,长期记忆更多的会存在数据库或者缓存里。像简单的 Agent,可以直接使用 MySQL+Redis 的方式,通过用户 id 和任务 id 来存储,这种比较直接;如果比较复杂的话,可以使用向量数据库,按照向量相似度的方式来存储,这样的话可以支持更多维度,比如说,新鲜度,记忆的性质等等这些。
第二个是存储的内容上。短期记忆存用户交互,当前任务状态等等这些,然后长期记忆除了会保存所有的对话信息、指令外,还可以根据之前的对话内容,将记忆按照不同的类型拆分,比如说定义代码风格,具体任务指标,等等这些。然后这一块,需要注意一下长期记忆的粒度问题。如果粒度太小,记忆会碎片化,导致记忆不完整,如果太大的话,会出现大量的噪音,因此一般按照‘用户的一次完整的交互’进行拆分,或者‘一个独立的知识点’的方式。
相关信息
引申:你是如何设计记忆系统的
