NovelAI

NovelAI 是一项付费订阅服务,可每月无限制地使用其高质量的文本生成、图像生成和文本转语音模型。前往此处注册账户即可开始使用:https://novelai.net/

你只能获得 50 次 免费生成机会用于评估模型。当出现 "Not eligible for this model" 错误时,说明你已用完试用额度,需要订阅付费方案。

API 密钥

要获取你的 NovelAI API 密钥,请按以下步骤操作:

  1. 选择左侧边栏顶部的齿轮图标。

    左侧边栏
    左侧边栏

  2. 在 "User Settings" 下选择 "Account"。

    用户设置
    用户设置

  3. 选择 "Get Persistent API Token"。

    账户
    账户

  4. 选择复制图标,将你的 NovelAI 持久 API 令牌复制到剪贴板。

    持久 API 令牌
    持久 API 令牌

模型

如果你拥有 Opus 档位,那么 Erato 是首选模型。如果你没有 Opus,那么 Kayra 是可用的最佳模型。

在 Tablet/Scroll 档位上,Clio 拥有更大的上下文大小,但 Kayra 的强度通常足以弥补这一差距。

设置

设置文件位于此处(SillyTavern/data/<user-handle>/NovelAI Settings)。 你也可以手动添加自己的设置文件。

回复长度

每条消息希望生成的文本量。请注意,NovelAI 每次回复的上限为 150 个 token。

上下文大小

任意时刻保留在上下文中的聊天 token 数量。你能使用的最大上下文大小取决于模型和你的订阅档位:

  • Kayra (Tablet) - 3072 个 token
  • Kayra (Scroll) - 6144 个 token
  • Erato(Opus 专属)、Kayra (Opus) 与 Clio(所有档位) - 8192 个 token

前言

插入到聊天正上方以修改写作风格的文本。推荐格式是一串简短的标签列表,例如 "[ Style: chat, detailed, sensory ]"。

预设说明

根据 NovelAI 的说明,以下是各默认预设的适用场景。

Erato

  • Golden Arrow - 优秀的全能型。
  • Wilder - 词汇选择更多样,重投(reroll)之间差异更大,但也更容易出错。
  • Zany Scribe - 避免错误和重复。偏好更复杂的用词。
  • Dragonfruit - 语言多样、复杂且重复少。但错误和前后矛盾也更频繁。
  • Shosetsu - 专为日文写作设计。用于英文同样效果不错。

Kayra

  • Asper - 面向创意写作。会有出人意料的转折。
  • Carefree - 优秀的全能型。
  • Fresh-Coffee - 能保持行文不跑题。对指令处理(instruct)支持良好。
  • Pro_Writer - 模仿畅销小说的节奏与质感。
  • Stelenes - 更倾向于选择合理的替代选项。重试时富于变化。
  • Tea_Time - 渐入佳境后表现出色。
  • Writers-Daemon - 极具想象力,有时甚至过于天马行空。

Clio

  • Edgewise - 能良好应对多种生成风格。
  • Fresh Coffee - 能保持行文不跑题。
  • Long-Press - 面向创意散文。
  • Talker Chat - 专为聊天风格的生成而设计。
  • Vingt-Un - 优秀的通用默认预设,略偏向散文。

在 SillyTavern 中使用 NovelAI 的技巧与常见问题

从其他 ST 后端 API 切换到 NovelAI 时,会出现许多常见问题和疑问。差异根源在于模型的训练目标。你很可能用过 OpenAI 或 Anthropic 的模型(或是模仿这些模型的本地模型),它们的核心是遵循用户的指令。而 NovelAI 的模型则纯粹围绕文本补全构建:它们不会将你的输入当作一条消息来组织回复,而是尝试续写输入的提示词。正因如此,许多适用于其他 API 的技巧和共识在 NAI 上并不奏效。

为 NovelAI 调整设置

在 Advanced Formatting(A 图标)下:

  • 将 "Context Template" 设置为 "NovelAI"
  • 将 "Tokenizer" 设置为 "Best match"
  • 勾选 "Always add character's name to prompt"
  • 勾选 "Collapse Consecutive Newlines"
  • 取消勾选 "Instruct Mode" 下的 "Enabled"

在 User Settings(带齿轮的人像图标)下:

  • 开启 "Swipes"(并非 NAI 专属,但它实在太好用了,建议直接开启)

为 NovelAI 构建/改编角色卡

要为 NovelAI 优化角色卡,有以下几种推荐的角色描述写法:散文法(prose)和属性法(attributes)。

散文法简单得让人觉得不该这么管用:"Sylpheed is a young-looking but actually 900 year old nymph. She's short and petite, with long white hair that fades into a green gradient in her braided side ponytail, and emerald green eyes shaped like crosses.[...]" 没错,就这些。只需用普通句子把角色的外貌、举止等写出来,AI 就能领会。

如果你对自己的文笔没把握,或者想要更结构化的方式,可以使用属性法,这也是 NovelAI 训练数据中包含的写法。它就是一份按不同类型列出的角色特征清单。以下是一组已被验证对 NovelAI 模型有效的属性:

Name:
AKA:
Type: character
Setting:
Nationality:
Species:
Gender:
Age:
Height:
Weight:
Appearance:
Clothing:
Attire:
Personality:
Mind:
Mental:
Likes:
Dislikes:
Sexuality:
Speech:
Voice:
Abilities:
Skills:
Quote:
Affiliation:
Occupation:
Reputation:
Secret:
Family:
Allies:
Enemies:
Background:
Description:
Attributes:

"Type: character" 用于告诉 AI 这里描述的是一个角色(而非地点、物品或其他类型)。其余属性都是可选的,其中一些存在冗余(例如 Personality、Mind 和 Mental 基本同义),但它们都经过了测试,与 NovelAI 的模型配合良好。填写与你角色相关的项即可。属性的值应使用小写,用逗号分隔,无需给词语加引号。例如:

Skills: lockpicking, stealth, running away very fast

之所以推荐这些写法,是因为它们本就存在于 NovelAI 的训练数据中,因此能与模型特别好地配合。

示例角色卡

以下是几张专为 NovelAI 制作的示例角色卡,展示了针对 NovelAI 创建角色卡的不同方式。第一张角色卡 Valka 的角色描述使用了属性法,而第二张角色卡 Eris 使用了散文描述,并附带了大量对话示例。

Valka
Valka
Eris
Eris

不该做的事

现有的多数角色卡格式都不太适合 NovelAI。它们能产出一些结果,甚至是不错的结果,但存在许多问题。W++ 是最大的"罪魁祸首"之一——它完全不像 NovelAI 模型训练数据中的任何东西,而且它大量使用方括号/花括号/引号会吞掉大量 token,徒增角色卡体积却毫无实际收益。

在那些并非 NovelAI 原生内置的现有格式中,AliChat 最有可能正常工作,因为它依靠对话示例同时传达角色信息与角色的语气,并且采用了你希望 AI 输出的那种消息格式。

对于多数其他格式,由于它们通常只是把某个角色的不同特征列出来,可以相当直接地转换为属性法。

我该使用哪个模块?

通常建议不使用模块(No Module)。如果你希望角色说话更文采飞扬,Prose Augmenter 会很有用,但要注意别用过头。对于文字冒险风格的角色卡或故事,Text Adventure 可派上用场。

不使用 instruct 模块吗?

你可以在需要时随时调用 Instruct 模块。在你的消息中另起一行,将指令放在花括号里,如下所示:{ CharName is offended by that seemingly innocuous statement }(文本与花括号之间的空格是 必需的)。这样做会让 AI 在短时间内切换到 Instruct 模块。你不应一直开启 Instruct 模块,因为它的输出通常不如其他模块富有创意,只在你需要强力引导 AI 朝某个特定方向发展时使用即可。

为什么我的回复总是被截断?

NovelAI 会把回复长度限制在大约 150 个 token 以内,即使你把滑块调得更高也是如此。当生成数量达到滑块设定值或 150(取二者较小值)时,它还会再多生成至多 20 个 token,以寻找停止序列或句子结尾,因此一条回复的实际有效上限是 170 个 token,到这一点就会直接停止,从而造成截断。

如果被截断,你可以选择"继续"选项(位于文本框左侧的三横线菜单中),让角色继续完成其回复。

如果你经常需要超过 170 个 token 的回复,可以按以下方式绕过限制:

  • 将回复长度保持在 150 个 token。
  • 在 Advanced Formatting 下启用 Auto-continue。
  • 将 "Target length" 设置为所需长度。

这会将多次生成串联起来以获得更长的消息,但如果模型决定停下,并不能保证回复 100% 达到目标长度。

如何让 AI 写出更长的回复?

请先阅读上面关于回复被截断的内容。这有助于确保回复不会因触及生成长度上限而过早截断。

如果你的回复没有被截断却仍然太短,那很可能是 "garbage in, garbage out"(垃圾进,垃圾出)问题——如果你给模型提供糟糕的示例,它就会产出糟糕的输出。如果角色卡没有对话示例或对话示例很短,而你发给 AI 的消息也很短,模型就会从中"学到"这是被认可的行事方式,于是回复也会很短。因此,请编写更长的对话示例,并发送更长的消息给 AI。(你大可让 NovelAI 替你写一些对话示例,而不必亲自动手。)

如何让 AI 不再替我说话或行动?

  • 检查角色卡的开场白和对话示例是否包含 AI 替你行动的内容——如果有,就改写以去掉替你行动的部分
  • 确保 "Always add character's name to prompt" 已勾选
  • 确保你当前使用的人格与该聊天其余部分一致。如果你切换过人格却没有切回(或没有将某个人格锁定到该聊天),通常用于阻止替你生成的规则就会失效
  • 在 Custom Stopping Strings 中添加 ["\n{{user}}:"](通常不必如此,但偶尔有用)

为什么我的角色不回复?

造成这一情况的原因很多,因此我们需要检查几处地方:

  • 确保 Advanced Formatting 中的 "Always add character's name to prompt" 已勾选
  • 检查 API 是否有报错。虽然你可以用 SillyTavern 配合 NAI 的免费试用,但一旦试用额度耗尽,你只会收到错误
  • 检查 "Custom Stopping Strings" 中的内容——如果它们在回复开头就被生成出来,回复可能会被过早截断

我该如何使用作者备注?

一般情况下,建议不要使用。它会被插入到非常接近上下文末尾的位置,而在 NAI 的模型上,它常常会压过上下文中的其他所有内容。它更多是早年较弱模型时代的遗留物,那时它更为必要。

如何做场景分隔/时间跳跃?

将以下内容作为系统消息,或放在你下一条消息开头的换行处:

***
[ 2 days later ]

然后把你消息的其余部分写在下一行。方括号中的文本可以是时间跳跃、新地点,或任何其他内容。"***"(有趣地被称为 "dinkus")会告诉 AI 场景已经切换,而方括号中的文本则为之补充更多上下文。

AI 不断重复特定的词语/短语,我该怎么办?

如前文所述,你可以把重复惩罚滑块稍微调高一些,但调得太高会让输出语无伦次。 要更彻底地解决该问题,可回头检查上下文(尤其是近期消息),把重复的词语/短语删掉。将其从上下文中移除,可以减少 AI 一开始就说这个词的理由。