标签只是结论,账本才是原因
假设虚拟城市里有个印刷厂工人叫老周,某天被通知“岗位取消”。最快的实现是:他的状态从“在职”改成“失业”,头顶出现一个图标,剩下的一切照旧。
这个做法的问题不在偷懒,而在它把结论当成了原因。“失业”本来应该是一串事件的结果:工厂订单下降,岗位被合并,工资停止发放,然后才有后续的一切。如果它只是一个可以随手改的标签,那么下游的家庭、店铺、房东、朋友都没有任何东西可以读取,社会就断掉了。
所以这篇文章的做法是反过来:不先谈“失业角色该说什么”,而是先问他名下有哪几笔账、哪几条线会被同时扯动。这是 AI模拟人生 里“人物、家庭、经济、社会”几层耦合在一件具体事上的展开。文中的数字全部是示意,用来演示机制,不对应任何真实世界的水平。
第0天:先把账本摆出来
在推演之前,需要一份最小的结构化状态。举例来说,老周所在的家庭是这样的(示意数值,单位为虚拟货币):
| 项目 | 示意数值 | 说明 |
|---|---|---|
| 老周月收入 | 300 | 失业后归零 |
| 配偶月收入 | 150 | 兼职,不受影响 |
| 每月固定支出 | 320 | 房租、水电、孩子学费 |
| 每月弹性支出 | 100 | 食品、外出、杂项 |
| 家庭储蓄 | 500 | 缓冲垫 |
这张表有三个特点。第一,所有的量都是数字,可以被经济系统计算;第二,它属于“家庭”而不属于老周一个人,因为孩子学费和房租是共同负担;第三,每个量都标明了由谁写入、被谁读取,比如收入由劳动回路写入,采购决策读取弹性支出。
大模型在这里没有位置。它不负责算账,只有在账算出来、需要一个人物做“选择”的时候才会被叫来。
第1天到第7天:收入断了,但生活还没有变
失业事件写入后,第一步是直接影响:老周的月收入变成0。此时经济系统按规则做一次结算。
- 家庭月收入从450降到150。
- 固定支出320不变,弹性支出100暂时不变。
- 每月缺口约270,由储蓄垫付,储蓄500大约能撑不到两个月(示意)。
第一周里,家庭的行为几乎看不出变化,因为“储蓄还有”。这个延迟很重要:如果失业当天就出现拖欠房租、搬家,玩家会觉得系统在乱来;更像现实的节奏是先耗缓冲,再改行为。因此需要一个“财务压力”变量,随缓冲下降而上升,作为后续决策的输入,而不是让角色根据一句文字描述凭感觉反应。
这一阶段大模型的合理用法很有限:当玩家碰到老周时,让他的台词带上一点回避和强撑,这是用“压力”这个数值去调制语气,而不是让语气反过来决定压力。
第2周到第4周:消费开始收缩,冲击向外扩散
压力上升到某个区间以后,家庭的采购规则开始改变。假设规则是:压力超过一个阈值,弹性支出按比例下调。这样就出现了二阶影响。
- 老周家从常去的小面馆改为自己做饭,面馆这个家庭带来的收入减少。
- 面馆的月流水略降,若同时有几户家庭做出相同调整,降幅就会累积。
- 面馆老板的处境随之变化:也许少进一次货,也许把一名兼职的排班减半。
这一条链很关键,因为它说明“失业”对社会的影响并不来自某个人说了什么,而是一个家庭的支出变化,变成了另一个家庭的收入变化。只要消费回路真实存在,冲击就会沿着它自动传导,不需要额外写“失业引发店铺萧条”的剧情。
同时需要克制:单个家庭的少量变化不该被夸大。示意上,一户家庭少吃几次面,对一家面馆几乎没有影响;只有当同一街区、同一行业里同时出现类似变化,效应才会显现。所以我们倾向于按街区聚合结算,而不是给每一笔小额消费都触发一次大模型思考。
第2个月:住房与选择,才轮到大模型出场
储蓄见底之后,家庭要面对真正的分岔。这时才是“做选择”的时刻,也是大模型最有价值的地方,前提是选项由系统先列好。
系统给出可行选项及其代价(示意):
- 向亲戚或朋友借钱:保住住房,但增加一笔关系上的“人情债”。
- 搬到更便宜的住处:降低固定支出,但通勤变长,孩子可能转学,邻里关系被切断。
- 接受更低薪的临时工作:收入部分恢复,但可能让老周的自尊和技能标签受影响。
- 拖欠房租:短期缓解,但触发与房东的冲突事件。
老周选哪一个,取决于他的性格、目标、记忆和他所处的关系网。一个谨慎、重视面子的人也许宁愿搬家也不开口借钱;一个人缘好的人则更可能先求助朋友。大模型在这里做的是在系统给定的选项内,结合人物设定做出有个性的选择并解释理由,而不是凭空发明第五个不在规则里的出路。
选项的边界由系统守住:借来的钱要从对方账户里真实扣除,搬家要真的换住处并更新关系图上的“邻居”边。这样,选择才会有后果,而不是只在文字里说说。
社交与情绪:账本之外的那一半后果
经济只是失业的一半。另一半是社交与情绪,同样应该被记录成状态,而不是一句“他很沮丧”。
- 关系变化:借钱事件在关系图上写入一条带时间的记录。如果对方爽快帮忙,信任上升;如果一再拖延归还,关系可能转冷。朋友之间的关系如何继续影响社会 里会展开这种边属性的设计。
- 情绪与压力:长期缺口、被拒绝、被帮助,都会写入情绪状态,并影响老周下一次面对相似情境时的倾向。
- 记忆:他会记住“谁在我最难的时候帮过我”。这条事件记忆被赋予较高的重要度,很长时间都不会衰减,以后他遇到那位朋友时,态度会有所不同。
- 家庭内部:配偶多打了一份工,孩子察觉到氛围变化,家庭氛围变量下降,进而影响所有成员的情绪起点。
这些量之间也互相反馈:压力大,选择趋于保守;关系好,压力会被缓冲。一个好用的经验是,每一类后果都要有一个可被查询的落点,否则它就只是当下那句台词的装饰,明天就消失了。
不要只写坏结局:恢复也是链条的一部分
一条只会往下滑的因果链,会让模拟变成灾难演示。合理的系统需要让恢复同样来自结构,而不是来自一次“运气好”的随机事件。
- 岗位回路:其他企业出现空缺,招聘信息沿关系图传播,认识的人会先知道。
- 技能与经历:老周做过印刷,就更容易接到相近岗位;这是他的事实记忆在起作用。
- 社会缓冲:互助、临时救济这类机制可以由玩家或作者设定,减缓下滑速度。
- 时间因素:压力随着状况稳定会自然回落,避免角色永远处于崩溃状态。
如果恢复和恶化都出自同一组规则,玩家才能理解“为什么老周三个月后又有了收入”,也才能通过介绍一份工作或组织一次互助,真实地改变结果。
校验:怎么知道这条链没有跑偏
这套推演最怕两种问题:一是“数字对不上”,比如借出去的钱没有从对方账户里扣掉;二是“行为对不上”,比如压力很高的角色仍然大手大脚。
可以做的校验包括:
- 守恒检查:一轮结算前后,全城的货币总量应按规则变化,不应凭空出现或消失。
- 回放检查:同样的事件序列和随机种子,应该得出同样的结果,便于定位是哪一步出错。
- 一致性检查:角色行为与其压力、性格、关系是否矛盾,例如已经搬进小房子的家庭,不该再出现“豪华晚宴”的记录。
- 抽样复盘:随机抽取一些家庭,把它们的时间线整理成文字,检查是否讲得通。
回到那个标签
失业标签当然可以保留,它对玩家来说是有用的界面提示。但它应当像仪表盘上的指示灯一样,只是底层账本状态的一个读数,而不是让整个系统缺席的替代品。当收入、家庭、消费、住房、关系与情绪都能被读取、被改变,一个角色失业才会真正牵动周围的人,这也是大发娱乐模拟人生想把“人物脚本”推向“社会系统”的原因。