NovelAI
NovelAI 是一项付费订阅服务,可每月无限制地使用其高质量的文本生成、图像生成和文本转语音模型。前往此处注册账户即可开始使用:https://novelai.net/
你只能获得 50 次 免费生成机会用于评估模型。当出现 "Not eligible for this model" 错误时,说明你已用完试用额度,需要订阅付费方案。
API 密钥
要获取你的 NovelAI API 密钥,请按以下步骤操作:
-
选择左侧边栏顶部的齿轮图标。
左侧边栏 -
在 "User Settings" 下选择 "Account"。
用户设置 -
选择 "Get Persistent API Token"。
账户 -
选择复制图标,将你的 NovelAI 持久 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 使用了散文描述,并附带了大量对话示例。
不该做的事
现有的多数角色卡格式都不太适合 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 一开始就说这个词的理由。