零分Trader

探索@project_89:全新高性能模块化Agent Framework在游戏开发中的应用与优势

作者头像
分析师熊大 本文作者

2025-1-27 阅读 130 约 22分钟读完

评论0

首先,@project_89使用一种新的方式设计代理框架。这是游戏开发的高性能代理框架。与当前使用的代理框架相比,它具有更好的性能。

本文已经写了很长时间,试图让每个人都比传统的代理框架了解该框架在体系结构中的升级。它在之前和之后进行了多次更改。在技​​术之后,我无法进一步流行。如果您对文章的改进有任何建议,请发表评论。

开发人员背景

这是一个技术博客,所以让我们看一下这个创始人的技术实力:

创始人在进行Project89之前进行了该项目:它也是使用AI进行编程的软件。同时,Shaw也是该项目的第四个开发人员。该项目也可以在Shaw的简历中看到。

左上方:Project89的创始人,右下:Lalaune是AI16Z的Shaw

今天,我们主要在Project89中引入高性能代理框架:

1。为什么使用EC设计代理框架

从游戏领域的角度来看,ECS架构当前采用的游戏是:区块链游戏:泥浆,道场传统游戏:守望先锋,星际公民等。当前的主流游戏引擎也在朝着ECS的方向发展,例如Unity。

什么是ECS?

ECS(实体 - 组件系统)是一种在游戏开发和仿真系统中常用的架构模式。它将数据从逻辑中完全分开,以有效地管理大规模可扩展方案的各种实体和行为:

实体•它只是一个ID(数字或字符串),没有任何数据或逻辑。 •可以根据需要安装不同的组件,以赋予其各种属性或能力。

组件•它用于存储特定的数据或实体状态。

系统(系统)•负责执行与某些组件相关的逻辑。

以代理操作的示例了解此系统:每个代理都被视为ARGO中的实体,可以注册不同的组件。例如,在下图中,我们的代理具有以下四个组件:代理组件:它主要存储基本信息,例如代理名称,模型名称等:内存组件,主要用于存储可感知的外部数据:存储器:内存数据主要用于存储代理实体,类似内容等。操作组件:主要存储要执行的操作数据。

系统的工作流程:

例如,在这个游戏中,如果您认为您面前有武器,那么这将调用感知系统的执行功能以在代理实体的感知组件中执行数据;

然后触发内存系统,并同时调用感知组件和内存组件,然后通过内存继续从内存到数据库的数据;

然后,操作系统调用内存组件和操作组件以从内存中获取来自周围环境的信息,然后最终执行相应的操作;

然后,我们获得了由更新代理实体更新的组件数据,因此我们可以看到哪个系统主要负责定义哪个组件执行相应的处理逻辑。

显然,在Project89中,它是世界上各种类型的代理商。例如,某些代理人不仅具有上述基本能力,而且具有制定计划的能力。然后将如下图所示:

系统的运行过程

但是,在执行感知系统之后,实际的系统执行过程不是内存系统的传统方法。不同系统之间没有呼叫关系。每个系统将在指定周期中执行一次,例如:

这里的文章基于我对Argos的理解,大大简化了其架构,以使每个人都更容易理解。接下来,让我们看一下真正的Argos。

2。argos系统体系结构

为了允许代理商进行更深入的思考并执行更复杂的任务,许多组件和许多系统。

Argos将系统分为“三个层”(意识级):

1)有意识的系统

2)潜意识系统

3)无意识的系统

因此,在Argos中,不同的系统被意识级分配,以指定该系统执行多长时间。

您为什么要设计这个?因为Argos中的系统之间的关系非常复杂,如下所示::

感知系统负责从外部或其他实体收集“刺激”,并将其更新为代理(代理)的感知组成部分。根据稳定性,处理模式(主动/反射/等待)等,确定刺激是否显着更改,最终为“当前的感知”信息提供了以下的经验系统,Thinkingsystem,等等。

经验系统将感知系统收集的刺激转换为更抽象的“体验”。将调用LLM或标尺逻辑以识别新体验并将其存储到内存组件中。经验,筛选和验证经验,与此同时,“体验”事件是由Eventbus触发的,向其他系统或外部监视器触发。

Thinkingsystem的“思考”系统。从内存,感知和生成“ thoghtresult”等组件中提取当前状态,并通过GenerateThough(...)和LLM / Rule Logic提取“ Thoghtresult”。根据思维的结果,可能是:•更新记忆中的思想(思维历史记录)。 •触发一个新动作(在Action.PendingAction [Eid]中放置)。 •更改代理的外观(表达,姿势等),并生成相关的刺激,以“查看”其他实体的变化。

如果操作的操作代理是空的,则它将真正通过Runtime.getActionManager()真正执行操作。执行(…)。执行后,将结果写回动作。LastactionResult并通知房间或其他实体。这也将产生cognitivestimulus,以便随后的系统“知道”动作已完成或可以包含在内存中。

守门系统的系统评估目标中目标的进度。电流[EID]列表,或检查外部/自身内存是否是重大更改(检测有意义的变化)。当需要或调整一个新目标时,它将生成并写入目标。通过将军。同时。同时,在进度更新(in_progress)的目标(如果符合符合状态)的目标将改变状态完成或失败,并向相应的计划发送完整/失败的信号。

planningsystem生成或更新计划的“目标”计划。 ..),并将其写入Plan.Plans [EID]。

房间系统处理与房间相关的更新(房间):•让房间中的乘员为每个代理人“看到”他的其他实体的外观或运动。 •创建房间环境刺激(例如适当的“房间氛围”信息)和助理。确保当代理在太空环境中时,其他正在感知该空间的实体可以感知他的外观。

清理系统定期搜索并删除标记清理组件的实体。它用于恢复不再需要防止EC中留下大量无效实体的刺激或其他物体。

以下方案显示了每个系统在一轮(或几个帧)中如何与完整的过程保持一致。

场景准备:世界(世界)中的代理(eid = 1),处于“主动”状态,并且处于特定状态(eid = 100)。房间中出现了一个新的道具“魔术”,这产生了相应的刺激。

感知系统检测到“ magicsword”的出现,并生成刺激(type =“ item_appearance”),并添加到conception.currentstimuli [1]中。与上次刺激哈希相比,“重大变化”的加工state(活动模式)和“重新激活”试剂。

经验系统看到了座席(1)的静脉刺激,因此将诸如“剑出现”之类的信息提取为1或多种新体验(类型:“观察”)。存储在内存中。经验[1]并启动“体验”事件。

thinkingsystem读取内存,感知等状态信息,centathought:“ ragicsword,也许能捡起来看看它能干什么…”该思考结果包含一个待执行的动作:{工具:“ pickupitem”,参数:{{ itemName:“ magicsword”}} thinkingsystem将此操作写入action.pendingAction [1]。如果外观发生了变化(例如,“带有奇怪的表达”),则将其更新和生成视觉刺激。

ActionSystem看到了Action.pendingAction [1] = {工具:“ pickupitem”,参数:...}。通过runtime.getActionManager()。执行(“ pickupitem”,1,{itemName:“ magicsword”},runtime)执行“选择”操作逻辑。结果:{成功:true,消息:“您拿起魔术剑”},已更新为action.lastactionResult [1],并触发了“动作”事件广播到房间(100)。同时,认知刺激(type =“ action_result”),将其写入内存或让Thinkingsystem捕获下一轮。

守门计划(如果代理有目标)定期评估代理的目标。如果目前该代理商的目标是“获得强大的武器”并检测到魔术词可用,则可以标记目标。如果/keyseattr新更改(例如“房间中出现的新对象”会影响代理的目标吗?),根据检测有意义的汇总以产生新目标或放弃旧目标。

计划系统(如果有相关的目标),以检查是否需要或更新新计划,以“获得强大的武器”或刚刚生成的目标。如果您已经完成,请将关联的计划[状态]放置为“完成”;或者,如果将目标扩展到以下过程(“学习魔术剑”),则会生成更多步骤。

房间系统(每个框架或每个回合)更新房间中的乘员列表和可见实体(100)。如果代理(1)在外观上发生变化(例如外观。Currentaction=“ Holding Sword”),请创建一个新的“外观”视觉刺激,以使同一房间中的其他代理2知道“ Agent1”拿起剑”。

清洁系统删除了实体或刺激清理。如果不再需要刺激“魔术”,则可以在清理系统中删除刺激。

通过这些系统的连接,AI代理实现:•感知→记录或转变为内部体验→自我思考和决策 - 制定(行动)→动态调整目标和计划和计划。 (守门员 +计划)→同步环境(房间)→及时回收无用的实体(清理)。

Argos的整体体系结构的分析1.核心体系结构分层

2。组件分类

在EC中,每个实体(实体)可能具有多个组成部分。根据系统的性质和生命周期,这些组件可以大致分为以下类别:

核心身份级组件•代理 / playerProfile / npcprofile等。•用于唯一识别实体,存储核心字符或单位信息,通常需要对数据库的持久性。

行为和状态组件•行动,目标,计划,加工态等。•表示实体当前正在做的事情,以及外部命令和内部思维的响应状态。 •包含队列中的垂直行动,射门量,计划以及思维或任务。 •通常是中/短期的,许多人会随着游戏回合或商业周期的方式动态变化。 •是否有必要落入图书馆取决于情况。如果您想休息一下,则可以定期写入数据库。

感知和记忆成分•感知,记忆,刺激,经验等。•记录所感知的外部信息(刺激),以及感知后的经验丰富的经验。 •内存通常会积累大量数据,例如对话记录,事件历史记录等。通常需要持久。 •感知可能是真实的 - 时间或临时信息,大多在短期内有效,并且可以根据需求确定是否写入数据库(例如仅重要的感知事件)。

环境和空间(房间,占领,空间,环境,库存等)•表示有关房间,环境,位置,物品容器和其他信息的信息。 •房间,ID,占用房间,环境和其他领域通常需要持久性,例如房间的主页描述,地图结构等。•可以编写或定期编写恒定组件(例如实体在不同房间之间移动)。

外观和互动类别(外观,渗透,关系等)•记录外部实体的“可见”或“相互作用”部分,例如阿凡达,姿势,faciaxlexpression以及与其他实体的社会关系网络。 •某些部分只能在记忆(实际时间性能)中进行处理,而另一部分(例如关键的社会关系)可能持久。

辅助或操作和维护(清理,debuginfo,propingdata等)•哪些实体用于标记需要回收哪些实体或记录调试信息(debuginfo)在监视和分析过程中使用。 •通常仅存在于内存中,除非日志或审核需要,否则很少与数据库同步。

3。系统体系结构

以上已在上面介绍

4。经理体系结构

使用组件和系统,我们实际上缺乏资源管理器,例如如何访问数据库,如何更新状态时如何处理冲突等等。

左系统(感知系统,经验系统,思想系统等)):) :)::):

•每个系统都计划在ECS周期中通过SimulationRuntime执行,以查询并处理您关心的实体(通过组件条件)。

•执行逻辑时,您需要与经理互动,例如:

—————————

正确的经理(EventBus,Roommanager,StateManager,EventManager,ActionManager,Pressmanager等)):) :) :) :)::)::):

•提供基本上不主动“驱动器”逻辑的系统级别功能,而是按系统或运行时调用。

•典型示例:

•它是所有系统的“调度程序”,启动或停止不同级别(有意识/潜意识等);

•它也是由施工阶段创建的,并传递给每个系统。

•请特别注意它也与组件类似(CS)相互作用,以同时删除回收实体时的组件或事件订阅。

结论:每个系统在需要时通过相应的管理器读取数据或呼叫服务,而运行时将均匀地派遣所有系统和经理的生命周期和行为。

5。如何与数据库互动

在ECS中,系统是真正执行逻辑的地方,数据库读取和写入可以通过“ PersistenceManager / databasemanager”或“ StateManager”完成。一般过程可以如下:

启动或加载时,stateManager / persistenceManager从核心持久组件(例如代理,房间,目标等)加载数据,并创建相应的实体并初始化相关的组件字段。 •例如,读取一批记录到ECS世界中的代理商,并将其初始化代理,内存,目标和其他组件的初始化。

当ECS运行时(系统更新循环)•系统在每个帧中进行操作(或转弯):感知系统收集“感知”,并编写了感知组件(主要是短期库)。体验系统将新的“认知经验”写入记忆。如果关键体验可以同时致电StateManager立即存储它,或者按批量写入“需求呈现”标记。 Thinkingsystem / ActionSystem / GoartplanningSystem等根据组件的内容在ECS中做出决策和更新字段。如果某些组件(例如目标。电流)具有重大变化并且需要持久性(例如新的长期目标),请通知StateManager通过组件监视或系统事件将字段写入数据库中。

周期性或事件驱动,可用于系统中的某些要点(例如,在系统中的更新或重要事件),请致电PersistenceMemanager.storecomponentData(EID,“目标”)。类接口在库下。 •您还可以扫描stateManager来扫描包含“需求持久性”标记的组件或实体,并一次回信数据库。 •此外,还可以在此处存储日志或审核数据(例如动作历史,思维日志)。

退出或断点保存(手动或关闭保存)•当服务器或进程关闭时,未写入的数据将通过StateManager.saveall()写入数据库,以确保下一次加载可以还原ECS状态。 •对于某些站立/离线场景,您也可以手动触发档案。

这是一种与简单场景进行交互,演示组件和数据库交互的简单方法:

开始时:statemanager.querydb(“从代理中选择 * *”)→获取一批代理记录,为每个记录创建实体(eid = x),并将其赋予诸如代理,内存,目标和其他组件之类的装配字段。同时,房间信息从“房间”桌子上加载以创建房间实体。

运行阶段:感知系统在房间中检测到事件“ magicsword”,并写了一个conception.currentstimuli [eid]。体验系统将刺激转换为经验并将其分配给内存。经验[EID]。 Thinkingsystem确定下一步浏览信息,例如内存,目标和其他信息,以生成Action.pendingAction [EID]。 ActionSystem执行操作后,将结果写入内存或Action.lastactionResult。如果这是一个主要的绘图事件,则记忆的最新部分。经验[EID]将被标记为需求。 StateManager发现,内存[EID]带有“需求抗性”的内容已写入数据库中(插入memiry_experiences ...)。

停止或断点:基于ECS或系统调度,在“服务器关闭”时致电StateManager.saveall(),并编写仍在存储器中的关键组件字段(代理,内存,目标等)的最新状态(代理,内存,目标等) 。下次重新启动时,您可以从数据库加载和恢复ECS世界状态。

•组件的分类很方便,可以清楚地管理项目中的物理数据,同时也有助于我们控制“需求持久性”和“存在于内存中”的数据边界。 •与数据库的互动通常由特别经理(例如StateManager)处理。当您需要读取和编写数据库以避免直接编写SQL或系统中的基础句子时,系统将通过它操作。 •这可以享受逻辑上有效和灵活性的优势,以及数据库的持久性,断点运行和数据统计分析。

五,建筑创新点

如下所示:

从我个人的角度来看,这是一个非常模块化的框架。同时,代码质量也很高,并且包含良好的设计文档,但不幸的是,$ Project89项目始终缺乏该框架的宣传。因此,我花了很长时间(4天)写这篇文章。我认为好事仍然值得一提。我明天应该发布英文版本。我希望会有更多的比赛团队或Defai团队。开车前往此框架,为您提供新的潜在体系结构选项!

上一篇 从Dota到加密货币:如何通过精准决策和练习实现改变人生的收益 下一篇 DeepSeek开源大模型震撼AI界,AMD迅速集成,英伟达股价受挫
评论
更换验证码