上周,一款名为“AI Town”的应用程序在全球上市,展示了在模拟城镇环境中生活和聊天的自主代理人。这款应用程序基于斯坦福大学研究人员今年早些时候发表的一篇论文而创建,迅速引起了科技爱好者对于宇宙创造的各种理论。这款名为AI Town的完全开源应用程序,旨在可扩展并供任何人使用,并展示了该论文所隐含的无限可能性。该应用程序允许您创建一个模拟城市,其中的角色具有独特的身份,彼此进行独特的对话并建立基于其经验的关系。您可以自己启动该应用程序、修改代理人身份,并观察NPC进行极具自我意识的对话。
AI Town应用程序介绍
AI Town是一款模拟城镇应用程序,旨在展示自主代理人在现实对话场景中的行为。它基于深度学习技术,可以通过创造代表不同身份的角色并观察他们彼此的互动来模拟真实世界的情境。这款应用程序使用了Convex平台,这是一个具有卓越协同作用的平台,可实现实时能力。它具有高度灵活性,可以根据应用程序的需求即时显示状态变化,无需刷新屏幕。
AI Town的结构和组件
AI Town的主要结构和组件包括代理人、引擎、日志以及代理人记忆。以下将对这些组件进行详细介绍。
代理人
AI Town的核心组件是代理人。代理人可以进行对话或独自活动,他们是应用程序中的主要角色。每个代理人都具有独特的身份和特征,可以根据其记忆和过去的经历来进行对话和互动。
引擎
引擎是控制AI Town中代理人行为的组件。当代理人完成任务时,引擎会唤醒它们并安排一批代理人进行移动。引擎还负责安排代理人进行对话,并根据代理人的记忆和关系来决定对话的内容和调子。
日志
日志是一个追踪代理人活动的附加组件,它记录每个代理人的移动轨迹、对话消息以及代理人之间的位置关系。日志对于回顾对话历史和创建代理人记忆非常重要。
代理人记忆
代理人记忆是一个重要的组件,它们在代理人完成对话或自我反思后创建和存储。代理人记忆涉及创建相关嵌入和向量数据库,以便在以后的对话中做参照。这些记忆可以影响未来对话的内容和情感。
对话初始化和协调
AI Town中的对话是在引擎驱动下初始化并协调进行的。每次引擎将两个代理人安排在地图上碰面时,对话就会开始。主要由handle agent interaction函数处理这项逻辑,该函数设置参数,然后进入对话循环,让代理人彼此来回发送消息。在建立对话对象时,需要考虑到代理人之间的关系以及经历的对话内容,以确定对话的调子。
对话循环
对话循环是AI Town中对话的核心组件。在每次循环中,代理人通过交换消息来进行对话。在对话的开头,首先进行一些介绍性的提示,然后进入对话循环。在循环过程中,代理人会回顾他们之前的对话内容,同意对话的顺序,然后开始对话。对话循环中还涉及到调用openAi和传递相关信息给对话的函数。
代理人记忆
代理人记忆是AI Town中的一个重要组件。在高层次上,对话循环中的代理人会提取和过滤所有记忆,只保留与该对话相关的记忆。这些记忆在更深层次中起到了重要作用,包括影响对话的内容、情感等方面。代理人记忆是根据代理人之间的对话和互动创建的。
LLM提示的构建
LLM提示构建是对话循环中的重要逻辑。在每次对话循环中,代理人根据之前的对话记忆来构建LLM提示,以引导对话中的回应。过滤选择与当前对话相关的记忆向量,并将其插入到提示中,以获得有意义的回应。LLM提示的构建根据代理人记忆和上下文信息进行。
系统运作流程回顾
让我们全面回顾一下AI Town的运作流程。当我们启动AI Town时,首先初始化城镇并创建代理人及其身份。然后,引擎唤醒并寻找可以安排的所有代理人。对于这种情况,所有代理人都可用。引擎会对代理人进行安排,让他们行走,并在日志中记录起点和终点坐标。对于那些没有预测碰撞的单独代理人,他们会进行自我反思,并基于以前的经历创建新的记忆。如果引擎注意到两个代理人之间存在可能会碰撞的路径,它们会被分组在一起,并准备好有关代理人身份和记忆的信息,然后初始化对话。然后创建对话对象,并以一种特定的方式开始对话。接下来,对话循环迭代进行,每次迭代都检查向量数据库中的嵌入,以获取与代理人记忆相关的信息。在对话的过程中,所有这些信息都被传递给LLM提示。一段时间后,代理人将结束对话,并创建一个基于对话的记忆嵌入,以便在将来的对话中使用。代理人将自己标记为可安排的,引擎再次启动并重复整个流程。代理人的记忆会随着时间的推移而演变,而城镇的上下文也会相应变化。
感谢和链接
在描述中,我提供了指向AI Town应用程序的GitHub存储库和相关文件的链接。最后,我要特别感谢a16z让我们参与此项目。我们期待看到每个人对AI Town的独特理解和应用,并希望这是进入后端代码的有用第一步。