生成智能体,人类行为的交互模拟(2023+Generative Agents: Interactive Simulacra of Human Behavior)

贡献点:

1.提出了生成型智能体,认为人类行为的可信模拟,动态地取决于智能体不断变化的经验和环境

2.一种新颖的架构,使生成代理能够记忆,检索,反映,与其他代理交互,并通过动态发展的环境进行计划。该体系结构利用了大型语言模型的强大提示功能,并补充了这些功能,以支持更长期的代理一致性、管理动态进化记忆的能力,以及递归地产生更多代。

方法:

生成智能体,人类行为的交互模拟(2023+Generative Agents: Interactive Simulacra of Human Behavior)_第1张图片

整体结构:如上图,智能体感知(perceive,比如小明在花园散步、小红7点吃了早餐)环境,所有感知都被保存在智能体经验的综合记录中,称为记忆流(memory stream)。基于它们的感知,智能体检索(retrieve)相关的记忆(retrieved memories),然后使用这些检索到的记忆来确定一个行为(act,比如做早餐)。这些检索到的记忆也被用来形成长期计划(plan,比如明天的计划),并产生更高层次的反思(reflect),这些都被输入到记忆流中以备将来使用。act、plan和reflect是通过提示大语言模型获得的结果。

1.智能体的初始化

通过撰写了一段自然语言描述来描述每个代理的身份,包括他们的职业和与其他代理的关系,作为初始记忆(seed memories,种子记忆)。比如对智能体John Lin的描述如下图。每个分号分隔的短语在模拟开始时作为记忆输入到代理的初始内存中。

生成智能体,人类行为的交互模拟(2023+Generative Agents: Interactive Simulacra of Human Behavior)_第2张图片

2.感知 

感知就是代理观察到的行为。常见的感知包括代理自己执行的行为,或者代理感知到由其他代理或非代理对象执行的行为。例如,在咖啡店工作的伊莎贝拉·罗德里格斯,随着时间的推移,可能会积累以下感知:(1)伊莎贝拉·罗德里格斯正在摆糕点,(2)玛丽亚·洛佩兹一边喝咖啡一边为化学考试复习,(3)伊莎贝拉·罗德里格斯和玛丽亚·洛佩兹正在霍布斯咖啡馆谈论计划一个情人节聚会,(4)冰箱是空的。

2.记忆流

记忆流保存了代理经验(记忆)的全面记录。它是一个内存对象列表,其中每个对象包含一个自然语言描述、一个创建时间戳和一个最近的访问时间戳。记忆流的最基本元素是观察,这是一个由代理直接感知的事件。智能体的感知、反思、计划和行为都作为记忆保存在记忆流中,供以后的反思、计划和行为提供推理的依据。

3.检索相关记忆

问题:智能体的反思、计划和行为由过去一系列经验(记忆)通过大语言模型推理得到的,但是不可能使用所有的记忆,因为这些记忆远远超过了应该在大语言模型提示中描述内容的长度,并且一些无关或者相反的记忆可能导致大语言模型推理能力的降低。因此本文将智能体的当前状态和从内存流中检索一部分记忆和传递给大语言模型进行推理。

记忆检索有三部分组成:近因性(Recency)、重要性(Importance)、相关性(Relevance)。

近因性给最近访问过的记忆对象分配了更高的分数,所以最近或今天早上发生的事件很可能留在代理的注意范围内。本文将近因性视为沙盒游戏小时数的指数衰减函数,衰减因子是0.99。

重要性区分了普通记忆和核心记忆,通过给那些代理认为重要的记忆对象分配更高的分数。例如,像在自己房间吃早餐这样的平凡事件的重要性得分很低,而与另一半分手的重要性得分很高。同样,重要性分数也有许多可能的实现方式,本文直接通过大语言模型提示方法输出整数分数。一个例子的提示如下图所示。这个提示返回一个整数值,2表示“清理房间”,8表示“邀请你的暗恋对象出去约会”。重要性评分是在创建内存对象时生成的。

生成智能体,人类行为的交互模拟(2023+Generative Agents: Interactive Simulacra of Human Behavior)_第3张图片

 相关性为与当前情况相关的记忆对象分配更高的分数。什么是相关的取决于“与什么相关?”,因此本文将查询记忆的相关性作为条件。例如,如果查询是一个学生正在与同学讨论化学考试要学什么,那么关于早餐的记忆对象应该具有低相关性,而关于老师和作业的记忆对象应该具有高相关性。在本文的实现中,使用大语言模型来生成每个记忆的文本描述的嵌入向量,然后将相关性计算为记忆嵌入向量与查询记忆嵌入向量之间的余弦相似度。

为了计算最终的检索分数,通过最小-最大缩放将近因性、相关性和重要性分数归一化到[0,1]的范围,然后对三个值进行加权求和,选择得分最高的记忆作为相关记忆。

一个记忆检索的例子如下图所示:

生成智能体,人类行为的交互模拟(2023+Generative Agents: Interactive Simulacra of Human Behavior)_第4张图片

 4.反思

问题:当生成智能体只有原始的观察性记忆时,很难进行概括或推断。考虑这样一个场景:用户问克劳斯·穆勒:“如果你必须在你认识的人中选择一个人共度一小时,你会选择谁?”由于只能观察记忆,智能体只需选择和克劳斯在一起的人交往最频繁的是他大学宿舍的邻居沃尔夫冈。但是,沃尔夫冈和克劳斯只是偶尔见面,并没有深入的互动。更理想的反应需要agent从Klaus花了几个小时在研究项目上的记忆中归纳出Klaus对研究充满热情的更高层次的反映,并且同样认识到Maria在自己的研究中付出了努力(尽管是在不同的领域),从而得出他们有共同的兴趣。在接下来的剧情中,当克劳斯被问到要和谁共度时光时,克劳斯选择了玛丽亚而不是沃尔夫冈。

方法:反思是由主体产生的更高层次、更抽象的思想。因为反思也是一种记忆,所以当检索发生时,它们与其他观察结果(记忆)一起包含。反思是周期性产生的;在本文的实现中,当代理感知到的最新事件的重要性得分总和超过某个阈值时,智能体就会。在实践中,智能体每天大约反思两到三次。

反思的第一步是让智能体确定要反思什么,通过确定根据智能体最近的经历可以提出的问题。本文用智能体记忆流中最近的100条记录查询大型语言模型(例如,“克劳斯·穆勒正在阅读一本关于中产阶级化的书”,“克劳斯·穆勒正在与图书管理员谈论他的研究项目”,“图书馆的桌子目前无人使用”),并提示语言模型,“仅根据上述信息,我们可以回答关于语句中主题的3个最突出的高级问题是什么?”模型的反应产生了候选问题:例如,克劳斯·穆勒对什么话题感兴趣?克劳斯·穆勒和玛丽亚·洛佩兹之间的关系是什么?然后使用这些生成的问题作为检索的查询,并收集每个问题的相关记忆(包括其他反思),使用这些记忆提示语言模型提取见解,并引用作为见解证据的特定记录,这些见解就是反思的内容。

反思明确地允许智能体不仅对自己的观察进行反思,而且对其他智能体的反思进行反思。

一个反思的例子如下图所示:

生成智能体,人类行为的交互模拟(2023+Generative Agents: Interactive Simulacra of Human Behavior)_第5张图片

 

5.计划:

困难:虽然大型语言模型可以根据情境信息生成合理的行为(例如[45,79]),但智能体需要在更长的时间范围内进行规划,以确保其行动序列是连贯和可信的。如果我们用克劳斯的背景来提示一个语言模型,描述时间,并问他在给定的时刻应该采取什么行动,克劳斯会在中午12点吃午饭,但在中午12点半和下午1点又吃了一次,尽管他已经吃了两次午饭。优化当前的可信度会牺牲长期的可信度。为了克服这个问题,计划是必不可少的。有了下面描述的方法,克劳斯的下午计划就不那么贪吃了:他中午12点在霍布斯咖啡馆吃午饭,一边看书,下午1点在学校图书馆写研究论文,下午3点在公园散步休息一下。

计划描述了智能体未来的行动序列,并帮助保持智能体的行为随着时间的推移而一致。计划包括地点、开始时间和持续时间。例如,克劳斯·穆勒,他专心于他的研究工作,而截止日期即将到来,他可能会选择在他的办公桌前起草他的研究论文。例如,计划中的一个条目可能会这样写:从2023年2月12日上午9点开始,在橡树山大学宿舍(Oak Hill College Dorm)呆180分钟:克劳斯·穆勒(Klaus Mueller)的房间:办公桌,阅读并为研究论文做笔记。与反思一样,计划存储在记忆流中,并包含在检索过程中。这允许代理在决定如何行动时综合考虑观察、反思和计划。如果需要,代理商可以在中途改变他们的计划。

对于一个艺术家经纪人来说,在药店柜台坐上四个小时一动不动地计划绘画是不现实和无趣的。一个更理想的计划是让经纪人花必要的时间在其家庭工作室的四小时内收集材料,混合油漆,休息和清理。为了创建这样的计划,我们的方法从自顶向下开始,然后递归地生成更多的细节。第一步是制定一个计划,大致勾勒出当天的议程。为了创建初始计划,我们用智能体的概要描述(例如,名字、特征和他们最近经历的总结)和他们前一天的总结来提示大语言模型。一个进行计划的例子如下所示:

生成智能体,人类行为的交互模拟(2023+Generative Agents: Interactive Simulacra of Human Behavior)_第6张图片

生成智能体,人类行为的交互模拟(2023+Generative Agents: Interactive Simulacra of Human Behavior)_第7张图片

这将生成代理人一天计划的草图,分为五到八个部分:“1)早上8点起床并完成早上的例行公事,2)上午10点开始去橡树山学院上课,[…]5)从下午1点到5点创作他的新音乐作品,6)下午5点半吃晚饭,7)晚上11点前完成学校作业上床睡觉。”

 代理将这个计划保存在记忆流中,然后递归地分解它以创建更细粒度的动作,首先是一个小时长的动作块——eddy的计划是在下午1:00到5:00创作他的新音乐作品,现在变成了1:00 pm:开始为他的音乐创作集脑讨论一些想法……下午4点:在复习和润色他的作文之前,休息一下,给自己补充一下创作能量。然后我们再递归地把它分解成5-15分钟的小块:例如,下午4点:吃点零食,比如一块水果,一个格兰诺拉麦片棒,或者一些坚果。下午4:05:绕着他的工作空间走一小会儿…[04:50]花几分钟清理一下他的工作场所。可以调整此过程以匹配所需的粒度。

6.行为

生成智能体在一个动作循环中运行,在每个时间步,它们感知周围的世界,这些感知到的观察结果存储在它们的记忆流中。我们用这些观察提示语言模型来决定智能体是应该继续他们现有的计划,还是做出反应。例如,站在画架前画画可能会引起对画架的观察,但这不太可能引起反应。然而,如果艾迪的父亲约翰记录说他看到艾迪在房子的花园里散步,结果就不同了。

上下文摘要是通过两个提示生成的,这两个提示通过“[观察者]与[被观察实体]的关系是什么?”和“[被观察实体]为[被观察实体的动作状态]”,并将它们的答案汇总在一起。输出表明约翰可以考虑询问艾迪关于他的音乐创作项目。然后,我们从反应发生的时间开始重新生成代理的现有计划。

7.对话

我们通过调节智能体对彼此的记忆来生成它们的对话。例如,当John开始与Eddy对话时,我们通过John对Eddy的记忆总结和他决定向Eddy询问他的作文项目时的预期反应来生成John的第一句话。

 

你可能感兴趣的:(论文,AI,agent,人工智能)