准备好,此前曾轰动全体AI社区的斯坦福智能体小镇,现在已经正式开源!

项目地址:https://github.com/joonspk-research/generative_agents

在这个数字化的「西部天下」沙盒虚拟城镇中,有学校、医院、家庭。

25个AI智能体不仅能在这里上班、闲聊、social、交友,乃至还能谈恋爱,而且每个Agent都有自己的个性和背景故事。

斯坦福爆火小镇开源25个AI智能体恋爱交友|附保姆级教程

不过,它们对付自己生活在仿照中,可是绝不知情。

英伟达高等科学家Jim Fan评论道——

斯坦福智能体小镇是2023年最激动民气的AI Agent实验之一。
我们常常谈论单个大措辞模型的新兴能力,但是现在有了多个AI智能体,情形会更繁芜、更引人入胜。

一群AI,可以演绎出全体文明的蜕变进程。

现在,首先受到影响的,或许便是游戏领域。

总之,前方有无限的新可能!

网友:众游戏厂商们,你们懂我意思吧?

很多人相信,斯坦福的这篇论文,标志着AGI的开始。

可以想象,各种RPG和仿照类游戏都会用上这种技能。

网友们也非常激动,脑洞大开。

有想看神奇宝贝的,有想看行刺探案故事的,还有想看恋爱综艺的……

「我已经等不及看AI智能体之间的三角恋剧情了。

「《动物之森》中重复、沉闷的对话,所有村落民共有的一维人格系统,都太令人失落望了。
任天国赶紧学学吧!

「可以让《仿照人生》移植一下这个吗?」

如果能在《神界》这样的经典RPG游戏中,看到AI在NPC上运行,全体游戏体验都会被颠覆!

有人还畅想:这项技能在企业空间中也有很多运用处景,比如员工如何和不同的事情环境/流程变革互动。

当然,也有人表示,你们激动个啥?实在我们一贯都生活在这样的仿照中,只不过我们的天下有更多的算力罢了。

是的,如果我们把这个虚拟天下放大到足够多倍,我们肯定能看到自己。

Karpathy:AI智能体,便是下一个前沿

此前,前特斯拉总监、OpenAI大牛Karpathy就表示,如今AI智能体才是未来最前沿的方向。

OpenAI的团队最近5年把韶光花在了别的地方,但现在Karpathy相信,「Agent代表着AI的一种未来。

如果某篇论文提出演习大措辞模型的不同方法,OpenAI内部的Slack群组中就会有人说:「这个办法我两年半前考试测验过,没什么用。

然而每当有AI智能体从论文涌现,所有同事都会很感兴趣。

Karpathy曾将AutoGPT称为快速工程的下一个前沿

「西部天下」中的25个AI智能体

在美剧《西部天下》中,被预设了故事情节的机器人被投放到主题公园,像人类一样行事,然后被重置影象,在新一天再被投放进自己所在的核心故事情节。

而在今年4月,斯坦福和谷歌的研究者竟然构建出了一个虚拟小镇,让25个AI智能体在个中生存、从事繁芜行为,切实其实堪称是《西部天下》走进现实。

论文地址:https://arxiv.org/pdf/2304.03442.pdf

架构

为了天生智能体,研究者提出了一种全新架构,它扩展了大措辞模型,能够利用自然措辞存储Agent的经历。

随着韶光的推移,这些影象会被合成为更高等别的反射,智能体可以动态检索它们,来方案自己的行为。

终极,用户可以利用自然措辞和全镇的25个Agent都实现交互。

如上,天生式智能体的架构实现了一个「检索」功能。

这一功能将智能体确当前情形作为输入,并返回影象流的一个子集通报给措辞模型。

而检索功能有多种可能的实现办法,详细取决于智能体在决定如何行动时考虑的主要成分。

天生式智能体架构面临一个核心寻衅,便是如何管理大量必须保留的事宜和影象。

为理解决这个问题,架构的核心是影象流(memory stream),即一个记录智能体全部履历的数据库。

智能体可以从影象流中检索干系影象,这有助于它方案行动,做出精确反应,并且每次行动都会反馈记录到影象流中,以便递归地改进未来行动。

其余,研究还引入了第二种类型的影象——反思(reflection)。
反思是智能体根据最近经历天生的高等抽象思考。

在这项研究中,反思是周期性触发的过程,只有当智能体判断最近一系列事宜的主要性评分,累积超过设定阈值时,才会启动反思机制。

天生式智能体为了创建合理的方案,它们会自上而下递归天生更多的细节。

而这些方案最初只是粗略的描述了当日所要做的事情。

在实行方案的过程中,天生智能体会持续感知周围环境,并将感知到的不雅观察结果存储到影象流中。

通过利用不雅观察结果作为提示,让措辞模型决定智能体下一步辇儿为:连续实行当前方案,还是做出其他反应。

在实验评估中,研究职员对这一框架进行了掌握评估,以及端到真个评估。

掌握评估是为了理解智能体能否独立产生可信个体行为。
而端到端评估,是为了理解智能体的呈现能力以及稳定性。

比如,Isabella策划一个情人节party约请大家来。
12个智能体中,7个人还在考虑中(3个人有了别的操持,还有4个人没有想法)。

这一环节与人类相处模式很相似。

像真人一样交互

在这个名为Smallville的沙盒天下小镇中,区域会被标记。
根节点描述全体天下,子节点描述区域(房屋、咖啡馆、商店),叶节点描述工具(桌子、书架)。

智能体会记住一个子图,这个子图反响了他们所看到的天下的各个部分。

研究者编写了一段自然措辞,来描述每个智能体的身份,包括它们的职业、与其他智能体的关系,作为种子影象。

比如,智能体John Lin的种子影象便是这样的——

John Lin是一名药店店主,十分乐于助人,一贯在探求使客户更随意马虎得到药物的方法。

John Lin的妻子Mei Lin是大学教授,儿子Eddy Lin正在学习音乐理论,他们住在一起,John Lin非常爱他的家人。

John Lin认识隔壁的老夫妇Sam Moore和Jennifer Moore几年了,John Lin以为Sam Moore是一个善良的人。

John Lin和他的邻居山本百合子很熟。
John Lin知道他的邻居TamaraTaylor和Carmen Ortiz,但从未见过他们。

John Lin和Tom Moreno是药店同事,也是朋友,喜好一起谈论地方政治等等。

以下便是John Lin度过的一天清晨:6点醒来,开始刷牙、沐浴、吃早餐,在出门事情前,他会见一见自己的妻子Mei和儿子Eddy。

就这样,当仿照开始时,每个智能体都有属于自己的种子影象。

这些智能体相互之间会发生社会行为。
当他们把稳到彼此时,可能会进行对话。

随着韶光推移,这些智能体会形成新的关系,并且会记住自己与其他智能体的互动。

一个有趣的故事是,在仿照开始时,一个智能体的初始化设定是自己须要组织一个情人节派对。

随后发生的一系列事情,都可能存在失落败点,智能体可能不会连续坚持这个意图,或者会忘却见告他人,乃至可能忘了涌现。

幸运的是,在仿照中,情人节派对真实地发生了,许多智能体聚在了一起发生了有趣的互动。

保姆级教程

配置环境

在配置环境之前,首先须要天生一个包含OpenAI API密钥的utils.py文件,并下载必要的软件包。

步骤1. 天生 Utils 文件

在reverie/backend_server文件夹中(reverie.py所在的文件夹),新建一个utils.py文件,并将下面的内容复制粘贴到文件中:

# Copy and paste your OpenAI API Keyopenai_api_key = "<Your OpenAI API>"# Put your namekey_owner = "<Name>"maze_assets_loc = "../../environment/frontend_server/static_dirs/assets"env_matrix = f"{maze_assets_loc}/the_ville/matrix"env_visuals = f"{maze_assets_loc}/the_ville/visuals"fs_storage = "../../environment/frontend_server/storage"fs_temp_storage = "../../environment/frontend_server/temp_storage"collision_block_id = "32125"# Verbose debug = True

将 <Your OpenAI API> 更换为你的OpenAI API密钥,将 <name> 更换为你的姓名。

步骤 2. 安装requirements.txt

安装requirements.txt文件中列出的所有内容(强烈建议先设置一个虚拟环境)。

目前,团队已在Python 3.9.12上进行了测试。

运行仿照

要运行新的仿照,你须要同时启动两个做事器:环境做事器和智能体仿照做事器。

步骤 1. 启动环境做事器

由于环境是作为Django项目实现的,因此须要启动Django做事器。

为此,首先在命令行中导航到environment/frontend_server(manage.py所在的位置)。
然后运行以下命令:

python manage.py runserver

然后,在你喜好的浏览器中访问http://localhost:8000/。

如果看到「Your environment server is up and running」这个提示,意思便是做事器运行正常。
确保环境做事器在运行仿照时持续运行,因此请保持这个命令行标签打开。

(把稳:建议利用Chrome或Safari。
Firefox可能会涌现一些前端故障,但该当不会影响实际仿照。

步骤 2. 启动仿照做事器

打开另一个命令行窗口(你在步骤 1 中利用的仍在运行环境做事器,须要保持不动)。
导航到reverie/backend_server并运行reverie.py来启动仿照做事器:

python reverie.py

此时,会涌现一个命令行提示讯问以下内容:「Enter the name of the forked simulation: 」。

举个例子,现在我们要启动一个包含Isabella Rodriguez、Maria Lopez和Klaus Mueller这3个智能体的仿照,那么便是输入以下内容:

base_the_ville_isabella_maria_klaus

然后,提示将会讯问:「Enter the name of the new simulation: 」。

这时只须要随意输入一个名称来表示当前的仿照即可(例如「test-simulation」)。

test-simulation

保持仿照器做事器运行。
此阶段,它会显示以下提示:「Enter option」

步骤 3. 运行和保存仿照

在浏览器中访问http://localhost:8000/simulator_home,并保持标签打开。

现在你会看到小镇的舆图,以及舆图上生动的智能体列表,并且可以利用键盘箭头在舆图上移动。

要运行仿照,须要在提示「Enter option」的仿照做事器中输入以下命令:

run <step-count>

请把稳,须要将上述的 <step-count> 更换为一个整数,表示要仿照的游戏步数。

例如,如果要仿照100步游戏,就输入run 100。
个中,一个游戏步骤表示游戏中的10秒。

现在,仿照就会开始运行,你可以在浏览器中看到智能体在舆图上移动。

一旦运行完成,「Enter option」提示会再次涌现。
此时,你可以通过重新输入run命令并指定所需的游戏步数来连续仿照,或者输入exit退出但不保存,输入fin则是保存并退出。

下次运行仿照做事器时,只要供应仿照的名称就可以访问已保存的仿照。
这样,你就可以早年次离开的位置重新启动仿照。

Step 4. 重放仿照

只需运行环境做事器,并在浏览器中访问到以下地址,即可重放已运行的仿照:http://localhost:8000/replay/<simulation-name>/<starting-time-step>。

个中,须要将<simulation-name>更换为重放的仿照的名称,将<starting-time-step>更换开始重放的整数韶光步。

Step 5. 演示仿照

你可能会创造,重放中所有角色的Sprite看起来都是一样的。
这是由于重放功能紧张用于调试,并不优先考虑优化仿照文件夹的大小或视觉效果。

要精确演示带有角色Sprite的仿照,首先须要压缩仿照。
为此,请利用文本编辑器打开位于reverie目录中的compress_sim_storage.py文件。
然后,实行压缩函数,并将目标仿照的名称作为输入。
这样,仿照文件就会被压缩,从而可以进行演示。

启动演示,请在浏览器中打开以下地址:http://localhost:8000/demo/<simulation-name>/<starting-time-step>/<simulation-speed>。

把稳,<simulation-name>和<starting-time-step>与上述提到的含义相同。
<simulation-speed>可用于掌握演示速率,个中1表示最慢,5表示最快。

定制仿照

你有两种可选办法来自定义仿照。

方法1:编写并加载智能体历史

第一种是在仿照开始时初始化具有独特历史记录的智能体。

为此,你须要实行以下操作:1)利用个中一个基本仿照开始,2)编写和加载智能体历史记录。

步骤1. 启动基本仿照

存储库中包含两个基本仿照:base_the_ville_n25(25个智能体)和base_the_ville_isabella_maria_klaus(3个智能体)。
可以按照上述步骤加载个中一个基本仿照。

步骤2. 加载历史文件

然后,在提示输入「Enter option」时,须要利用以下命令加载智能体历史记录:

call -- load history the_ville/<history_file_name>.csv

个中,须要将<history_file_name>更换为现有历史文件的名称。

存储库中包含两个示例历史文件:agent_history_init_n25.csv(针对base_the_ville_n25)和agent_history_init_n3.csv(针对base_the_ville_isabella_maria_klaus)。
这些文件包含了每个智能体的内存记录列表。

步骤3. 进一步的定制

要通过编写自己的历史文件来定制初始化,请将文件放在以下文件夹中:environment/frontend_server/static_dirs/assets/the_ville。

自定义的历史文件的列格式必须与附带的示例历史文件同等。
因此,作者建议通过复制和粘贴存储库中已有的文件来开始该过程。

方法2:创建新的基本仿照

如果想要更深度地定制,就须要编写自己的基本仿照文件。

最直接的方法是复制和粘贴现有的基本仿照文件夹,然后根据自己的哀求进行重命名和编辑。

参考资料:

https://github.com/joonspk-research/generative_agents

https://twitter.com/DrJimFan/status/1689315683958652928