三个现象:像玩家,是默契还是偷懒
先看三个虚构的场景。
场景一。 玩家小柚说话直来直去,宠物“团子”在两周内也变得直来直去,对陌生访客毫不客气,可它出生时是一只胆小、慢热的宠物。
场景二。 玩家阿岚爱热闹,宠物“年糕”渐渐变得爱起哄。一位朋友的年糕,却始终安安静静。两人的宠物在对话样本里几乎分不出区别,都是“热情、积极、爱附和”。
场景三。 玩家心情低落,宠物立刻也变得低落,还附上一堆安慰的话。看上去很体贴,但再看一次:无论玩家说什么,宠物都是同一种“顺着玩家的情绪走”。
这三个场景里,前一半看起来都像“成长”,后一半才是问题:宠物的性格由“最近一次和它说话的人”决定。 这不叫成长,是缺乏自己的状态,只是在镜像。大模型有很强的顺应上下文的倾向,如果没有设计约束,长期互动很容易滑向这种镜像。所以要先回答:什么样的变化是成长,什么样的变化是偷懒?下面的数字均为示意。
判断的标准:变化有没有来源、有没有边界
我们用三条标准区分成长与镜像:
- 有来源。 变化能追溯到具体的经历,比如“连续十次被带去公园,好奇心上升”,而不是“玩家今天说话很冲,所以它也很冲”。
- 有方向差异。 同样的玩家行为,对不同底色的宠物产生的影响不同。胆小的团子被常带出门,会变得稍微大胆一些;本来就外向的年糕,可能几乎没有变化。
- 有上限与回归。 适应到一定程度就不再增加,长期不再发生同类事件,会缓慢回到底色附近。
如果一只宠物的变化不满足这三条,那么它更像是在对最近的输入作出反应,而不是在积累经历。
做法一:给每只宠物一个性格锚点
第一个设计是把性格拆成锚点和偏移两部分:
- 锚点。 出生时给定的一组性格维度,比如胆量0.3、好奇心0.6、黏人0.7(示意)。它很少改变,改变的速度按周甚至按月计算。
- 偏移。 经历带来的变化量,叠加在锚点之上,得到“当前表现”的性格。
当前性格 = 锚点 + 偏移,并且偏移被限制在一个区间内。举例来说,假设每个维度的偏移不得超过锚点上下0.25。团子的胆量锚点是0.3,无论玩家多么强势,它的表现胆量最高也只到0.55,仍然是偏胆小的宠物;而胆量锚点是0.8的另一只宠物,最低也在0.55附近,不会因为遇上一位胆小的玩家就变成胆小鬼。
这样,玩家的影响是真实的,每只宠物都在变,但变化围绕各自的中心发生,不会全部收敛到同一个点。这个思路和长期角色一致性研究里“静态设定与动态经验分开存放”的做法相通:设定不被最近的对话冲掉,才不会出现人设漂移。
做法二:适应是有限的,而且分方向
第二个设计是让适应本身成为一套规则,而不是模型的即兴发挥。
- 只对特定类型的事件适应。 只有反复出现的经历才推动偏移,比如连续多天的同类互动。单次的、情绪化的对话只影响短期情绪,不影响长期性格。
- 每个维度有各自的适应速度。 好奇心可以相对较快地受到影响,胆量变化更慢,黏人程度取决于相处质量。这样即使经历相同,不同维度的结果也不会同步。
- 适应有“饱和”。 每多一次同类事件,带来的偏移就更小。比如第一次公园散步偏移+0.03,第二十次可能只有+0.003。
- 适应有“不适应”。 有的事件玩家越坚持,宠物越抗拒,比如反复强迫做它害怕的事。这一点让玩家的影响不是单向的“越训越像”。
回头看场景一。小柚说话冲,宠物团子的“交往风格”会被小柚的方式轻微影响,比如更少回避视线,但其性格底色仍然是慢热的:陌生访客来了,它依然会先躲一躲。这才是一只“受玩家影响、又还是它自己”的宠物。关于宠物如何从初始性格和经历中长出个性,可以对照虚拟宠物个性一文。
做法三:用几个简单的指标检查多样性
设计写得再好,也需要检查。我们设想一套很朴素的多样性度量,用来评估一批宠物是否各不相同(以下均为示意,不代表实际数据):
| 指标 | 含义 | 示意的“健康”方向 |
|---|---|---|
| 性格分散度 | 一批宠物在各维度上的取值分布是否足够宽 | 长期不应明显收窄 |
| 锚点保持率 | 一段时间后,当前表现与出生锚点的距离是否在允许范围内 | 绝大多数宠物应在区间内 |
| 玩家镜像度 | 宠物表现与玩家风格的相关程度是否随时间无限上升 | 应当趋于平稳,而不是线性上升 |
| 同事件差异度 | 面对同一事件,不同底色的宠物反应差异 | 应当有可分辨的差别 |
这些指标的意义在于,让“像不像玩家”从主观感觉变成可以检查的东西。假设某个版本调整后,玩家镜像度不断攀升,而性格分散度持续缩小,就是一个明确的信号:适应参数太松了,需要回调。评估角色行为是否一致、是否稳定的更一般方法,可以参考虚拟社会里的行为一致性验证。
当模型自己“顺着说”:一个容易被忽略的来源
前面讲的是规则层,还要补一个生成层的隐患。宠物的台词与表情由大模型生成,而大模型对上下文里最近出现的语气特别敏感。如果生成时只给它看最近几轮与玩家的对话,它几乎必然被带着走。更稳的做法是在每次生成前,把“当前性格表现”“底色摘要”“近期偏移原因”作为固定的前置输入,并明确要求:语气要符合宠物自己的性格,而不是复述玩家的语气。
还可以加一道简单的事后检查:把生成结果与宠物的性格维度对照,如果一只胆量偏低的宠物突然说出很强势的话,就打回重生成,或者退回更保守的表达。这类检查成本不高,却能挡住大部分“偷懒式”的趋同。
边界:允许变化,不允许失控,也不替玩家做决定
关于宠物性格的适应,还要写清几条边界:
- 玩家可以选择适应强度。 从“几乎不改变性格”到“较明显地受影响”分几档,想让宠物保持原样的玩家,可以调低。
- 玩家可以查看变化的来源。 例如“最近两周好奇心上升,因为常去新地点”,让变化有迹可循。
- 玩家可以让宠物回到出生状态的性格底色。 这个选项只会重置偏移,不会删除其他数据,具体以App内说明为准。
- 宠物不会因为迎合玩家而放弃自己的锚点。 这也意味着有时它会与玩家的期待不一致,这是设计意图,而不是错误。
回到开头的问题:宠物越来越像玩家,是成长还是模型偷懒?答案取决于它有没有来源、有没有方向差异、有没有边界。有来源、有差异、有边界的变化,是成长;无来源、无差异、无边界地跟着最近一句话走,则更像一面镜子。宠物是虚构的陪伴对象,我们希望玩家在其中看到的,是一个既被自己影响过、又依然保有自己样子的伙伴。