Generative Agents 架构简析
斯坦福《Generative Agents: Interactive Simulacra of Human Behavior》论文解读。
demo地址
论文原文地址
agent架构:
Agent记忆的的核心挑战是确保在需要时检索和合成agent内存中最相关的部分。
我们的体系结构的中心是内存流,这是一个数据库,它维护了agent经验的全面记录。
Memory and Retrieval
Challenge: Agent存储的记忆会远大于LLM支持的prompt长度,且输入太长的记忆会分散模型注意力。
Approach: Memory Stream维护agent经验的全面记忆。它是一个内存对象的list,其中每个对象包含一个自然语言描述、一个创建时间戳和一个最近的访问时间戳。
通过Recency、Importance、Relevance三个维度来计算score,给每条记忆打分。用得分高的记忆来构建prompt。
1. Recency: 给最近访问过的内存对象赋一个更高的分数。
2. Importance 通过给agent认为重要的内存对象分配更高的分数来区分普通记忆和核心记忆。例如,在房间里吃早餐这样的普通事件的重要性得分很低,而与另一半分手的重要性得分很高。我们发现直接要求语言模型输出一个整数分数是有效的。完整的prompt如下:
在1到10的范围内,1是非常平凡的(例如,刷牙,铺床),10是非常痛苦的(例如,分手,大学录取),评估下面一段记忆可能的辛酸程度。
记忆:在The Willows Market和药店买杂货
评分:<fill in>
3. Relevance : 我们使用语言模型来生成每个内存的文本描述的嵌入向量,通过向量计算相关程度。
Reflection
Challenge: agent,当只有原始的观察记忆时,很难进行概括或推断。agent如果只用Steam Memory的信息,给出反应显得“没有灵魂”(个人理解)。
Approach: 我们引入第二种记忆,我们称之为Reflection。Reflection是由主体产生的更高层次、更抽象的思想。因为它们是一种记忆,所以当检索发生时,它们与原始的观察记忆一起包含。Reflection是定期产生的,在实践中,我们的agent每天大概会反思两到三次。Reflection产生流程如下:
- 用agent的Memory Stream中最近的100条记录询问LLM,“Given only the information above, what are 3 most salient high-level questions we can answer about the subjects in the statements?”(仅给定上述信息,我们可以回答关于语句中的主题的3个最突出的高级问题是什么?)
- 根据LLM提出的3个问题,我们检索相关记忆(包括其他Reflection)提交给LLM,让LLM对相关记忆抽象成“见解”,并标出每个“见解”引用都是那些记忆。
最终,每个Reflection都会参数一个Reflection树,如下:
Planning and Reacting
Challenge: 智能体需要在更长的时间范围内进行计划,以确保其行动序列是连贯、可信和充满细节的。
Approach: 先让LLM写出一个大概的计划,再让LLM写出更多关于计划的细节。如下prompt
姓名:Eddy Lin(年龄:19)
天生特质:友善、外向、好客
Eddy Lin 是 Oak Hill 学院的一名学生,主修音乐理论和作曲。他热爱探索不同的音乐风格,并始终寻求扩展知识的方法。Eddy Lin 正在为他的大学课程进行一个作曲项目。他还在上课以了解更多关于音乐理论的知识。Eddy Lin 对他正在进行的新作曲感到兴奋,但他希望在接下来的几天里每天能有更多的时间来完成它。2月12日星期二,Eddy
1)早上7点起床并完成了早晨的日常活动。
[. . . ]
6)晚上10点左右准备睡觉。今天是2月13日星期三。以下是 Eddy 今天的计划概述:1)
会输出一个计划表。agent将该计划保存在记忆流中,然后递归地将其分解以创建粒度更细的操作。
在每个时间间隔,把agent对周围的观察,和一些基本信息构建prompt,让LLM作出合适反应和更新计划。其中[Agent's Summary Description]
代表一个动态生成的、段落长的代理总体目标和性格的总结。
[Agent’s Summary Description]
现在是2023年2月13日,下午4点56分。
John Lin的状态:John提前下班回到家里。
观察:John看到Eddy在他工作地点附近散步。
来自John记忆的相关背景总结:Eddy Lin是John Lin的儿子。Eddy Lin一直在为他的课程创作音乐作品。Eddy Lin喜欢在思考或聆听音乐时,在花园里散步。
John是否应该对观察做出反应?如果需要,适当的反应是什么?
如果一个agent决定和另一个agent对话(反应的一种),会提取相关记忆,构建如一下prompt,获取第一句对话的内容:
[代理的总结描述]
现在是2023年2月13日,下午4:56。
John Lin的状态:John提前下班回家了。
观察:John看到Eddy在他的工作场所附近散步。
来自John记忆的相关背景总结:Eddy Lin是John Lin的儿子。Eddy Lin一直在为他的课程创作音乐作品。Eddy Lin喜欢在思考或聆听音乐时在花园里散步。
John正在询问Eddy关于他的音乐创作项目。他会对Eddy说什么?
另一agent会把这个视为观察,生成对应反应。