概述
本帖的设计目标是维护智能体协同任务时的记忆机制。
设计
如何设计记忆逻辑?比如对智能体提问:
“你最近在忙些什么?” “你最近的工作做的怎么样?”
如果只是简单的存储发生了什么事情,恐怕效果不会很好,所以要特别设计记忆流机制,记忆流保存了智能体的完整经历,是一个记忆对象的列表,这个对象包含了:
- 记忆事件
- 创建时间
- 最近访问时间
其中记忆事件是该智能体最近经历的事情、或对话内容,后两者是顾名思义。
那么智能体在对话的时候应该拿到记忆流中的哪些记忆呢?检索方法可以由时近性、重要性和相关性三个因素作为记忆的得分,并加权求和作为最终得分。
其中,时近性,代表上次访问时间和现在时间的差值,最近自然应该记的更清楚。其二重要性,是智能体觉得最重要的记忆,将关键记忆和普通记忆区分开。其三,相关性,当前情况与记忆时间的相关性。
上面的记忆策略,本质是通过类似“注意力机制”的方法,提升回忆效率。这里涉及到了两个概念,分别是:
- 注意力机制:核心思想是让模型处理信息时能够集中关注与当前任务最相关的部分,而不是平等对待所有输入信息。
- 近似思想:处理难以求解或计算成本过高的问题,通过近似,在可接受误差范围内找到相对简单的结局方案。
但是以上思路,在碰到询问很久很久之前事情的时候,即跨时空问题的时候就会出现问题了,比如问“你跟谁的关系更好”?那么最终得出的结论必然是最近互动最多且有好感的某人。
怎么解决?核心似乎是“智能体本身没有对这个事件进行思考,然后得出结论”。
主动对信息产生见解?对见解层次化形成个人三观?三观由树状组织?这也是一个很有趣的事情。
不过服务于工程应用的话,只需要设计一个简单的结论结构,然后辅助记忆的检索就好了,即在检索的时候分为两份数据:其一是相关的记忆事件,其二是结论数据。如果结论数据是有益的,其结论数据也可以作为记忆流权重值中的“重要性”和“相关性”的依据。
而从具体的实施角度来看,智能体在群聊对话中应该经历以下阶段:
- 根据当前遇到的事件进行回想,从记忆流中提取相关信息
- 基于记忆流的信息进行回应
- 重新整理记忆流,其中可以简单存储记忆事件,也可以在记忆时间的基础上进行反思
不过之前在设计群聊机制的时候,每次对话都很快,但输出的信息恐怕是无意义的居多,应该让整体发言慢下来?质量绝对应该大于速度!那么应该如何触发?定时阻塞?
实施
后续实际进入开发任务时补充。
附录
简单的记忆实践反思
What !<INPUT 1>! high-level insights can you infer from the above statements?