# NovelAI

NovelAI 是一个付费订阅服务,允许每月无限制访问他们高质量的内部文本生成、图像生成和文本转语音模型。在此注册账户以开始使用:https://novelai.net/

你只能获得 50 次生成 的免费试用来评估模型。当出现 "Not eligible for this model" 错误时,这意味着你已经用完了试用期,需要订阅付费计划。

# API 密钥

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

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

    Left Sidebar
    Left Sidebar

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

    User Settings
    User Settings

  3. 选择 "Get Persistent API Token"。

    Account
    Account

  4. 点击复制图标将 NovelAI API 令牌复制到剪贴板。

    Persistent API Token
    Persistent API Token

# 模型

如果你订阅了 Opus 套餐,那么 Erato 是最佳选择。如果没有 Opus,那么 Kayra 是最好的可用模型。

Clio 在 Tablet/scroll 套餐下有更大的上下文大小,但 Kayra 的性能通常可以弥补这个差异。

# 设置

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

# 响应长度

你希望每条消息生成多少文本。请注意,NovelAI 每次响应的限制是 150 个令牌。

# 上下文大小

在任何时候保持在上下文中的聊天令牌数量。最大上下文大小取决于模型和你的订阅等级:

  • Kayra (Tablet) - 3072 个令牌
  • Kayra (Scroll) - 6144 个令牌
  • Erato(Opus 专属)、Kayra (Opus) 和 Clio(所有等级)- 8192 个令牌

# 前言

插入在聊天内容正上方的文本,用于修改写作风格。推荐的格式是简短标签列表,如 "[ Style: chat, detailed, sensory ]"。

# 预设描述

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

# Erato

  • Golden Arrow - 一个全能型预设。
  • Wilder - 词汇选择更加多样,重新生成时差异更大,更容易出错。
  • Zany Scribe - 避免错误和重复。优先使用更复杂的词汇。
  • Dragonfruit - 语言丰富复杂,很少重复。更容易出现错误和矛盾。
  • Shosetsu - 为日语写作设计。也适用于英语。

# Kayra

  • Asper - 用于创意写作。期待意想不到的转折。
  • Carefree - 一个全能型预设
  • Fresh-Coffee - 保持故事在轨道上。很好地处理指令。
  • 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 的设置

在高级格式设置(A 图标)下:

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

在用户设置(带齿轮的人像)下:

  • 开启 "Swipes"(虽然不是 NAI 特有的,但非常有用,建议开启)

# 为 NovelAI 构建/调整角色卡

要为 NovelAI 优化你的角色卡,有两种推荐的方法来编写角色描述:散文式和属性式。

散文式简单到让人觉得不可能有效:"Sylpheed 是一个看起来年轻但实际上 900 岁的精灵。她身材矮小娇小,有着长长的白发,在她编成侧马尾的发辫处渐变成绿色,眼睛是十字形的祖母绿色。[...]" 没错,就是这样。只需用普通句子写出角色的外貌、行为等,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 制作的示例角色卡,展示了不同的创建方法。第一个角色卡 Valka 使用属性方法描述角色,而第二个角色卡 Eris 使用散文描述,并包含大量对话示例。

Valka
Valka

Eris
Eris

# 不应该做什么

大多数现有的角色卡格式都不太适合 NovelAI。它们可能会给你一些结果,甚至一些不错的结果,但存在很多问题。W++ 是最大的问题之一,它与 NovelAI 模型的训练内容完全不同,而且经常使用方括号/大括号/引号消耗了大量令牌,增加了卡片的大小但没有实际好处。

在现有的非 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 个令牌,即使你将滑块设置得更高。当达到滑块中的令牌数或 150 个(以较低者为准)时,它将生成最多 20 个额外的令牌,寻找停止序列或句子结尾,所以响应的有效限制是 170 个令牌,到达这个点时它就会停止,导致截断。

如果被截断,你可以选择继续选项(文本框左侧的三线菜单中)让角色继续他们的响应。

如果你经常想要超过 170 个令牌的响应,可以这样绕过限制:

  • 将响应长度保持在 150 个令牌。
  • 在高级格式设置中启用 Auto-continue。
  • 将 "Target length" 设置为所需长度。

这将链接多个生成以给你更长的消息,但如果模型决定停止,不能保证回复一定是所需长度的 100%。

# 如何让机器人写出更长的响应?

阅读上面关于响应被截断的内容。这将帮助确保响应不会因为达到生成长度限制而过早截断。

如果你的响应没有被截断但仍然太短,很可能是"垃圾进垃圾出"的问题 - 如果你给模型不好的例子,它会产生不好的输出。如果角色卡没有对话示例或只有简短的对话示例,而且你发送给机器人的消息很短,模型会认为这是可接受的方式,响应也会很短。所以,写更长的示例对话和更长的消息给机器人。(你可以让 NovelAI 为你写一些示例对话,而不是自己写。)

# 如何让机器人停止替我说话?

  • 检查角色卡的第一条消息和示例对话是否包含角色替你采取行动 - 如果有,重写它们以去除替你行动的部分
  • 确保勾选了 "Always add character's name to prompt"
  • 确保你当前使用的用户角色与聊天的其余部分相同。如果你更改了用户角色但没有改回(或没有将角色锁定到该聊天),通常用于阻止为你生成的规则将失效
  • 在 Custom Stopping Strings 中添加 ["\n{{user}}:"](通常不需要,但有时有帮助)

# 为什么我的角色没有回应?

这可能有很多原因,所以我们需要检查几个地方:

  • 确保在高级格式设置中勾选了 "Always add character's name to prompt"
  • 检查是否有来自 API 的错误。虽然你可以使用 NAI 免费试用版的 SillyTavern,但一旦用完,就只会收到错误
  • 检查 "Custom Stopping Strings" 中有什么 - 如果这些在响应开始时被生成,可能会过早截断

# 我应该如何使用 Author's Note?

一般来说,你可能不应该使用。它被插入在上下文的非常靠近末尾的位置,使用 NAI 的模型时,它经常会压倒上下文中的其他所有内容。它主要是较旧、较弱的模型中的产物,当时更有必要使用。

# 如何进行场景转换/时间跳跃?

将以下内容作为系统消息或在下一条消息开头的新行中:

***
[ 2 days later ]

然后在下一行放置你的消息其余部分。方括号中的文本可以是时间跳跃、新位置或任何其他内容。"***"(有趣的是被称为 "dinkus")告诉 AI 场景已经改变,方括号中的文本为此提供更多上下文。

# AI 一直重复特定词语/短语,该怎么办?

如上所述,你可以稍微提高重复惩罚滑块,但推得太远可能会使输出变得不连贯。 要更彻底地解决问题,回顾上下文,特别是最近的消息,删除重复的词语/短语。从上下文中删除它会让 AI 减少开始说它的理由。