不要把 NPC 做成"有性格的木偶"

3 阅读11分钟

最近在看一些 AI Agent 游戏和开放世界模拟项目时,我越来越强烈地意识到一个问题:

很多 NPC 系统的问题,不是"不够智能",而是"对人理解得太浅"。

表面上看,它们已经比传统状态机高级很多了。它们会说话,会规划,会根据规则行动,甚至还会有"性格""记忆""关系"。但只要多观察一会儿,就还是会感到一种挥之不去的假。

这种"假"不一定来自技术能力不足。很多时候,它来自一个更根本的地方:

系统把"人"过早地写成了文字、规则和标签。

而一旦这么做,人物就开始失去真实感。

一、问题不只是 NPC 不够聪明

最开始我以为问题只是模型不够强。比如便宜模型不够聪明,推理不够深,所以 NPC 看起来木、蠢、缺乏层次。

但越想越觉得,这只是表层问题。

真正的问题是:

我们经常把 NPC 设计成"根据若干属性做决策的对象",而不是"在世界中持续生成自我的主体"。

这两者差别非常大。

前一种思路里,NPC 通常长这样:

  • 有一些性格标签
  • 有一些关系数值
  • 有一些记忆条目
  • 接到事件之后做一次决策
  • 输出一个动作

这在工程上很自然,也很常见。但它隐含着一个前提:

人可以被压缩成几个稳定维度,然后据此行动。

而这恰恰是我越来越不相信的事。

二、为什么"固定性格"让我不满意

很多系统喜欢给人物一个性格描述,比如:

  • 谨慎
  • 冲动
  • 冷漠
  • 善良
  • 重情义

这看起来很合理,因为它容易理解、容易实现,也容易解释人物行为。

但问题是,真实的人并不是这样存在的。

1. 性格不是常量

人会变。而且不是简单地"数值波动",而是会被经历改变、被创伤扭曲、被关系塑形、被权力放大。

一个人少年时、失意时、得势后、受辱后,往往像不同的人。如果系统把性格写死成几个长期不变的标签,那最多只能得到"人物设定",很难得到"人物人生"。

2. 性格不是一句话

"谨慎"这种描述,听起来像在说一个客观事实。但实际上,它只是对复杂行为分布的一次粗暴压缩。

一个人可能:

  • 对利益很谨慎
  • 对感情很不谨慎
  • 平时谨慎,被羞辱时冲动
  • 对强者谨慎,对弱者冒进

也就是说,人不是一个标签,而是一整片情境相关的反应分布。一旦把它写成一句话,就已经丢掉了大量真实感。

3. 很多所谓性格,其实是关系性的

我们以为某人"冷漠",可能只是:

  • 对陌生人冷漠
  • 对亲近者柔软
  • 在羞耻时冷漠
  • 在掌握权力时冷漠

换句话说,很多特征不是"他是什么",而是:

他在什么关系里、什么局势下,会呈现出什么样子。

所以把性格写成固定文本,本质上是在把流动的关系现象误写成静态属性。

三、真正的问题:文字会制造一种伪客观性

我后来越来越在意的一点是:

一旦把人物写成文字,文字就会开始伪装成真相。

比如"这个角色自私""这个角色善良""这个角色高傲"。

这些词一旦被写下来,就会让系统和设计者都不自觉地把它们当成角色本体。但其实它们往往只是观察者在某一时段、某一维度上的概括。

问题不只是"概括不准确",而是:

文字会把本来动态、关系性、模糊、矛盾的东西,伪装成一个清楚、稳定、客观的事实。

而真实的人,恰恰不是这样。

真实的人有很多部分:

  • 是矛盾的
  • 是自己也说不清的
  • 是会误解自己的
  • 是会对不同人呈现不同面向的
  • 是无法被一句话说完的

所以如果人物系统把"文字描述"当成核心本体,那它从一开始就在远离真实。

四、我逐渐形成的一个看法:人物不该被定义,而该被生成

如果固定性格不对,文字定义不对,那 NPC 的本体到底应该是什么?

我现在越来越倾向于这样理解:

人物不应该先被定义成"是什么样的人",而应该被表示成"如何在世界中不断生成自己的人"。

这意味着,人物系统的核心不该是标签,而该是动态结构。

至少包括这些层面:

  • 底层驱动力
    比如安全、认可、控制、依附、复仇、意义感

  • 当前心理状态
    比如焦虑、羞耻、愤怒、希望、疲惫、空虚

  • 记忆与痕迹
    不是发生过什么,而是哪些过去还在影响他

  • 多维关系
    不是喜欢/讨厌,而是信任、依赖、嫉妒、敬畏、怨恨、亲密同时共存

  • 自我叙事
    他如何理解自己,如何解释过去,如何合理化自己

  • 变化轨迹
    他正在朝哪里偏移,而不是只看当前状态

  • 行为习惯
    他习惯怎样面对冲突、怎样表达感情、怎样在压力下反应

在这种理解里,"性格文字"不再是本体。它最多只是系统在某个阶段,对人物当前状态的一次观察性总结。

也就是说:

本体是动态状态,文字只是投影。

五、人物最像人的时候,不是"稳定",而是"有内在张力"

很多系统喜欢追求一致性。一个角色一旦设定成什么样,就希望他一直像那样。

但真实的人,不是一个统一稳定的整体。真实的人经常是内部冲突的:

  • 想靠近,又怕受伤
  • 想复仇,又仍然眷恋
  • 想做个好人,又舍不得权力
  • 鄙视别人,又渴望被别人承认
  • 嘴上说不在乎,内心其实非常在乎

所以如果人物系统最终总是把一切冲突收敛成一个清晰、统一、可预测的人设,那它还是会显得假。

我越来越觉得:

人不是一个值,人是一个矛盾场。

真正像人的 NPC,不该只有一个人格中心。它内部应该有多个部分性自我在拉扯,比如:

  • 求生的自己
  • 想被认可的自己
  • 想复仇的自己
  • 想依附的自己
  • 害怕暴露脆弱的自己
  • 仍然想做个好人的自己

这些部分不总是一致,也不总是同一部分主导。不同场景、不同关系、不同事件,会让不同部分上台。

一旦做到这一层,人物就不再像一个固定函数,而更像一个内部持续争论的存在。

六、人物不是"记住事件",而是"形成痕迹"

传统记忆系统常常只是在存事件。发生了什么,记下来;过一阵再检索出来。

但真实的人并不是由"记住什么"构成的,而是由"什么在自己身上留下了痕迹"构成的。

同样一件事,对不同人造成的影响可能完全不同。

比如一次公开羞辱,有的人会:

  • 更自卑
  • 更愤怒
  • 更想证明自己
  • 更不信任权威
  • 更不敢暴露脆弱

所以重要的不是事件列表本身,而是事件留下了什么:

  • 情绪残留
  • 解释模板
  • 关系变化
  • 行为阈值变化
  • 自我叙事改写
  • 长期驱力偏移

也就是说,人物不是被"经历"塑造,而是被"经历留下的组织性痕迹"塑造。

这一点很重要,因为它会直接改变系统设计目标:

不是做一个"会回忆过去"的 NPC,而是做一个"过去一直还活在现在里的 NPC"。

七、最像人的,不是透明,而是会对自己撒谎

还有一点我越来越觉得不可或缺:

如果 NPC 完全透明,它就会像机器。

真实的人并不如实地知道自己。人会合理化自己、压抑自己、投射自己、伪装自己、误解自己。

他可能明明是因为嫉妒才做某件事,但会相信自己只是"在维护公平"。

所以一个更真实的人物系统,至少要区分三层:

  • 实际驱动
  • 自我解释
  • 对外表达

这三层应该经常不一致。

例如:

  • 实际驱动:嫉妒
  • 自我解释:我是在维护秩序
  • 对外表达:他这样做确实不合规矩

这种不一致不是缺陷,反而是人格感的来源。因为真实的人,并不是一个完全自我透明的存在。

八、人物真正的变化,不是属性波动,而是结构变形

如果 NPC 只是:

  • 愤怒 +0.2
  • 信任 -0.1
  • 好感 +0.3

那它仍然太像表格。

真实的人不是简单地"值变了",而是内部组织方式会变。

比如:

  • 原本通过亲密关系维持自我,后来改成通过权力维持自我
  • 原本受伤后会自责,后来受伤后开始攻击别人
  • 原本相信努力会被看见,后来相信世界只尊重强者
  • 原本柔软的部分长期被压制,后来长出了一个复仇性的自己

这已经不是属性更新,而是人格结构在重组。

所以一个真正有生命感的人物系统,不能只允许参数变化,还必须允许:

  • 新的部分性自我生成
  • 旧的自我被压制或吞并
  • 防御机制改变
  • 自我叙事崩塌和重建
  • 关系模式整体变形
  • 驱力的前后台重排

换句话说:

人物不是在原结构里微调,而是会慢慢变成另一个结构过的自己。

九、我理想中的 NPC,不是对象,而是过程

一路想下来,我越来越不想把 NPC 理解成一个"有若干属性的角色对象"。

更接近我预期的,是把 NPC 理解成一个过程:

一个不断感知、解释、内耗、行动、留痕、变形的主体过程。

也就是说,外部世界发生一件事之后,不应该是:

事件 → 决策 → 动作

而应该更像:

事件
→ 主观感知
→ 唤起记忆
→ 激活情绪
→ 激活不同部分性自我
→ 防御机制介入
→ 自我叙事解释
→ 内部协商
→ 形成意图
→ 外显行为
→ 结果写回
→ 留下新的痕迹
→ 人格结构继续被世界改造

只有当人物系统真正包含这一整套内部运动,NPC 才会开始摆脱"规则木偶"的感觉。

十、这条路意味着什么

如果真的按这个方向做,就必须承认:

这不是"加几个性格参数"能解决的问题。这甚至不只是"接一个更强的大模型"能解决的问题。

这要求我们重新回答一个非常根本的问题:

人到底该怎样被表示?

不是作为一段文字。不是作为几个标签。不是作为一个稳定函数。

而是作为:

  • 有驱力的
  • 有关系的
  • 有记忆痕迹的
  • 有内在冲突的
  • 会误解自己的
  • 会被历史持续重写的
  • 永远无法被一次性定义完的

主体。

这当然会很复杂,很重,很难做,很难调。但如果目标真的是做"像人"的 NPC,而不是"有设定的 NPC",那这条复杂性并不是可以轻易删掉的冗余,而是问题本身的一部分。

结语:不要做"有性格的木偶",要做"会生成自己的存在"

我现在越来越相信,好的 NPC 系统不该追求一句话定义清楚角色。恰恰相反,它应该让角色始终保有一种"无法被一次性说尽"的感觉。

因为真实的人就是这样:

你可以认识他很久,但你仍然不能彻底定义他。

所以如果要用一句话总结我现在的想法,那就是:

不要把 NPC 做成有性格的木偶,而要把它做成会在世界中持续生成自己的存在。

这可能才是"人物智能"真正值得追求的方向。

原文发布于 blog.wurank.top