先分清两件事:NPC对话不是社会模拟
设想一个示意场景:玩家走进虚拟城市的面包店,问店主今天生意怎么样。一个只做对话的NPC会回答“还行,谢谢关心”,下次再问,可能是另一句同样得体的话。这句台词很流畅,但它背后没有任何东西:店主没有真实的账本,没有需要养活的家人,也不知道隔壁新开了一家店。
社会模拟要回答的是另一类问题。店主今天到底卖了多少,收入够不够交房租,家里谁在等这笔钱,昨天有个熟客不再来了是因为什么。这些问题的答案不是生成出来的一句话,而是一组被保存、被更新、可以被别的角色读取的状态。
所以本文反复强调一条界线:NPC Dialogue ≠ Society Simulation。对话是一个角色对玩家说话,社会模拟是许多角色的状态彼此牵动。前者可以很出彩而后者完全缺席,反过来,一座没有几句台词的城市,只要状态之间真的互相作用,也能讲出很像样的故事。
传统模拟人生的NPC大多依赖固定规则:到点上班,到点回家,好感度达到阈值触发一段脚本。这种做法稳定、便宜,问题是每个角色都活在自己的剧本里,一个人的遭遇不会真正改变另一个人的处境。下一阶段想做的,是让每个角色拥有工作、家庭、朋友、收入、目标和记忆,并让它们互相影响。下面按“人物、家庭、经济、社会、事件传播”五层,把这件事拆开来看。
第一层:一个人物需要保存哪些状态
先从最小的单位开始。以虚拟城市里的面包店店员阿岚为例,如果她要成为社会的一部分,而不只是一个会说话的模型,至少需要这几类状态。
- 身份与处境:年龄段、住处、职业、雇主,这些是大多数其他角色会查询她的字段。
- 收入与储蓄:每期收入、固定支出、可支配余额。第二层和第三层都要读它。
- 目标与需求:想攒钱开自己的店、想搬到离家人近的地方、最近睡得不好。目标决定她在没有玩家介入时做什么。
- 记忆:按事件、事实、关系分开存。她记得被老板当众批评过,这是事件记忆;她知道自己对花粉过敏,这是事实记忆;她与谁走得近,属于关系记忆。这套分法与 虚拟角色长期记忆 里的思路一致。
- 情绪与压力:短期变化的量,会影响她当天的决策倾向。
需要注意,这些状态是结构化的数据,语言模型只是读取和改写它们的一种手段。如果把阿岚的全部处境都写成一大段自然语言描述放进提示词,它会随着时间变模糊,两周之后她的储蓄到底是多少,没有人说得清。让数字留在数字里,让文字负责表达和判断,是这一层最重要的设计原则。
Generative Agents 论文里,25个智能体生活在名为 Smallville 的沙盒小镇,架构包含记忆流、检索、反思和计划:用自然语言记录观察,按相关性等取回记忆,把观察提炼成更高层的认识,再据此安排一天的行动。这套结构说明,一个可信的人物离不开“记住、回想、总结、计划”这条链。我们在此基础上更强调,与经济、家庭相关的量应当单独用结构化状态维护,因为别的角色和系统需要精确读取它们。
第二层:家庭是人物之间的第一层耦合
一个人不是孤立的。最先把两个角色绑在一起的,通常不是友谊,而是家庭和住处。
设想阿岚与母亲、弟弟同住,三个人共用一份家庭账户。这时“家庭”不是一句背景设定,而是一个独立的对象,拥有自己的状态:
| 家庭状态 | 谁会写入 | 谁会读取 |
|---|---|---|
| 家庭总收入 | 各成员的工作结果 | 采购、房租、储蓄决策 |
| 住房 | 房租支付情况、搬家事件 | 所有成员的通勤与邻里关系 |
| 抚养与照护关系 | 出生、成长、生病等事件 | 成员的时间分配与压力 |
| 家庭氛围 | 争吵、团聚等事件 | 每个成员的情绪起点 |
有了这一层,角色之间的决策自然会互相影响。阿岚想辞职去学烘焙,这不再只是她一个人的愿望,因为她的收入被家里当作固定项目;弟弟要不要继续上学,同样要看家庭账户的余额。更合理的写法是:个人目标先与家庭约束协商,再落成行动,而不是让每个人物各自为政。
家庭还提供了一个很好用的“聚合单位”。在后面讲到规模时你会看到,大量低关注度的角色,我们并不需要逐个让大模型思考,而是以家庭为单位,用规则推进它的收入与支出,只在出现值得讲述的变化时,才展开到个人。
第三层:经济让人物的选择有代价
有了收入、家庭和住处,就可以放进经济。这里不追求复杂的宏观模型,只要几个可以自洽运转的回路。
- 劳动回路:企业和店铺雇用人手,支付工资,岗位数量随经营状况变化。
- 消费回路:家庭按收入和需求采购,钱流向店铺,构成店铺收入。
- 住房回路:房租占家庭支出的一大块,拖欠会引发搬家、合租等后果。
- 价格与供给:食品、租金等价格不必由大模型每天“想”出来,用带有随机扰动的规则即可。
举一个示意的因果链:假设面包店老板因成本上升而裁掉一名店员,这名店员正是阿岚。于是阿岚的收入归零,家庭可支配余额下降,减少外出用餐,附近小餐馆的流水随之下降,餐馆可能少排一个班。每一步都只用简单的规则,但连在一起就出现了“一个人失业会影响周围店铺”的现象。这条链条的完整推演见 AI角色失业后的后果传播,在那里我们会用示意数值一步一步走完。
这里有一个常见误区:让大模型直接“描述经济情况”,输出一段听上去很像新闻稿的文字。这种文字无法被下游读取,也无法核对。我们的倾向是,数字由经济系统计算,大模型只负责把数字变成有质感的叙述,并在需要人物做出个性化选择时提供判断,比如阿岚会先向亲戚借钱,还是先去投简历。
第四层:社会把个体连成网络
家庭之内的关系由血缘和居住绑定,家庭之外的关系则是一张需要经营的网:同事、邻居、老顾客、同好小组。
在实现上,社交网络是一张关系图。每个角色是节点,每一段关系是一条边,边上至少要带这些属性:
- 强度:熟到什么程度。
- 类型:家人、朋友、同事、竞争对手。
- 时间:这段关系是什么时候建立的,最近一次互动是什么时候。
- 共同经历:指向双方都参与过的事件记忆。
这张图会决定很多事。信息沿着边流动,谁先知道谁后知道;帮助沿着边流动,阿岚失业后,可能是一位老朋友介绍了新工作;冲突也沿着边扩散,两个朋友吵架,会迫使共同好友“站队”或者“回避”。这些行为不需要为每一种情境单独写脚本,它们来自关系图的结构,加上角色各自的目标与性格。两个人成为朋友以后如何继续牵动整个社会,我们在 朋友关系如何影响整个社会 里另外展开。
第五层:一件事怎样在城里传开
前四层是“静态的骨架”,最后一层解决“事件如何流动”。设想一个示意事件:城里最大的一家工厂宣布停产一个月。
它的传播不是一步完成的,而更像一个有顺序的流程:
- 事件产生:由经济系统或作者设定的剧情节点触发,写入世界状态,包含时间、地点、涉及的角色和企业。
- 直接影响:直接受影响的员工收入变化,其家庭账户随之改变。
- 二阶影响:这些家庭的消费减少,周边店铺收入下降,一部分店铺调整排班。
- 信息传播:角色通过关系图得知消息,有人直接看到告示,有人是从邻居口中听说,还可能听到被放大或者走样的版本。
- 行为调整:每个角色依据自己的目标、性格和处境做决定,有人找新工作,有人搬家,有人组织互助。
- 记忆写入:这一整段经历成为部分角色的事件记忆,影响他们以后对雇主、对邻里的态度。
第4步值得多说一句:“谁知道什么”本身也是状态。如果所有角色在事件发生的那一秒就全部知情,社会就会显得像一个共享同一块黑板的群体,失去了流言、误会与信息差带来的戏剧性。所以我们倾向于让消息沿关系传播,并允许它在传播中被简化或走样。
一万个角色不会每天都调用一万次大模型
设想“一座住着1万个AI角色的虚拟城市”,这个数字是示意,用来说明规模问题。如果每个角色每天有几十次决策,都让大模型来思考,成本和延迟都会立刻失控,而且绝大部分决策(吃什么、走哪条路)对故事毫无意义。
更合理的做法是分层:
- 玩家附近、与当前事件强相关的角色:用完整的记忆检索与大模型规划,追求细腻。
- 远处的、暂时无关的角色:用规则和摘要低频推进,只保存关键状态的变化。
- 整体层面的事件:按家庭、街区、企业聚合,一起结算。
这类思路与研究方向一致:Affordable Generative Agents 一类工作指出,频繁调用大模型的成本很高,并提出分层决策和“总结并遗忘”的记忆机制来降低成本。具体的分层与切换细节,我们放在 一万个AI人物每天行动怎样算得动 里讨论。
研究做到了什么,我们不把它说成什么
关于社会模拟,已经有一批公开研究可以作参照,但它们能支持的结论是有边界的。
- Generative Agents 展示了25个智能体在沙盒小镇里生活,并自发协调了一场情人节派对。它说明的是:带记忆与计划的智能体能表现出可信的协作行为。
- 清华大学团队的 AgentSociety 是大规模LLM驱动的社会模拟器,置于逼真的城市、社会与经济环境中,生成了一万多个智能体、约五百万次交互,并被用来复现意见极化、全民基本收入影响、外部冲击响应等现象。
请注意,这些是研究性的社会模拟。它们帮助人们观察机制,探讨“如果条件如此会怎样”,但研究性模拟不等于预测现实。虚拟城市里的一次失业潮,不能被当作真实世界失业情况的推断。
对游戏而言,目标也不是“像现实一样准确”,而是“可信、一致、有趣”:角色前后不矛盾,事件的因果说得通,玩家的介入会留下痕迹。为此,我们会关注行为一致性检查、事件回放和参数校准,而不是宣称某个模拟结果代表了真实。
大发娱乐的取舍:让系统互相牵动,而不是让对话更多
回到开头的问题:一座虚拟城市里住着1万个AI角色,会发生什么?我们的回答是:取决于这些角色之间有没有真实的状态依赖。
- 如果只有对话,那么一万个角色就是一万个更会说话的路人。
- 如果有人物状态、家庭账户、经济回路、关系网和事件传播,那么一个人的失业、一次友谊、一场停产,都会以可检查的方式改变城市。
因此大发娱乐AI在设计模拟人生时,倾向于先把状态和规则搭稳,再让大模型去做它最擅长的事:理解情境、表达个性、在少数关键时刻做出细腻的选择。玩家可以在这座城市里当观察者,也可以成为一个变量,去介绍一份工作、化解一场争执,看后果如何一层一层传回来。更多关于城市栏目的内容,可以从 模拟人生栏目 继续阅读。