把“10万个AI角色”写进宣传稿很容易,把它们真正跑起来很难,而最直觉的做法几乎一定是错的:给每个角色配一个大模型,让它们各自不停思考。这样做的账单、延迟和一致性问题,会在角色数量涨到几百时就开始失控。更关键的是,这些思考绝大多数不会被任何人看到。爱游戏在虚拟世界方向上的判断是:大型世界需要的是分层智能,而不是无限调用大模型。下面把这个判断拆开讲清楚。
先问一个问题:这些角色,此刻被谁看着?
设计一个大规模世界,最有用的起点不是模型选型,而是承认一个朴素事实:玩家的注意力是有限的。同一时刻,一位玩家能认真观察的角色,也就是视野里的几个、正在对话的一两个、隔壁街区里他刚认识的几位。城市另一端有一万个角色在做什么,只要不影响这位玩家,对他而言就等于不存在。
但“不存在”不等于“可以不管”。世界要保持可信,那一万个角色的总体行为,仍会以各种方式渗到玩家眼前:物价、街上的人流、传闻、天气之后店铺的开关。所以问题被重新表述成:用多少精度,去维持多大范围的世界,才能让玩家在任何时刻都找不到破绽。这个问法直接引向下一节的分层。
四档精度:谁值得被精细模拟
图形渲染里有一个成熟的概念叫细节层次(LOD):离摄像机近的物体用高精度模型,远的用简化模型。虚拟世界的模拟可以借用同样的思想,只是这里分层的对象不再是多边形,而是“思考的深度”。我们的设计思路大致分为四档。
| 档位 | 对象 | 更新方式 | 主要驱动 |
|---|---|---|---|
| 第一档 | 玩家身边的重要角色 | 高频更新,可调用大模型 | 对话、玩家行为、关系变化 |
| 第二档 | 同区域的普通角色 | 中低频更新,规则与小模型为主 | 日程、需求、邻近事件 |
| 第三档 | 远处的有名有姓角色 | 粗粒度时间片,只结算状态变化 | 订单、活动、关系转折 |
| 第四档 | 背景人口 | 统计模型,不保存个体细节 | 人口比例、行业分布、随机扰动 |
这里有两点需要强调。第一,档位不是固定的标签,而是随玩家位置、任务线索和事件热度动态升降的。玩家走进哪个街区,哪个街区的角色就被抬高一档;玩家离开,就被放回低频。第二,分档的收益并不是“省钱”本身,而是让预算花在玩家真正能感知的地方。把同样多的算力平均撒给所有角色,每个人都只能得到一份浅薄的思考,谁也撑不起一次像样的对话。
事件驱动:让角色在“有事”的时候才醒来
另一个直觉上的误区,是让世界按固定时钟轮询:每隔一段时间,问每个角色一遍“你现在想干什么”。这种做法既浪费,也很难对齐因果。更合适的方式是事件驱动:角色平时按日程与规则运行,只有当某个事件与他相关时,才被唤醒去重新规划。
什么算“与他相关”?可以按几类信号来判断:与他有关系的角色发生了重要变化,他所在的地点状态改变了,他依赖的资源短缺了,或者玩家做出了会影响他的行为。事件本身也有等级。有人买了一块面包,是个不需要唤醒任何人的小事;粮仓着火了,则会沿关系与地点向外扩散,逐层抬高受影响角色的精度。
事件驱动还有一个好处:它天然带着来源。被唤醒的角色知道自己是因为什么而醒,写回世界状态的结论也就能挂上因果指针。这一点与我们在持久虚拟世界一文里讲的事件日志是同一套机制,分层智能与世界状态其实是互相依赖的两件事。
规则、行为树、小模型与大模型:各干各的活
即使在需要“思考”的第一档,也不是每一步都得动用最重的模型。把一个角色的决策拆开看,大部分动作是可以廉价完成的。
- 规则与状态机:处理确定性很强的事,比如开门关门、按日程移动、库存不足就补货。便宜、稳定、可预测。
- 行为树:处理有分支但结构明确的日常行为,比如“饿了就找吃的,没钱就去干活,有邻居打招呼就回应”。
- 小模型:处理需要一点语义判断、但不必深度推理的任务,比如把一句玩家发言归类为求助、闲聊或威胁,或者从若干候选行为里挑一个更合理的。
- 大模型:只留给真正开放的环节,比如与玩家的自由对话、需要在多个相互冲突的动机之间权衡的决定、对一段经历的反思。
Generative Agents 那项研究里的记忆流、重要性评分和反思,可以理解为给大模型的“昂贵推理”设了一道门槛:不是所有经历都值得反思,只有重要性累积到一定程度才触发。这种“先廉价筛选,再昂贵处理”的模式,与上面的分工是一致的。
缓存与计划复用也是不能省的一环。一个角色早上“开店营业”的计划,大体上每天差不多,没必要每天都重新推理;只有当条件与昨天出现显著差别,才值得重新规划。同类角色在同类情境下的决策模板,也可以复用,再叠加少量个体差异来避免千人一面。这里的思路与游戏里常见的对象池、资源缓存类似,只是缓存的内容是“决策”。
最难的部分:统计人口被看见时,怎么“具体化”
分层带来一个别的方案里少见的难题。第四档的背景人口本来只是统计数字,比如“这个街区有若干位面点师傅”,并没有一个个具体的人。可是玩家偏偏走上前,拉住其中一位说话,这个匿名的“路人”就必须瞬间变成有名字、有性格、有过去的个体,而且不能和已经存在的世界状态矛盾。
我们的设计思路是把这一步做成“升级”,并给它加上几条约束。
- 先约束,再生成:具体化的个体必须符合他所在层级的统计分布,比如这个街区的职业构成、年龄结构、经济水平,不能凭空造出一位与此地格格不入的角色。
- 与已知事实对齐:如果世界状态里已经记录了“这个街区有三家面包店”,那么新生成的师傅必须挂在其中一家名下,而不是凭空新增一家。
- 生成后立即落库:一旦这位角色被具体化,他的身份、关系与初始记忆就被写进世界状态,此后的每次相遇都指向同一个人,不再重新“抽签”。
- 可降级但不可失忆:玩家走远之后,角色可以回到低频档位,但已经生成的个体信息要保留,下次相遇不能改口。
这一步做不好,玩家会发现同一个路人每次见面都是不同的人,世界的可信度随之崩塌。所以我们宁可少生成一点,也要保证被生成的都能长期成立。相关的关系保存问题,可以延伸到社交图与关系记忆的讨论。
一个假设的场景:暴雨来了,精度是怎么被抬高的
下面是一个模拟场景,用来说明分层与事件驱动如何配合。数字与人物均为假设,并非爱游戏已上线的内容。
假设一座虚拟城市里,玩家正站在河边的集市上。此时的世界大致是这样:集市周围的摊贩与顾客属于第一、二档,他们各自按日程与规则活动;城市北区的居民属于第三、四档,只在粗粒度时间片里更新。
天气系统触发了一场暴雨,这是一个高热度事件。它沿着地点与关系向外扩散:集市的摊贩被唤醒,去决定收摊、躲雨还是加价卖伞,这一步用行为树加小模型即可完成,只有其中一位与玩家有过多次交流的老摊主,才会调用大模型去回应玩家“要不要一起躲一躲”的临时提问。北区的居民同样收到暴雨事件,但只以统计方式结算:户外营业的比例下降,室内场所的客流上升,个体不被逐一模拟。
玩家钻进一家茶铺避雨,与店里一位陌生的客人搭话。这位客人原本是第四档的背景人口,现在被具体化:系统根据这家茶铺的常客构成,给他一个合理的身份,再把这个身份写入世界状态。雨停之后,这位客人回到低频,但如果玩家明天再来,仍然会遇到同一个人。
整个过程里,被“昂贵思考”触及的角色只是极少数,世界却给人一种整座城市都在响应暴雨的感觉。这就是分层智能想要的结果:可信度来自精度的合理分配,而不是处处高精度。
成本、延迟与那些不该省的地方
分层不是没有代价。每加一层,就多一套升降规则,多一类可能出错的边界。我们在设计里格外留意几处:升降档的抖动,玩家在两个街区边缘来回走动时,角色不该反复被升降;事件风暴,一个大事件不应触发所有人同时唤醒大模型,而是需要排队、限流并设定优先级;延迟预算,与玩家直接交互的角色,必须在玩家期待回应的时间内给出反馈,必要时先用规则层给一个过渡反应,再由大模型补全。
也有一些地方不应该省。玩家的关键线索,比如他正在跟进的任务相关角色,不能因为分档而被静默降级;涉及玩家资产与关系的变化,必须留下可追溯的记录;AI角色的身份标注,不随档位变化而消失。至于把这些原则落成多大规模、多少并发,取决于具体设备与服务条件,本文不给出任何成本或性能数字,正式的功能范围以官方公布为准。
值得一提的是,公开研究已经展示了大规模智能体群体的可能性。Altera 的 Project Sid 在 Minecraft 里部署大规模自主智能体群体,观察到分工、资源共同管理与文化规范传播等涌现现象。这类实验说明规模化的自主行为是可以出现的,但它们同样提醒我们,数量上去以后,控制与观测的难度也跟着上去。对社区里的自发活动,可以继续参考虚拟社区的自发事件。
还有一个容易被忽略的检验方式:不看模型有多大,而是看玩家能不能在不同档位之间“穿帮”。比如从高精度街区走到低精度街区,角色的说话方式、对玩家的称呼、对刚发生之事的记忆是否连贯;再比如让同一个角色在离玩家很远的时候完成一件事,玩家赶到现场时,现场留下的痕迹是否与结果一致。这类一致性检查比单纯的吞吐量指标更接近玩家的真实感受,也更能暴露分层设计里的缝隙。
这也解释了为什么我们不把“同时在线角色数”当作最重要的指标。数量可以很漂亮,但如果被抬高精度的那几个角色与背景之间对不上,世界看起来就像一块贴了许多人头的布景。真正值得追的,是在玩家看得见的范围里,所有档位拼出来的是一个前后一致的社会。
把预算花在玩家能感受到的地方
回到开头的问题:10万个AI角色,真的需要10万个大模型同时思考吗?我们的回答是不需要,也不应该。更接近正确的做法是,让规则与统计支撑世界的宽度,让大模型专注于玩家能直接感知的深度,用事件把两者连起来,用世界状态保证它们说的是同一个故事。
这样的世界不靠“每个角色都很聪明”取胜,而靠“该聪明的时候足够聪明,不该聪明的时候足够便宜”。判断一个大型虚拟世界的设计是否成熟,不妨问:它的算力去了哪里?如果答案是均匀地撒向每一个角色,那多半是没想清楚;如果答案是集中在玩家看得见、摸得着的那一小部分,同时背后的世界依然连贯,那才是分层智能真正想做到的事。