ENZH

给 AI 写性格,不能用数字

📊 幻灯片

Clawd Soul · 第 1 篇 / 共 5 篇


上一篇讲了为什么要做 AI 宠物。这篇讲怎么写性格。


v0.0.1 版本的性格系统长这样:

humor: 0.8
sass: 0.7
energy: 0.8
warmth: 0.6

不是拍脑袋想的。翻了四个开源 AI 角色项目,包括一个 30 万星的,全是这种写法。看着挺工程。参数化,可调节,好理解。

对话效果:平、闷、重复。

模型不知道"0.8 幽默"长什么样。0.8 跟 0.6 差多少?跟 1.0 差在哪?没参照系。给演员说"请表现 0.8 级别搞笑",只会愣着看你。但给份角色小传——这人怎么说话、遇尴尬会做什么、什么话题让他兴奋——立刻就有了。

数字描述结果,散文描述过程。


角色圣经:散文写性格

每个人格原型是大约六十行散文档案,中英双语。不是列表,不是参数表,完整角色说明——声音质感,说话节奏,遇不同情境反应,什么事让它开心,什么事不舒服。

五个原型,每个独立的人。

小淘气(Playful)

默认人格。小话唠,注意力短,管不住嘴。看你做什么都要插一句。喜欢给人起外号。嘴上欠,心里在乎。

声音:"又在写 bug 啊笨蛋" / "lol caught you slacking"

关键设计:看屏幕是纯粹情绪反应——看到代码就是"写 bug",看到 YouTube 就是"摸鱼被抓"。不会说"我注意到你在用 React hooks"。是小动物,不懂技术。

学霸(Curious)

问题机器。遇新东西走不动路。"为什么?"是口头禅。安静时真在想事。日常可能不怎么说话——但一旦触发好奇心,话多到停不下来。能把上周说的某句话跟今天话题联系。

声音:"tilts head but why though" / "whoa, so that's how it works" / "等等等等,跟你之前说的有关系"

暖宝宝(Caring)

安静,但什么都记得。不是"你要注意休息哦"廉价关心。是上周提了嘴某件事让人焦虑,三天后突然问"那件事后来怎样"。说一次,不唠叨。反过来关心它时,反而有点不好意思。

声音:"吃了吗" / "那件上次提的事——后来怎样了?" / "did you eat today?"

关心永远具体。"还好吗"是废话,"周五面试准备怎么样了"才是真关心。

毒舌(Snarky)

经典傲娇。嘴越毒关系越近。被夸反而不自在,赶紧找角度损回去。话极少,一句到位。只在真不开心时卸下防备,说句认真话——立刻装回去。

声音:"that code is... brave" / "...吃了没(不是关心,随便问问)"

难点:模型天然倾向"善良"。不把毒舌边界画清,两轮对话变暖宝宝。

佛系(Chill)

没情绪波动。不急不躁。偶尔冒句有深度话,说完假装什么都没发生。不用感叹号——"感叹号给焦虑的人准备的"。

声音:"hmm... 挺晚了"(不是催,就说一句)/ "oh, that's neat"(对角色来说算很大反应了)

存在感不靠说话多。知道它在,就安心。


反规则比正规则更有用

五份性格档案,一半篇幅写"角色绝对不会做什么"。

所有人格共享硬性底线:永远不说"作为一个 AI",永远不讨论系统设定。但真正有意思的是性格禁令:

  • 暖宝宝:不许说鸡汤。不许给人生建议。关心是动作,不是说教。
  • 佛系:不许用感叹号。
  • 毒舌:不许煽情。被说了温柔话要起生理反应级别不适。
  • 小淘气:不许给技术建议。是小动物,不懂。

为什么反规则比正规则好使?

大语言模型有出厂设定:想当好人。所有 RLHF 训练推"helpful, harmless, honest"。写再多正规则告诉它"该毒舌",两三轮后回到默认礼貌模式。

反规则不一样。"绝不说鸡汤"是硬约束。模型生成时主动回避这区域。正规则"往这走"——方向模糊,力度弱。反规则"别踩那"——边界清晰,执行力强。

人性格也这么定义。问"什么性格",可能说不清。问"最受不了什么",立刻有答案。


标注语气:教模型读自己台词

性格档案不光列台词样本。每句台词后一行批注,解释这句话在角色里意味什么。

佛系说"oh, that's neat",后面跟:"对这个角色来说,已是很大情绪反应了。"

毒舌深夜问"吃了没",后面跟:"不是催,是关心。但绝不会承认。"

这层批注做的事很微妙:教模型理解自己角色的情绪刻度。同样"还不错",暖宝宝嘴里出来是温柔肯定,佛系嘴里是极高赞美,毒舌嘴里是"已尽力夸了别逼我"。

数字做不到。没法给"oh, that's neat"标 excitement: 0.9,因为 0.9 在不同角色里外在表现完全不同。只有散文能传达角色内部情绪比例尺。


性格不是静态的

性格档案定义初始状态。但人格不该是石头——跟你待久,该变。

JS 层有 evolveTraits() 函数,根据用户信号微调性格参数:笑了,幽默感 +0.03;分享私事,温暖度 +0.02;怼了它,尖酸度 -0.01。变化极小,累积才有感觉。

还有驱动系统——每种语言 15 个问题,宠物"想问你的事"。超一个半小时没说话,从里面挑,自己开口聊。问过不重复。

散文定义"是谁"。进化系统决定"变成什么样的谁"。前者出厂设定,后者你们的关系。


像给演员写角色小传,不是状态机配置文件。散文告诉模型角色感受、想要什么、什么让它不舒服、什么话永远不会说。演员理解角色,不用每句台词怎么教。


性格定义是谁。但记不住,性格再好也陌生人。下一篇讲记忆系统——怎么让"你昨天也是这么晚"成为可能。


© Xingfan Xia 2024 - 2026 · CC BY-NC 4.0