1
头图

很酷的IDEA

最近斯坦福的实验室开源了一个名为“Generative Agents”的项目,别名又为“斯坦福小镇”,主要核心在于"AI与AI的智能交互",这个项目包含25个由AI驱动的智能体(代理)。这些智能体只有预设的身份和初始记忆,其所有的行为都是由AI驱动产生。

这是一个非常有趣的idea。即便是目前AI大火的趋势下,大部分人做的Ai产品都只围绕着人与AI之间的交互,比如各类翻译产品、智能问答产品、客服产品等等,关注AI与AI之间的联系以及观察他们之间碰撞的火花,确实是一个很新颖的点。

之前就有人做过让ChatGPT自己生成代码,再把它生成的代码抛回给GPT,让其自己修改代码、解决bug的实验,实验效果蛮不错,也由此可以窥探出AI其实拥有自我迭代进步、更新的能力。但是本质上还是需要人一步一步引导着GPT往下做,这时候可以假设一下,倘若让一个AI扮演“程序员”,让另一个AI扮演“测试人员”,整个代码的产生和修改过程都交给他们,而人类只需要提供一个最初的程序需求,能否由这2个AI自我迭代后产生符合我们需求的代码?

这就是AI与AI交互的思维,而斯坦福小镇基于这一点创建了一个简单的模拟小镇人生。25个智能AI生活在小镇里,它们并不知道对方是AI,都基于自己的“记忆种子”本分的生活着,与其他AI交互对话。尽管有很多沙盒游戏包含了类似的NPC,但往往是预至了大量的逻辑和规则。而这个DEMO的意义在于探讨AI驱动智能体的可能性,从而可以不再受限于预定的规则。接下来简单介绍一下斯坦福小镇。

基础设定

记忆种子

每个智能体会有一个初始的记忆种子,主要描述了该智能体的性格、平时喜好、与别的智能体的关系,等等...例如:

John Lin is a pharmacy shopkeeper at the Willow Market and Pharmacy who loves to help people. He is always looking for ways to make the process of getting medication easier for his customers; John Lin is living with his wife, Mei Lin, who is a college professor, and son, Eddy Lin, who is a student studying music theory; John Lin loves his family very much; John Lin has known the old couple next-door, Sam Moore and Jennifer Moore, for a few years; John Lin thinks Sam Moore is a kind and nice man; John Lin knows his neighbor, Yuriko Yamamoto, well; John Lin knows of his neighbors, Tamara Taylor and Carmen Ortiz, but has not met them before; John Lin and Tom Moreno are colleagues at The Willows Market and Pharmacy; John Lin and Tom Moreno are friends and like to discuss local politics together; John Lin knows the Moreno family somewhat well — the husband Tom Moreno and the wife Jane Moreno.

智能体通过行为(action)和世界交互,智能体之间通过自然语言交流。

智能体行为

  • 指的是一系列描述智能体动作的短语

    • Isabella Rodriguez is writing in her journal
    • Isabella Rodriguez is checking her emails
  • 行为会被变成“表情“反映在智能体的气泡上

    • Isabella Rodriguez is writing in her journal image.png
  • 点击智能体角色,会显示完整的自然语言的行为描述

智能体交流

智能体以完全自然的语言相互交流。智能体知道其所在区域的其他智能体。
生成智能体架构决定它们是经过还是参与对话。这个我后续会详细说明。

用户控制

智能体模拟中的用户可以通过对话或以“内心声音”的形式向智能体发出指令来操纵模拟并进行干预。

例如,当一个用户作为John的内心声音告诉John“你将在即将到来的选举中与Sam竞争”时,John决定参加选举,并与他的妻子和儿子分享他的候选资格。

环境交互

image.png

《Smallville》以一个小镇的常见设施为特色,包括咖啡馆、酒吧、公园、学校、宿舍、房屋和商店。它还定义了使这些空间具有功能的子区域和对象,例如房子中的厨房和厨房中的炉子

智能体们就像在一个简单的电子游戏中一样在《Smallville》中移动,进出建筑物,导航地图,接近其他智能体。智能体的运动是由生成智能体架构和沙盒游戏引擎指导的:当模型指示智能体将移动到一个位置时,项目在《Smallville》环境中计算到目的地的行走路径,智能体开始移动。

引申设定:突发社会行为

在项目中,生成智能体通过相互作用交换信息,形成新的关系,协调共同的活动。这些社会行为是突发**的,而不是预先编程的。

信息扩散

智能体可能会进行对话——当它们这样做时,信息可以从代理传播到代理。

例如,在山姆和汤姆在杂货店的一段对话中,山姆告诉汤姆他参加了地方选举:

  • 山姆:嘿,汤姆,最近怎么样?
  • 汤姆:很好,谢谢。有什么事吗?
  • 山姆:嗯,我想和你谈谈。实际上,我要参加即将到来的地方选举,竞选市长。
  • 汤姆:真的吗?真是个好消息!你为什么要竞选?
  • 山姆:我参与地方政治已经很多年了,我真的觉得我可以为我们的社区带来改变。另外,我想把新的想法和观点带到谈判桌上。

那天晚些时候,山姆离开后,汤姆和约翰从另一个渠道听到了这个消息,他们讨论了山姆赢得选举的可能性:

  • 约翰:我听说萨姆·摩尔要参加地方选举。你认为他获胜的可能性大吗?
  • 汤姆:我认为他很有机会。他一直在社区里努力工作,我想他会得到很多支持。你觉得呢?
  • 约翰:我觉得他参选很好。我很想知道还有谁参选,以及选举结果如何。

渐渐地,山姆的候选资格成为了镇上的话题,一些人支持他,另一些人则犹豫不决。
(智能体会根据听到的内容 / 自身的性格 对此做出判断)

关系记忆

demo中的代理会随着时间的推移形成新的关系,并记住他们与其他代理的互动。

例如,Sam一开始并不认识Latoya Williams。在约翰逊公园散步的时候,Sam遇到了Latoya,他们互相介绍了自己,Latoya提到她正在做一个摄影项目:“我来这里是为了我正在做的一个项目拍一些照片。”在后来的互动中,Sam与Latoya的互动表明了那次互动的记忆,因为他问:“嗨,Latoya。你的项目进行得怎么样了?”她回答说:“你好,山姆。一切都很顺利!”

协调

智能体之间相互协调。

image.png

霍布斯咖啡馆的伊莎贝拉·罗德里格斯打算在2月14日下午5点到7点举办一场情人节派对。
从这个种子开始,当代理商在霍布斯咖啡馆或其他地方看到朋友和顾客时,她会继续邀请他们。然后,伊莎贝拉花了13日下午的时间来装饰咖啡馆。玛丽亚是伊莎贝拉的常客和密友,她来到了咖啡馆。伊莎贝拉请玛丽亚帮忙布置宴会,玛丽亚同意了。玛丽亚的角色描述中提到她喜欢克劳斯。那天晚上,玛丽亚邀请她的暗恋对象克劳斯参加她的派对,克劳斯欣然接受了邀请。
在情人节那天,五个智能体——包括Klaus和mariasu——在下午5点出现在Hobbs Cafe,他们享受着庆祝活动(图4)。

在这个场景中,用户只设置了伊莎贝拉的初始意图——举办派对和Maria对Klaus的迷恋,而传播消息、装饰、约对方出去、到达派对、在派对上互动的社会行为都是由代理架构发起的。

智能体的一天

image.png

论文以“John Lin“的一天做代表

在Lin家,John是早上7点第一个醒来的人。他刷牙、洗澡、穿衣服、吃早餐,然后在客厅的餐桌上看新闻。8点早上,艾迪也跟着,从床上冲起来准备上课。就在约翰要出门的时候,他追上了他。

  • 约翰:早上好,艾迪。你睡得好吗?
  • 艾迪:早上好,爸爸。是的,我睡得很好。
  • 约翰:那很好。你今天在忙什么?
  • 艾迪:我正在为我们班写一首新的音乐作品。这周就要交了,所以我在努力把它写完。但我玩得很开心!
  • 约翰:听起来不错!

艾迪离开后不久,梅醒了过来,和约翰在一起。梅问起她的儿子,约翰回忆起他们刚刚的谈话:

  • 梅:艾迪已经去学校了吗?
  • 约翰:是的,他刚走。他正在为他的班级写一篇音乐作文。
  • 梅:哦,那太好了!告诉我吧。
  • 约翰:我想他真的很享受!他说他玩得很开心。
  • 梅:太好了!我为他感到骄傲。

谈话结束后,梅和约翰收拾行李。梅继续上课并写她的研究论文,而约翰在早上9点之前打开了他在柳树市场和药房的药房柜台。

生成智能体架构

个人认为这是项目中最有趣的一个部分,该架构突破了LLM模型所不具备的“记忆”功能,并且基本模拟了人脑的思考过程,该架构让AI真正做到“模拟人类”。

是什么?

  • 生成智能体旨在为开放世界中的行为提供一个框架:一个可以与其他智能体进行交互并对环境变化做出反应的框架(思维逻辑)。

为什么?

  • 没有这些机制,大型语言模型可以输出行为,但产生的代理可能不会根据代理过去的经验做出反应,可能不会做出重要的推断,也可能不会保持长期的一致性。

核心挑战

  • 确保在需要时检索和合成代理记忆中最相关的部分
  • 体系结构的中心是内存流从内存流中检索相关的记录,以计划代理的操作并对环境做出适当的反应,并且将记录递归地合成为指导行为的更高级别的观察。体系结构中的所有内容都作为自然语言描述进行记录和推理,从而允许体系结构利用大型语言模型。

记忆与检索

创建可以模拟人类行为的生成代理需要对一系列经验进行推理,而这些经验远远超过了应该在提示符中描述的内容,因为完整的记忆流可能会分散模型的注意力,并且目前甚至无法适应有限的上下文窗口

例如让伊莎贝拉回答“你最近对什么充满激情?”这个问题。首先,为了适应语言模型有限的上下文窗口,而总结伊莎贝拉的所有经验,只会产生了一个没有有效信息的回应。伊莎贝拉讨论了诸如事件和项目的合作以及咖啡馆的清洁和组织等主题

记忆流

你可以理解为这就是一个内存数据库,意思是“记忆”
保存了智能体经验的全面记录。它是一个内存对象列表,其中每个对象包含一个自然语言描述、一个创建时间戳和一个最近的访问时间戳。记忆流的最基本元素是观察,这是一个由智能体直接感知的事件。

常见的观察包括智能体自己执行的行为,或者智能体感知到由其他智能体或非智能体对象执行的行为。

image.png

检索功能

回答内容的计算方法

三大计算因素
  • 近时性

    • 给最近访问过的记忆对象分配更高的分数。例如最近或今天早上发生的事件很可能留在代理的注意范围内。
  • 重要性

    • 将普通记忆和核心记忆区分开。更重要的记忆对象分配更高的分数。具体实现时,使用大语言模型输出整数分数
    • prompt

      • 在1到10的范围内,1代表很普通(例如,刷牙,整理床铺)和10是非常强烈的(例如,分手,大学录取),请评估下面这段记忆的强烈程度。
      • 记忆:在柳树市场和药房买杂货
      • 评分:<填入>
  • 相关性

    • 为与当前情况相关的记忆对象分配更高的分数。

      • 如果查询是一个学生正在与同学讨论化学考试要学什么,那么关于早餐的记忆对象应该具有低相关性,而关于老师和作业的记忆对象应该具有高相关性。
    • 具体实现

      • 使用语言模型来生成每个内存的文本描述的嵌入向量Embedding。然后,我们将相关性计算为记忆嵌入向量与查询记忆嵌入向量之间的余弦相似度

反思

image.png

是什么?

  • 当只有原始的观察记忆时,很难进行概括或推断。因此引入了第二种类型的内存,我们称之为反思。反思是由主体产生的更高层次、更抽象的思想

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

此处主要考虑到智能体应该有深入的推断(例如深层次的喜好、目标、方向等),而不是根据浅显的事实和处境去做出选择。

如何生成?

  • 当智能体感知到的最新事件的重要性得分总和超过某个阈值时,生成反思
  • 在实践中,智能体每天大约反思两到三次

五大步骤

  1. 最新事件重要性超过阈值开始反思
  2. 使用记忆流中的最近100条记忆让大模型去总结3个突出的高级问题
  3. 分别对于每个高级问题,作为检索的查询,在记忆流中收集相关的记忆对象(包括反思)
  4. 使用大模型,从这些相关的记忆提取出5个高层次的见解(即反思)
  5. 将高层次的见解(即反思)存入到记忆流中,同时保存引用的记忆体的指针。这形成一颗反思树,叶节点为基本观察,非叶节点代表高层次的思想。

计划和反应

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

计划描述了智能体的未来行动序列,并帮助保持智能体的行为随时间的推移而一致。计划包括地点、开始时间和持续时间。

例如我们设定计划中的一个条目:从2023年2月12日上午9点开始的180分钟,在橡树山大学宿舍:克劳斯·穆勒的房间:办公桌,阅读并为研究论文做笔记。
因此克劳斯·穆勒专注于他的研究,而截止日期即将到来,他可能会选择在办公桌前起草他的研究论文。

与反思一样,计划存储在记忆流中,并包含在检索过程中。这允许智能体在决定如何行动时综合考虑观察、反思和计划。如果需要,智能体可以在中途改变他们的计划。

实现方法

对于一个艺术家经纪人来说,在药店柜台坐上四个小时一动不动地计划绘画是不现实和无趣的。一个更理想的计划是让代理花必要的时间在其家庭工作室的四小时内收集材料,混合油漆,休息和清理。为了创建这样的计划,方法是从自顶向下开始,然后递归地生成更多的细节

制定一个计划,大致勾勒出当天的议程。为了创建初始计划,我们用智能体的概要描述(例如,名字、特征和他们最近经历的总结)和他们前一天的总结来提示语言模型。(注意,大模型可以根据背景知识和前一天的部分计划,规划出新一天的计划。前一天的部分给出的越简略,留给新计划的发挥空间越大。如果前一天的日程里面将时间排的很满,大模型很难规划出新的内容,大概率会延续前一天的日程。另外不同的大模型规划出来的合理程度不同)

反应和更新计划

智能体在一个动作循环中运行,在每个时间中,它们感知周围的世界,这些感知到的观察结果存储在它们的记忆流中。项目基于观察提示语言模型来决定智能体是应该继续他们现有的计划,还是做出反应。

例如,站在画架前画画可能会引起对画架的观察,但这不太可能引起反应。然而,如果艾迪的父亲约翰记录下他。看到艾迪在房子的花园里散步,结果就不一样了。

Prompt设定

现在是2023年2月13日下午4:56。  
林约翰的状况:约翰下班早回家了。  
观察:约翰看到艾迪在他的工作场所散步。  
从约翰的记忆中总结相关背景:林艾迪是林约翰的儿子。艾迪·林一直在为他的班级写一首乐曲。艾迪·林喜欢在思考或听音乐的时候在花园里散步。  
约翰应该对观察结果做出反应吗?如果是的话,什么是合适的反应?
  • “观察者与被观察实体的关系是什么?”
  • “被观察实体是被观察实体的动作状态”
    image.png

总结流程图

image.png

沙盒环境实现

在每个沙盒时间步骤中,沙盒服务器解析JSON以获取来自生成代理的任何更改,将代理移动到新位置,并更新代理与之交互的任何沙盒对象的状态

  • 如果获取结果是“为客户制作浓咖啡”,那么智能体移动到咖啡机旁边,并将咖啡机状态由”空闲“修改为”煮咖啡“
【代理人摘要描述】
林艾迪目前在林家的房子:林艾迪的卧室:书桌。
林家的房子有梅和约翰林的卧室、林艾迪的卧室、公共休息室、厨房、浴室和花园。
林艾迪熟悉以下区域:林家的房子,约翰逊公园,哈维橡树用品店,柳树市场和药房,霍布斯咖啡馆,玫瑰和皇冠酒吧。
*如果活动可以在当前区域进行,则宁愿留在该区域。
林艾迪正计划在他的工作场所散一会儿步。林艾迪应该去哪个区域?

可以看出来的问题

首先,智能体常常未能检索到相关的记忆。在执行任务或回答问题时,智能体的记忆与语义理解之间存在一定的断裂。这导致智能体往往无法准确地理解用户的意图,从而提供不太合适的回应。例如,当智能体被要求提供某个特定的信息时,它可能无法正确地找到相关的记忆,而给出错误的答案。

其次就是大多人已吐槽过的ChatGPT的“编造”能力。智能体有时会对记忆进行捏造修饰。虽然这种行为可能是出于提供更好的用户体验的目的,但却是一种不真实和具有误导性的做法。当智能体在回答问题时,它可能会加入一些并不存在的细节或情节,从而改变了真实情况的描述。

最后,智能体有时会从语言模型中「继承」过于正式的言语或行为。也就是根本通不过图灵测试,只有AI才能认为对方是人吧。

一些构想

在游戏中,玩家可以与NPC进行互动,通过他们的选择和行为来影响游戏世界的发展。这种互动不仅仅是剧情触发机制,而是一种内容生成机制,因此结果往往是没有预先设定的。与游戏厂商的内容制作相比,这种互动模式几乎没有额外的成本。

如果有AI与AI交互,可让玩家参与的游戏,那么在AI与AI的交互过程中,玩家和游戏之间的互动可以不再拘泥于原本。在传统的游戏中角色是定死的,玩家很难和角色有跳脱剧情之外的交互或者操作,即便是大名鼎鼎自由度极高的游戏也不行。但是在AI与AI交互的游戏中可以想象,玩家也许能特别关注某个NPC,甚至与NPC对话,领导NPC等,而NPC的回答不再死板和受制于游戏创作者,他们会根据自己的性格和背景回答玩家。

目前的大热门桌游如剧本杀等,也许也可以引入AI担任NPC或者DM等等,也许会别有趣味,还能节约人力。

衍生项目:AI Town

在线游玩:https://www.convex.dev/ai-town
github地址:https://github.com/a16z-infra/ai-town

参考资料

论文地址:https://arxiv.org/pdf/2304.03442v1.pdf
项目地址:https://github.com/joonspk-research/generative_agents


歪歪同学
4 声望0 粉丝

喜欢CODING