先分清两件事:NPC对话不是社会模拟

设想一个示意场景:玩家走进虚拟城市的面包店,问店主今天生意怎么样。一个只做对话的NPC会回答“还行,谢谢关心”,下次再问,可能是另一句同样得体的话。这句台词很流畅,但它背后没有任何东西:店主没有真实的账本,没有需要养活的家人,也不知道隔壁新开了一家店。

社会模拟要回答的是另一类问题。店主今天到底卖了多少,收入够不够交房租,家里谁在等这笔钱,昨天有个熟客不再来了是因为什么。这些问题的答案不是生成出来的一句话,而是一组被保存、被更新、可以被别的角色读取的状态。

所以本文反复强调一条界线:NPC Dialogue ≠ Society Simulation。对话是一个角色对玩家说话,社会模拟是许多角色的状态彼此牵动。前者可以很出彩而后者完全缺席,反过来,一座没有几句台词的城市,只要状态之间真的互相作用,也能讲出很像样的故事。

传统模拟人生的NPC大多依赖固定规则:到点上班,到点回家,好感度达到阈值触发一段脚本。这种做法稳定、便宜,问题是每个角色都活在自己的剧本里,一个人的遭遇不会真正改变另一个人的处境。下一阶段想做的,是让每个角色拥有工作、家庭、朋友、收入、目标和记忆,并让它们互相影响。下面按“人物、家庭、经济、社会、事件传播”五层,把这件事拆开来看。

第一层:一个人物需要保存哪些状态

先从最小的单位开始。以虚拟城市里的面包店店员阿岚为例,如果她要成为社会的一部分,而不只是一个会说话的模型,至少需要这几类状态。

  • 身份与处境:年龄段、住处、职业、雇主,这些是大多数其他角色会查询她的字段。
  • 收入与储蓄:每期收入、固定支出、可支配余额。第二层和第三层都要读它。
  • 目标与需求:想攒钱开自己的店、想搬到离家人近的地方、最近睡得不好。目标决定她在没有玩家介入时做什么。
  • 记忆:按事件、事实、关系分开存。她记得被老板当众批评过,这是事件记忆;她知道自己对花粉过敏,这是事实记忆;她与谁走得近,属于关系记忆。这套分法与 虚拟角色长期记忆 里的思路一致。
  • 情绪与压力:短期变化的量,会影响她当天的决策倾向。

需要注意,这些状态是结构化的数据,语言模型只是读取和改写它们的一种手段。如果把阿岚的全部处境都写成一大段自然语言描述放进提示词,它会随着时间变模糊,两周之后她的储蓄到底是多少,没有人说得清。让数字留在数字里,让文字负责表达和判断,是这一层最重要的设计原则。

Generative Agents 论文里,25个智能体生活在名为 Smallville 的沙盒小镇,架构包含记忆流、检索、反思和计划:用自然语言记录观察,按相关性等取回记忆,把观察提炼成更高层的认识,再据此安排一天的行动。这套结构说明,一个可信的人物离不开“记住、回想、总结、计划”这条链。我们在此基础上更强调,与经济、家庭相关的量应当单独用结构化状态维护,因为别的角色和系统需要精确读取它们。

第二层:家庭是人物之间的第一层耦合

一个人不是孤立的。最先把两个角色绑在一起的,通常不是友谊,而是家庭和住处。

设想阿岚与母亲、弟弟同住,三个人共用一份家庭账户。这时“家庭”不是一句背景设定,而是一个独立的对象,拥有自己的状态:

家庭状态 谁会写入 谁会读取
家庭总收入各成员的工作结果 采购、房租、储蓄决策
住房房租支付情况、搬家事件 所有成员的通勤与邻里关系
抚养与照护关系 出生、成长、生病等事件 成员的时间分配与压力
家庭氛围 争吵、团聚等事件 每个成员的情绪起点

有了这一层,角色之间的决策自然会互相影响。阿岚想辞职去学烘焙,这不再只是她一个人的愿望,因为她的收入被家里当作固定项目;弟弟要不要继续上学,同样要看家庭账户的余额。更合理的写法是:个人目标先与家庭约束协商,再落成行动,而不是让每个人物各自为政。

家庭还提供了一个很好用的“聚合单位”。在后面讲到规模时你会看到,大量低关注度的角色,我们并不需要逐个让大模型思考,而是以家庭为单位,用规则推进它的收入与支出,只在出现值得讲述的变化时,才展开到个人。

第三层:经济让人物的选择有代价

有了收入、家庭和住处,就可以放进经济。这里不追求复杂的宏观模型,只要几个可以自洽运转的回路。

  1. 劳动回路:企业和店铺雇用人手,支付工资,岗位数量随经营状况变化。
  2. 消费回路:家庭按收入和需求采购,钱流向店铺,构成店铺收入。
  3. 住房回路:房租占家庭支出的一大块,拖欠会引发搬家、合租等后果。
  4. 价格与供给:食品、租金等价格不必由大模型每天“想”出来,用带有随机扰动的规则即可。

举一个示意的因果链:假设面包店老板因成本上升而裁掉一名店员,这名店员正是阿岚。于是阿岚的收入归零,家庭可支配余额下降,减少外出用餐,附近小餐馆的流水随之下降,餐馆可能少排一个班。每一步都只用简单的规则,但连在一起就出现了“一个人失业会影响周围店铺”的现象。这条链条的完整推演见 AI角色失业后的后果传播,在那里我们会用示意数值一步一步走完。

这里有一个常见误区:让大模型直接“描述经济情况”,输出一段听上去很像新闻稿的文字。这种文字无法被下游读取,也无法核对。我们的倾向是,数字由经济系统计算,大模型只负责把数字变成有质感的叙述,并在需要人物做出个性化选择时提供判断,比如阿岚会先向亲戚借钱,还是先去投简历。

第四层:社会把个体连成网络

家庭之内的关系由血缘和居住绑定,家庭之外的关系则是一张需要经营的网:同事、邻居、老顾客、同好小组。

在实现上,社交网络是一张关系图。每个角色是节点,每一段关系是一条边,边上至少要带这些属性:

  • 强度:熟到什么程度。
  • 类型:家人、朋友、同事、竞争对手。
  • 时间:这段关系是什么时候建立的,最近一次互动是什么时候。
  • 共同经历:指向双方都参与过的事件记忆。

这张图会决定很多事。信息沿着边流动,谁先知道谁后知道;帮助沿着边流动,阿岚失业后,可能是一位老朋友介绍了新工作;冲突也沿着边扩散,两个朋友吵架,会迫使共同好友“站队”或者“回避”。这些行为不需要为每一种情境单独写脚本,它们来自关系图的结构,加上角色各自的目标与性格。两个人成为朋友以后如何继续牵动整个社会,我们在 朋友关系如何影响整个社会 里另外展开。

第五层:一件事怎样在城里传开

前四层是“静态的骨架”,最后一层解决“事件如何流动”。设想一个示意事件:城里最大的一家工厂宣布停产一个月。

它的传播不是一步完成的,而更像一个有顺序的流程:

  1. 事件产生:由经济系统或作者设定的剧情节点触发,写入世界状态,包含时间、地点、涉及的角色和企业。
  2. 直接影响:直接受影响的员工收入变化,其家庭账户随之改变。
  3. 二阶影响:这些家庭的消费减少,周边店铺收入下降,一部分店铺调整排班。
  4. 信息传播:角色通过关系图得知消息,有人直接看到告示,有人是从邻居口中听说,还可能听到被放大或者走样的版本。
  5. 行为调整:每个角色依据自己的目标、性格和处境做决定,有人找新工作,有人搬家,有人组织互助。
  6. 记忆写入:这一整段经历成为部分角色的事件记忆,影响他们以后对雇主、对邻里的态度。

第4步值得多说一句:“谁知道什么”本身也是状态。如果所有角色在事件发生的那一秒就全部知情,社会就会显得像一个共享同一块黑板的群体,失去了流言、误会与信息差带来的戏剧性。所以我们倾向于让消息沿关系传播,并允许它在传播中被简化或走样。

一万个角色不会每天都调用一万次大模型

设想“一座住着1万个AI角色的虚拟城市”,这个数字是示意,用来说明规模问题。如果每个角色每天有几十次决策,都让大模型来思考,成本和延迟都会立刻失控,而且绝大部分决策(吃什么、走哪条路)对故事毫无意义。

更合理的做法是分层:

  • 玩家附近、与当前事件强相关的角色:用完整的记忆检索与大模型规划,追求细腻。
  • 远处的、暂时无关的角色:用规则和摘要低频推进,只保存关键状态的变化。
  • 整体层面的事件:按家庭、街区、企业聚合,一起结算。

这类思路与研究方向一致:Affordable Generative Agents 一类工作指出,频繁调用大模型的成本很高,并提出分层决策和“总结并遗忘”的记忆机制来降低成本。具体的分层与切换细节,我们放在 一万个AI人物每天行动怎样算得动 里讨论。

研究做到了什么,我们不把它说成什么

关于社会模拟,已经有一批公开研究可以作参照,但它们能支持的结论是有边界的。

  • Generative Agents 展示了25个智能体在沙盒小镇里生活,并自发协调了一场情人节派对。它说明的是:带记忆与计划的智能体能表现出可信的协作行为。
  • 清华大学团队的 AgentSociety 是大规模LLM驱动的社会模拟器,置于逼真的城市、社会与经济环境中,生成了一万多个智能体、约五百万次交互,并被用来复现意见极化、全民基本收入影响、外部冲击响应等现象。

请注意,这些是研究性的社会模拟。它们帮助人们观察机制,探讨“如果条件如此会怎样”,但研究性模拟不等于预测现实。虚拟城市里的一次失业潮,不能被当作真实世界失业情况的推断。

对游戏而言,目标也不是“像现实一样准确”,而是“可信、一致、有趣”:角色前后不矛盾,事件的因果说得通,玩家的介入会留下痕迹。为此,我们会关注行为一致性检查、事件回放和参数校准,而不是宣称某个模拟结果代表了真实。

提醒:本文中的人物、数值和城市规模均为虚构的示意或假设,只用来解释机制;它们不代表大发娱乐已经达到的规模,也不是行业统计。

大发娱乐的取舍:让系统互相牵动,而不是让对话更多

回到开头的问题:一座虚拟城市里住着1万个AI角色,会发生什么?我们的回答是:取决于这些角色之间有没有真实的状态依赖。

  • 如果只有对话,那么一万个角色就是一万个更会说话的路人。
  • 如果有人物状态、家庭账户、经济回路、关系网和事件传播,那么一个人的失业、一次友谊、一场停产,都会以可检查的方式改变城市。

因此大发娱乐AI在设计模拟人生时,倾向于先把状态和规则搭稳,再让大模型去做它最擅长的事:理解情境、表达个性、在少数关键时刻做出细腻的选择。玩家可以在这座城市里当观察者,也可以成为一个变量,去介绍一份工作、化解一场争执,看后果如何一层一层传回来。更多关于城市栏目的内容,可以从 模拟人生栏目 继续阅读。