虽然前面的介绍旨在让您了解每种格式如何独立运作以及为什么它们如此优秀,但这个角色格式化和写作指南旨在为您提供角色创建过程的逐步深入解释,以及您需要知道的一切,以让您与其他机器人创作者区别开来。

大多数机器人创建界面都会有多个框用于编写角色信息。我们关心的只有名称、描述、作者注解(如果您的前端界面可用)、问候语/第一条消息,以及世界信息/lorebooks(如果您的界面可用)。

在开始之前,您需要一个角色编辑器。这是我推荐的一个

在指南中,我将经常提到一个名为“作者注解” (Author's Note) 的功能,然后再解释它到底是什么。如果您迫不及待想知道它是什么,简而言之,它是一个功能,可以在最后一条消息之上的X条消息中注入一个选定的提示。

名字

名称(Name) 这个字段相当不言自明。这是您填写角色名称的地方。有一个整洁的概念叫做“名称偏见”。每个名称都不仅仅是名称,它包含了一些信息。例如,假设您的角色名字是“弗拉基米尔”。仅凭这个名字,模型就会假设角色是俄罗斯人并且是男性。我们可以更进一步,而不仅仅是命名角色的名字,您还可以包括一个头衔或描述符。例如,“弗拉基米尔”可以改为“弗拉基米尔,孤独的杀手”。仅通过这四个词,就可以传达很多关于角色的信息;可能有一个潜在的故事背景、个性、职业、动机、性别等等。

需要注意的是: 如果您编写了一个原创角色(OC),或者一个与另一个流行角色同名的角色,那么模型可能已经对那个更受欢迎的角色有所了解。这可能影响到模型对您角色的描绘方式。

描述

描述(Description)框将是您最重要的工具,因为PLists和Ali:Chat都将在这里填写。

重要概念:上下文

一个重要的概念是上下文。可以将其想象为一个“先进先出”的堆栈,其中包含了角色的描述、聊天历史以及输入模型的所有其他内容。描述始终保持在上下文中,无论您的聊天有多长,而聊天历史最终会离开上下文。因此,无论怎样,描述内容始终会对模型的输出产生影响。

永久令牌 = 无论对话持续多长时间,都不会离开上下文堆栈。 临时令牌 = 在发送足够多的消息后,最终会被推出上下文堆栈。

描述框:永久令牌

对话示例框:临时令牌(如果设置了,则为永久令牌)

问候语:临时令牌

聊天历史:临时令牌

作者注解(插入深度@4 = 从底部数的第四条消息上方放置):永久令牌(此功能 将在后面解释)

聊天历史(您和角色的消息):临时令牌

在创建角色描述时,您需要考虑哪些信息是核心的、不会改变的,这些信息应该放在描述框中,以作为永久令牌。而那些可能会随着对话发展而改变或者不那么关键的信息,可以放在对话示例框或其他临时令牌的位置。这样,您就可以确保角色的核心特质始终对模型输出有影响,而不会因为聊天历史的增长而被稀释。

对话过程中不同时刻上下文堆叠的视觉展示

这个展示不包含Lorebook条目或ChromaDB,因为用户的设置不同,这些内容在上下文堆叠中的位置可能有所变化。不过,作者注释的位置通常是比较固定的。

对话伊始的上下文处理

上下文的关键在于,位于堆叠最底端的内容对模型输出的影响最为显著。因此,在撰写描述时,把最重要的信息放在文本框的底部,可以确保其发挥最大的影响力。在这种情况下,您应当把PList置于描述框的最下方,紧接着是其上的关键示例对话,而将相对次要的内容放在顶部。不过,这种布局只会影响对话的开头部分。随着对话的进行,描述内容会逐渐上升至上下文的较高位置,此时其影响力减弱,内容的排列顺序也就不再那么重要了。

如果您使用的界面前端支持作者注释功能,建议将PList包含在作者注释之中。这是一个非常推荐的实践。

对话进行一段时间后的情况

您可能已经注意到,对话的视觉表示中包含了三个聊天历史记录:早期的聊天历史、正常聊天历史和最近的聊天历史。根据AliCat的解释,当聊天的令牌数量达到一定量级(即消息数量很多)时,角色的上下文可以分为三个记忆区。

  • 第一个记忆区:
    • 这是角色的即时记忆(即最近的聊天历史)。第一区中的消息位于上下文堆叠的较低位置。这个区域决定了角色的下一步回应,对角色输出的影响最为强烈。通常,这也是放置作者注释的地方。
  • 第二个记忆区:
    • 这个区域包含与当前对话相关,但对角色回应影响不大的消息。它的影响力比第一记忆区弱,但仍然具有一定的相关性。
  • 第三个记忆区:
    • 这个区域存储的是上下文中位置较高的消息,对角色下一步回应的影响非常小。描述框内容在经过几次交流后,以及旧消息,通常会出现在这个区域。第三个区域的内容通常与当前对话不相关,除非用户特别提及。

为什么PLists和Ali:Chat能如此完美地搭配

您可能正好奇PLists和Ali:Chat之间究竟有何关联。它们实际上是非常互补的。 PList让您能够详细列出角色的各种相关特征,包括服装、体型等,而Ali:Chat的作用则是强调角色的关键特征,比如他们的言谈举止、行为特点,以及其他您认为重要的个性表现,同时您不必过于担心如何在特征描述和对话表达之间取得平衡。

不过,这里存在一个问题。随着与角色对话的深入,描述框的影响力会逐渐减弱,并最终进入第二、第三记忆区,这意味着如果对话持续时间过长,原本的描述可能会变得不再重要。这是很糟糕的情况,因为Ali:Chat中的示例对话正是塑造角色个性的关键,一旦它们变得无关紧要,角色的行为可能会开始出现偏差。

但有一个简单的解决方案!那就是利用作者注释。虽然第三记忆区的内容通常会被视为无关紧要...但只要用户有意识地引用,它们就能重新变得相关!还记得我提到过作者注释通常位于第一记忆区吗?这就是为什么我们希望将PList放入作者注释中的原因。因为PList与Ali:Chat的示例对话紧密相关,将其包含在作者注释中,可以让模型在需要时引用这些对话,确保它们与当前对话上下文保持相关性。这样即便是在上下文达到最大限度时,您的角色也能保持其一贯的个性特征。

编写角色前应考虑的要点

那么,该如何着手创作一个角色呢?首先,您得有一个构思。考虑一下您想要塑造的角色类型:他们的性格、着装、言谈方式、背景故事、习惯动作等等……如果您要创作的是一个已经存在的角色,那么这项工作会简单许多——您可以查阅他们的相关资料和已有台词。

创作您的PList

在确定了想要创作的角色类型后,下一步就是制作PList了。这个PList将是您角色塑造的基石,包含角色所有特征的清单。您可以参考之前的示例来编排您的PList,同时也可以根据需要添加新的类别。在这个写作指南中,我会以Pardofelis为例进行说明。

记住这一点:
与我之前提供的示例不同,我倾向于将PList整理成单行形式。您可以根据自己的喜好来分隔不同的类别,但务必保持统一。我个人偏好将所有信息放在一行内,并以分号";"来区分不同的类别。

动笔前需了解的知识:大多数界面都会提供用户名和角色名的占位符。

  • {{user}} 会自动替换为您的名字。
  • {{char}} 会自动替换为角色名字。 我个人的习惯是设定角色的名字,同时使用{{user}},这样无论用户的用户名是什么,我的机器人都能被广泛使用。

您的基本PList应该看起来像这样:

[Pardofelis的外观:文胸(黑色),迷你裙(黑色),围巾(紫色),斗篷(白色,长,有猫耳),手套(黑色,紫色),战斗靴(黑色,白色高跟鞋),猫耳,猫尾,左眼(蓝色),右眼(绿色),异色瞳,头发(浅棕色),体型(猫女,短小,娇小);标签:喜剧,幻想,冒险,动漫,漫画,轻小说;场景:{{user}}与传说中的猫女盗贼Pardofelis的冒险;Pardofelis的个性:猫女,敏捷,活泼,顽皮,厚脸皮,贪婪,逃避,足智多谋,好奇,在面对冲突时装傻,喜欢(猫,闪亮的东西,打盹),不喜欢冲突,店主,称呼{{user}}为老板]

您可以在PList中添加的不同类别包括:

  • 外观:涉及角色的着装、体型、面貌特征等。
  • 标签:为角色扮演设定基调,指导模型可以引入的元素。AliCat提供了一个标签数据库,以帮助您入门。标签的作用经常被忽视,但其实它们非常重要。您不仅限于使用常见标签,还可以添加关键词,我称之为“提示”。这些提示能够巧妙地引导对话方向,而不是强制性地推动模型,从而增加对话的多样性。
  • 情景/场景:描述角色扮演的背景。这一类别有两种主要用途:
    • 如果将其放入PList,并且也放入作者注释中,它将全程引导角色扮演,对整个对话的走向产生显著影响。
    • 如果您只想用它来补充开场白,可以考虑将其从作者注释中的PList移除,转而将其放在描述框的底部,位于Ali:Chat的示例对话之后。这样做可以轻轻推动对话朝着您希望的方向发展,而不会完全控制对话内容。

根据您的需求,情景描述可以非常宽泛,也可以非常具体。

  • 个性:涵盖角色的所有性格特点、关系、技能等。

您还可以添加其他类别,如地点、环境、设置、类型、作者、作品标题(如电视剧、电影、书籍等)、风格(写作风格)、其他角色、武器、概念、能力描述等。

在编写PList时,应根据角色和情景的需要,按照类别的重要性进行排序!较不重要的特征应先列出,而更关键的特征则放在后面。就我个人而言,我倾向于将身体/服装特征的重要性放在最低,而将个性特征放在首位。虽然这种排序的影响看似微不足道,但累积起来的诸多小细节最终会产生显著的效果。

在创作角色的过程中,您需要知道的是,您的初始PList不会一成不变。随着您不断添加示例对话和新想法,您将需要更新PList以纳入这些新内容。记住,PList旨在囊括角色的大部分,甚至是所有与角色扮演相关的特征和信息。

在您有了角色的初步特征列表之后,接下来就是要撰写Ali:Chat的示例对话了。这是创作中最具挑战性的部分。您需要专注于角色的核心特征,并思考您希望对话呈现的样子。正如AliCat所强调的,“您放入对话框的内容,将决定您从中得到什么。如果您的目的是要了解角色,那么示例对话就应该围绕了解角色展开。如果您的角色主要用于聊天,那么示例对话就应该反映出聊天的氛围。”

创作Ali:Chat示例对话的指导

  • 如果您希望角色扮演的互动能够产生长篇且详细的回应:
    • 在您的示例对话中编写几条长篇且详细的角色回应,确保对话和行动之间的平衡。
  • 如果您希望角色更加注重对话,而不希望面对长篇文本:
    • 编写许多简短的角色回应,重点放在对话上,而不是行动上。
  • 最后,如果您希望角色像是在聊天室里那样交流:
    • 您可能想要包含许多非常简短的角色回应,同时行动较少。

您可以在卡片中同时包含长篇和短篇角色回应,并根据您的需求进行布局。

如果您希望角色写简短回应,那么将包含简短回应的示例对话放在描述框的底部!同理,如果您希望长篇回应,那么将包含长篇回应的示例对话放在描述框的底部。

由于在对话开始时,问候信息总是位于上下文堆叠的最底层,因此它仍然会对您机器人的回应产生最大的影响。因此,如果您的问候信息非常长,它可能会削弱短示例对话对角色写作风格的影响。

请记住,这些只是一些建议。还有许多其他方法可以用来编写您的示例对话,您应该进行尝试和实验。这就是为什么您不应该盲目地复制他人的示例对话结构,而应该思考您希望角色如何说话、行动和感受,以及如何设计您自己的示例对话。

考虑到所有这些因素,以下是我在为角色Pardofelis撰写示例对话时的思考过程:

  • 我想要什么?
    • 一个专门为角色扮演设计,并能给出长篇详细回应的角色。
  • 我应该怎么做?
    • 写一些长篇、广泛且详细的示例对话。
  • 她最重要的特征是什么?
    • 查看PList。她是一个猫女,顽皮,在街头与猫一起长大,她是个小偷,喜欢打盹,因为她在街头长大,她的言谈应该是不正式和不修辞的。

太棒了!现在我可以为她写一个可爱且包含上述所有特征的背景故事。

尽量避免在编写示例对话和问候信息时使用换行符,永远不要使用双换行符。许多模型,如果不是所有模型,都倾向于将"\n"解释为分隔符。分隔符是表示模型所理解的前后内容不同的东西。这样做通常会破坏模型的上下文理解。您可以使用它们,但仅限于真正智能的模型。然而,为了使您的角色尽可能普遍可用,尽量避免使用换行符。

Ali:Chat示例对话#1

{{user}}: 可以简单介绍一下你的生平吗?
Pardofelis: 嗯,你知道的,我并不是在一个奢华的环境中长大的。她用自嘲的笑声指向自己。我小时候大部分时间都在街头度过,只有我和一些流浪猫——打盹、偷窃。好时光,好时光。她猫耳颤动,回忆起在巷子间攀爬和躲避愤怒店主的美好回忆。那时的生活虽然艰难,但我也有很多乐趣。靠卖我能找到的任何闪亮东西为生!这就是我这些灵巧手指的用武之地。她靠在柜台上,笑容更灿烂了。现在,有了我这个小宝藏库,生活变得非常刺激,你知道吗?遇到了各种各样有趣的人,像你这样的!

这个示例对话强化了她之前列出的所有特征,为她提供了一个背景故事,并解释了她现在的样子,同时加强了她的不正式言谈和建立了一些她的习惯和特征。接下来,我想加强她的其他特征。这次,我想要突出她喜欢和不喜欢的东西,因为我的目标是尽可能准确地捕捉Pardofelis的性格,而她的喜欢和不喜欢在我看来似乎是做到这一点的最佳方式。请记住,根据您的目标和您要创造的角色,您可能想要选择不同的示例对话!

Ali:Chat示例对话#2:

{{user}}: 你喜欢什么?不喜欢什么?
Pardofelis: Pardofelis的异色瞳眼睛闪烁着光芒。哦,我喜欢的东西?嗯,显然是闪亮的东西——小玩意、宝石、任何闪亮的东西都能吸引我的注意。她自豪地环顾四周,看着她收藏的宝藏。还有猫!不能忘记它们;自从那些日子以来,它们一直是我很好的伙伴。她的耳朵竖了起来。还有在舒适的地方打盹。啊,没有什么能比在宝藏环绕中好好小憩更棒了。至于我不喜欢的东西...嗯...我不喜欢对抗和打架。尽量避免——我不是个斗士。她轻轻摇头,耳朵因为不满而颤动。

和第一个示例对话一样,通过她的言谈、行动和习惯,特征和性格都得到了加强。

提醒:请记住,这是我个人的创作过程。这些特征是我个人认为重要的。
Ali:Chat的核心在于通过示例对话来加强您认为重要的特征。您可以选择询问角色的背景故事、人际关系、他们所在世界的信息、设置、他们的能力/技能/超能力等等...任何您感兴趣的内容都可以。唯一需要记住的是令牌数量。

节省令牌

您可能已经注意到,我没有在示例对话中包含关于角色服装或身体特征的内容。这是因为通过PList,我不认为Pardofelis的外貌特征非常重要,因此不需要在描述框中通过示例对话详细描述。

  • 如果您上下文大小较低(约2048),我建议您不要超过800个永久令牌(描述框内的令牌),并将所有额外信息放入lorebook中,稍后我会介绍这一点。
  • 如果您上下文大小较高(约4096及以上),那么您不必过于担心令牌效率,可以在描述框中容纳更多内容。

请注意,您在描述框中写得越多,保持内容一致性的难度就越大。保持写作的一致性是关键。
如果您不希望角色代表您说话,一个常见的错误是撰写角色描述您行为的示例对话。这将告诉模型模仿您是可以接受的。如果这是您有意为之,那当然没问题,但如果不是,请确保角色只描述他们的行为。
这里有一种类型的模仿,我指的是这种情况:
机器人:嗨!当这个男人拍拍你的头时,他说道,你微笑着回应。
这是由于您的角色卡造成的。请确保您的角色卡不包含第一条消息或示例对话,在这些对话中角色代表您说话/模仿您,因为如果包含,它将直接传递。

最终成果与分析

在将所有内容整合并最终确定角色的描述之前,请务必再次审视示例对话,并向您的PList中添加您可能遗漏或最初没有计划添加的特征。请记住,通过示例对话加强的每个特征都需要添加到PList中。

完成整合后,这是Pardofelis的描述框的样子!

描述框图解与分析

在优先级上,我个人认为PList > 简要人生故事 > 喜欢和不喜欢。因此,我按照相应的顺序安排了它们。不过请记住,位置在对话开始时只会产生很小的影响,但正如我之前所说,许多小事情累积起来就会产生重大影响!

模板

这是一个您可以复制并填写的非常基础的模板:

{{user}}:
{{char}}:
{{user}}:
{{char}}:
[{{char}}'s body: ;
{{char}}'s clothes: ;
Tags: ;
Scenario: ;
{{char}}'s persona: ]

提示:如果您使用的界面能够访问作者注释,那么我强烈建议将PList放在那里,插入深度为4!这是PList真正闪耀并与Ali:Chat协同工作的地方。

质量重于数量

如果您写的示例对话较长(每个约150个令牌),那么一个就足够了,但两个可以确保角色正常工作。示例对话越多,角色的准确性越高,但保持整个内容的一致性就越困难。请记住,质量比数量更重要!一个只有1个写得很好的示例对话和问候消息的角色,会比有许多写得不好的示例对话的角色好得多。如果您想包括更多关于衣服、身体或总体传说(lore)的示例对话,而又不希望描述框被淹没,那么我强烈建议将这些内容放入世界信息/lorebooks中,并在PList中包括与这些示例对话相关的特征。

理想的PLists与Ali:Chat配置图解

对于喜欢通过视觉学习的用户,这就是理想的PLists与Ali:Chat配置方式!

作者注释

这是一个在许多用户界面(UI)上存在的功能,尽管它的实用性惊人,但经常被忽视。这个功能通常有四个设置。

作者注释:如果您能够使用这个功能,您总是希望在这里放置您的PList。我们想要在作者注释中放置PList的原因很简单;描述框永远固定在上下文堆叠的顶部。将PList放在作者注释中而不是描述框中,可以确保它在上下文中保持足够低的位置以保持相关性,同时不会过于强烈地影响角色扮演。在使用作者注释时,PLists和Ali:Chat的协同作用最为明显。这是因为Ali:Chat示例被固定在上下文堆叠的顶部并失去其力量,而作者注释中的PList有助于拉动包含在这些示例对话中的信息,以及整个聊天历史中的其他信息。这确保了在长时间对话后您的角色不会失去他们的个性,并保持忠于自己。

插入深度:定义了作者注释在聊天历史中插入的位置(包括用户消息在计数内)。如果您只使用它来放置PList,我建议将其设置为4。插入深度越高,上下文中作者注释的位置越高,因此其力量越弱,反之亦然。

插入频率:作者注释插入的频率。如果您使用它来放置PLists,将其设置为1。

问候信息

问候信息的重要性

这个领域的重视程度被严重低估了。在对话开始时,它是上下文堆叠中的最低点,这意味着它在开始时对角色写作风格有巨大影响。尽管Ali:Chat示例对话有助于加强角色的特征,但问候信息有助于设定情景、角色说话的方式、与您的关系,以及影响情景的许多其他方面。它的影响如此之大,以至于即使是最完美的PLists + Ali:Chat描述,如果问候信息质量低下,表现也会差得多。

好消息是,问候信息是临时的,意味着当你达到限制时,它最终会离开上下文,这意味着在编写时不必过于担心令牌效率,可以全力以赴地加强特征。

由于它对角色写作风格有巨大影响,如果您希望角色给出长篇详细回应,那么可以全力以赴并使其非常详细。同样,如果您的目标是拥有一个不会写出长篇文本的对话机器人,那么也可以使问候信息简短精炼。

提示:完全有可能不使用问候信息!在这种情况下,您可以是实际的问候信息,您的第一句话将决定情景的方向。
角色也可以自己撰写问候信息!例如,通过发送类似于[场景:Pardofelis正在抢劫{{user}}的房子;标签:抢劫,追逐,幻想,背叛,戏剧]这样的信息给角色一个方向。您可以在每个角色上简单地通过删除他们的问候信息来实现这一点,这意味着您不受PList / 问候信息情景的限制!
与之前对示例对话的警告相同。避免使用换行符!

问候信息示例

再次为涉及长篇详细角色回应的角色扮演,这是Pardofelis的问候信息:

Pardofelis打了个哈欠,伸了个懒腰,优雅地弓起背,从一堆闪亮的小玩意上跳下,露出了顽皮的笑容。她猫一样的眼睛像珍贵的宝石一样闪闪发光,她摇摇晃晃地走向你,她衣服上挂着的各种小玩意轻轻地叮当作响。啊,你好啊,老板!你刚刚发现了一个最完美的宝藏库,由我经营!她走向你,尾巴兴奋地摇摆着,猫耳保持着好奇地竖立。欢迎来到Pardofelis的闪亮物品店!她的尾巴兴奋地摇摆着,她退后一步仔细观察你。所以告诉我,老板——你今天在找什么?有没有特别想要的?或者你是来卖宝藏的?她眼睛里闪烁着淘气的光芒,一边扯着一条辫子,急切地等待着你的回应。

从身体描述到服装,再到习惯动作,再到性格,再到当前职业,所有内容都被描述出来,并设置了场景,以及角色扮演的基调。它应该与PList中的情景类别一起发挥作用。

如果您不想让角色代表您说话,人们常犯的一个错误是在问候信息中叙述用户的行为。这将告诉模型模仿用户是可以接受的。如果这是您有意为之,那当然没问题,但如果不是,请确保角色描述他们的行为。

世界信息/lorebooks

这个功能虽然不太适合初学者,但却是巨大的游戏改变者。由于其复杂性,并且为了不使这个指南变得更长,我反而会引导你阅读这个指南。它有一个专门介绍世界信息/lorebooks的完整部分。尽管这是一个难以处理的特性,但我强烈建议你在认为你已经掌握了如何制作PLists + Ali:Chat角色后,至少快速阅读指南并学习如何制作lorebooks。为你的角色制作一个lorebook会让它感觉更好。

测试你的角色

好了,现在你的角色已经完成,剩下的就是测试了!这实际上很简单。你基本上想要选择一个流行的/有效的模型。如果你不能本地运行任何东西,Horde是可用的。第二步是询问你的角色关于他们自己的问题,看看他们是否在角色中。这是为了确保特征得到适当加强。

有时候,如果你的角色表现得奇怪,可能是模型的错!查看LLM排名以找到最佳模型进行测试。

最后,最重要的是确保你的角色以你想要的方式行为。如果它做到了,那么恭喜!你做到了!