从一条边开始:友谊在数据里长什么样
设想虚拟城市里有两个角色:开旅馆的阿岚,和在码头做搬运的大川。某天暴雨,大川送一位迷路的旅客到旅馆,阿岚留他喝了碗热汤。两人聊了很久,从此成了熟人,几周后成了朋友。
多数游戏会记录一个数字:好感度从20涨到45。这个数字对显示一个心形图标足够了,但对社会模拟来说信息太少。它回答不了这些问题:他们是怎么认识的?是同事还是邻居?上次说话是什么时候?大川对阿岚的信任,是不是也等于阿岚对大川的信任?
所以这里的做法是把友谊当成关系图中的一条边,并让它携带足够多的信息。这是 AI模拟人生 里“社会层”的核心结构,本文专门把它拆开来看。下文所有数字与场景都是示意与举例,只为说明机制。
一条边至少要记录五件事
关系图里,角色是节点,关系是边。一条能被下游系统使用的边,建议至少有这些属性:
| 属性 | 举例(示意) | 被谁使用 |
|---|---|---|
| 类型 | 朋友、邻居、雇佣、亲属、竞争 | 决定可发生的互动种类 |
| 强度 | 0到100的熟悉与亲近程度 | 帮助意愿、消息可信度 |
| 方向性 | 阿岚信任大川,高于大川信任阿岚 | 单向借助、误解的来源 |
| 时间 | 建立于第30天,最近互动在第52天 | 关系衰减、久别重逢 |
| 共同经历 | 指向“暴雨送客”这条事件记忆 | 对话内容、忠诚与背叛判断 |
两点值得单独说明。其一,边是有方向的。现实里信任常常不对称,这种不对称正是许多误会与戏剧的来源;把它压缩成一个对称数字,就丢掉了这部分。其二,边要衰减。如果两个人很久不联系,强度按规则缓慢下降,而“共同经历”这条记忆不衰减,所以久别后再见,会出现“虽然生疏,但记得当年”的效果。
这里的大模型分工很明确:数字与时间由关系系统维护,共同经历以事件记忆的形式存放;当两个角色对话时,系统把这条边的摘要交给模型,让语气与内容贴合他们的关系,而不是让模型自己去猜“他们大概熟不熟”。
消息怎么沿边流动
边建立以后,第一个被激活的功能是信息传播。假设阿岚从一位住客口中得知,码头下个月要整修,搬运工会有一段时间没活干。
一条更符合现实的传播规则是:
- 阿岚知道了这条消息,这是“谁知道什么”里的一条新记录。
- 她在与大川的下一次互动中,可能提起这件事,概率取决于边的强度与她当下的话题。
- 大川获得消息,但他对消息的信任度取决于他对阿岚的信任,也取决于消息与他已知信息是否一致。
- 大川再转告工友,此时消息可能被简化,比如变成“码头要停工”,也可能被夸大。
这套规则有两个后果。第一,信息差自然产生:不是所有人同时知道同一件事,靠近消息源、关系紧密的人先知道,边缘的人后知道甚至知道错误的版本。第二,信息本身有可信度与来源,而不是一句人人皆知的公共设定。这也使得谣言、误传能够由结构产生,不必专门去写“谣言事件”。
互助与介绍工作:弱关系有时更管用
友谊不只带来聊天,它是一种资源通道。阿岚知道大川可能没活干,而她的旅馆恰好缺一个夜间看门的人。
这里出现一个很有意思的机制:介绍不一定发生在最亲密的边上。设想大川平时的圈子与阿岚的圈子不重合,那么他从阿岚那里得到的机会,往往是自己圈子里没有的。这类“弱关系”带来新信息的现象,游戏里可以由规则自然体现:
- 亲密的朋友之间,共享的信息重叠度高,新消息少,但愿意帮忙的意愿强。
- 弱一些的熟人之间,信息重叠度低,新机会多,但需要一条边被“激活”。
系统只需要让“互助行为”读取这些边属性,并在角色的目标里体现出来:大川的目标是“维持收入”,阿岚的目标是“找到可靠的人手”,两个目标恰好匹配,介绍工作就是一个合理的行为。行为的合理性来自目标与关系的叠加,不是导演硬塞的桥段。
当然,被介绍的工作也要走一遍前面提到的规则:岗位是不是真的存在,薪资是否进入家庭账户,大川是否满足条件。这部分可参见 失业后果如何一层层传播 里对岗位回路的说明。
小圈子怎么形成:三角与重复互动
当关系图中的边足够多,会出现聚集:几个互相熟悉的角色形成一个小圈子。它们不需要被“创建”,只要满足一些简单的条件就会出现。
- 闭合倾向:如果阿岚和大川是朋友,大川和船匠是朋友,那么阿岚与船匠更可能被介绍认识。
- 重复互动:经常在同一地点、同一时间出现的角色更容易互相熟悉,比如同一家早餐铺的常客。
- 共同目标:为码头整修一起请愿的几个人,会在共同事件中拉近距离。
小圈子带来的好处是社会有了“层次”:有人是圈内人,有人是外人,圈内信息流通更快,互助更多。同时它也带来风险:圈子会封闭,圈外的人越来越难被接纳;圈子里的偏见也会被放大。这些影响是社会模拟里值得被观察的部分,而不是应该被完全消除的“缺陷”。
冲突怎样扩散:站队与回避
关系图不只传递好事。假设阿岚和大川因为一笔拖欠的房钱闹翻了,两人之间的边强度骤降,类型被标注为“有纠纷”。
冲突不会只停在这两个人身上。共同好友船匠会面临选择:站在阿岚一边,站在大川一边,还是回避两边。他的选择依据是:
- 与两人各自的边强度与方向;
- 自己的性格,是重义气还是重和气;
- 这件事的经过,他从哪一方那里先听到了哪个版本;
- 站队会带来的利益或代价。
这里,大模型很适合用来生成船匠面对这件事时的内心权衡与说法,但最终“他选了哪边”要被写回关系图:船匠与其中一方的边变化,可能连带影响他与其他人的边。冲突就这样沿着关系扩散,形成小圈子的分裂或重组。
为了避免扩散失控,需要设置“冷却”:争执随时间降温,除非有新的触发;当事人有和解的可能;调停者(比如镇上的一位老人)可以作为一个能降低冲突强度的角色存在。
涌现与克制:什么可以放手,什么必须约束
社会模拟最吸引人的一点是涌现:没有人写过“旅馆会成为消息中心”,但因为阿岚与许多住客都有联系,她自然成了信息枢纽。研究里也确实有这样的观察,比如 Generative Agents 论文里,智能体在没有被要求的情况下,自发协调了一场情人节派对。
但对游戏来说,涌现需要克制,否则它很快会变成噪声。
- 该放手的:谁和谁成为朋友、消息如何传播、小圈子如何形成。这些只要机制自洽,结果可以出乎意料。
- 必须约束的:与世界规则、关键剧情节点冲突的结果,例如让一个被设定为“作者必须保留到结局”的角色因为一场冲突而被孤立到消失。
- 需要防止的:关系图变得稠密,每个人都与所有人相熟,社会就失去了结构;或者反过来,所有边都在衰减为零,城市变成一群陌生人。
一个实用的办法是给关系图设置结构性的软约束:每个角色能维持的亲密关系数量有限,时间和精力就是预算;同时保留作者可以“锁定”某些关系的入口,让重要剧情不至于被随机涌现冲走。这和互动叙事里“作者控制加生成”的方向是一致的。
怎么验证这张网是可信的
关系图容易被写坏,所以需要一些可以检查的指标。以下都是检查方法而非结果:
- 是否存在孤立节点:一个从不与任何人互动的角色,是设计如此,还是被系统遗漏?
- 消息传播的路径是否合理:能否回放某条消息经过了哪几个人、每一步为何发生?
- 关系变化是否有原因:任何一条边的强度变化,都应能追溯到具体事件。
- 行为是否与边相符:一个把某人视为仇敌的角色,不应在对话里亲切地称呼对方为知己。
一条边的重量
回到阿岚和大川。他们成为朋友,最终不是让好感度加了几点,而是让城里多了一条会传递消息、提供机会、也可能引发争执的通道。当每个人物都拥有这样的边,社会就不再是一群独立NPC的集合。规模变大以后,哪些边值得精细模拟、哪些可以合并成摘要,则是 一万个AI人物如何算得动 要回答的问题。