学习如何创建生动、一致且引人入胜的AI角色
成功的角色卡不仅仅是填写完所有字段,更需要内容上的精心设计。以下是一些编写高质量角色卡的技巧,帮助你的角色在对话中更加生动、一致。
一个令人难忘的角色往往是立体的、有深度的。在撰写角色描述时,尽量从多个角度刻画角色,包括但不限于:基本信息(姓名、年龄、种族等)、外貌特征、性格爱好、背景经历、行为习惯。
通过上述要素的组合,你的角色会更加丰满。例如,不只是写"他是一个骑士",而是:
艾尔文是一位30岁的人类骑士,身材高大且伤痕累累,沉默寡言。曾独自一人在北境雪原生存多年,双眼透出与年龄不符的苍老。他极度厌恶黑魔法,因为黑魔法曾毁掉他的家乡;但对孩童非常温柔,会拿出随身的糖果逗他们开心。
这样角色的轮廓就鲜活起来了。
此外,考虑为角色赋予动机或目标。哪怕在闲聊中体现不多,有一个底层动机会让角色言行更统一。例如"艾尔文表面冷漠,其实内心在寻找失散的妹妹",那么在对话细节中,他对有关"妹妹"或"家庭"的话题可能格外触动,这种潜在设定能潜移默化影响回复风格,使角色反应更真实可信。
在长时间对话中,模型有时可能"跑偏"角色设定。我们的任务是通过角色卡和提示,尽量让角色始终如一。这里有几种方法:
在角色描述或示例对话中,多展示角色独有的说话方式和用词习惯,让模型形成模式。例如角色爱用古风,那么描述和示例里尽量多用文言句式。模型会倾向延续这种语气。
如果角色有口头禅,也让TA频繁出现于示例,以便模型记忆。
开场白是一锤定音的机会,一个风格鲜明的开场白能将模型牢牢带入状态。
同时,如果发现模型对某些敏感设定容易遗忘,可以考虑在聊天后指令中每次提醒。例如你的角色有失忆症不记得自己的名字,你可以在后置指令提示"请勿让{{char}}直接想起自己的真实姓名"。
如果角色在对话过程中获得了新的重要信息(如用户告诉了角色他的生日等),这些新信息最好通过前端的"记忆/笔记"功能添加,或者临时更新角色的scenario或角色书。这属于进阶技巧,旨在弥补模型遗忘。
不过一般聊天中,模型会基于聊天历史记忆最近的信息。角色卡更多是静态人设,"记忆一致"主要指角色不要把自己前后说的话搞矛盾。
也就是突然不按设定行事。为防止这种情况,可以在系统提示中直接警示模型不得违背上述人设。例如:"你绝不透露你其实是AI,不会跳出现实角色身份"。
大多数模型会遵循,但在高压或特殊情况下(比如用户刻意要求AI脱离角色),可能仍会OOC。这时需要靠用户自行引导回到正轨或者使用对话记事功能。
精简角色定义以利于"记忆"也是不得不提的一点。模型的上下文窗口是有限的。如果你的角色卡写了大量无关紧要的细节,反而会减少模型能记住用户话语的容量,得不偿失。因此,保持人设信息必要且充分,让模型能把重心放在关键设定上,才能更稳定地扮演好角色。
Prompt工程指的是调整提示词表述来影响模型输出。在角色卡编写中,我们也可以运用一些小技巧来强化角色定位,提高模型扮演的准确度:
在描述或系统提示中直接对模型说"你是XX"是非常有效的手法。许多默认系统消息都采用这个模式,因为模型很容易理解这种直接的身份指令。
所以,不妨在角色卡的开头部分(比如描述字段一开头,或者system_prompt字段)加一句类似:"你是[[角色名]],一个…(身份)"。
例如:"你是艾尔文,一名饱经风霜的骑士,肩负寻找亲人的使命。" 这句话简单直接,却能显著减少模型串戏成其它角色的概率。
决定模型以第几人称来扮演角色。通常聊天角色会用第一人称自称"我",称呼用户为"你"。这是默认的,也是最自然的。
如果想要角色以第三人称自称(少见情况,比如讲故事口吻),可以在提示中明确说明。但多数时候保持正常的人称有助于沉浸式对话,不建议过多改变。
有时你希望AI的回答带有一定格式,比如每次回答分段,或者带表情符号等。除了可以在后置指令中提及,也可以在示例对话中示范这种格式,让模型学样。
如你希望角色每次描述动作,都用*动作*
标记,那就确保示例中角色回答里都包含此格式。模型往往会沿用示例格式,达到你想要的效果。
在角色描述中埋入一些触发型关键字,以诱导模型输出相关内容。例如,你的角色是一位诗人,你可以在描述里放几句TA的诗作摘录。
当用户交谈碰到类似主题时,模型就有素材可用来回应。这种方法类似于在角色卡里预置"语料"。当然不要过度,否则模型可能频繁重复这些内容。
如果有些行为绝对不符合角色,你可以在系统/后置指令里明确禁止。如"你从不伤害儿童"或"你不讲粗话"。这属于在提示中加入负面约束,以减少模型不当发挥。
需要注意,以上技巧要适度运用。过多的硬性规则可能使对话显得死板,让模型畏手畏脚。角色扮演需要一定的灵活度来应对用户各种输入。所以在强化角色定位和保持对话自然之间要取得平衡。
通常来说,只要角色卡信息充足且连贯,现代的大模型已经能够很好地理解并扮演,无需过度微操。