角色表情

这是什么?

表情图片是你 AI 角色(又称“立绘”)的图片,会显示在聊天窗口旁边(或后面)。

表情图片可以根据分类自动切换,以适配 AI 最近一次回复中所表达的情感。

添加角色表情图片

  1. 打开扩展面板并展开“角色表情”部分。如果你已打开某个角色的聊天,你会看到一个由图片占位符组成的网格。

    表情抽屉
    表情抽屉

  2. 点击网格中每张图片左上角的“上传图片”按钮,然后选择你想应用到该表情的图片。这会将图片以正确的文件名保存到 /data/<user-handle>/characters/(character_name_here)/ 文件夹中。

  3. 对所有你想分配图片的表情重复此操作。

导入表情图片 ZIP 文件

使用“ 上传立绘包(ZIP)”按钮,可以导入一个包含多张表情图片的 zip 文件,这些图片会自动添加到当前选中角色对应的文件夹中。该 ZIP 文件必须将所有图片放在扁平结构中(不含子文件夹),且文件命名正确。导入 zip 不会自动重命名图片以使其与各种情绪相匹配。

手动切换表情

  1. 点击任意一张已上传的表情图片(立绘),即可在聊天界面附近(默认 UI 模式下)或屏幕中央(视觉小说模式下)显示它。
  2. 使用 /expression-set (name) 斜杠命令或对应的快捷回复,可以在不打开扩展菜单的情况下设置立绘。

自动切换表情

要在角色回复时自动设置表情,你有多种选择。 当启用消息流式输出时,表情会按消息或按固定间隔切换。

classify 模块的工作原理是什么?

classify 模块使用一个在 SillyTavern 服务器旁运行的小型“情感解析”模型。该模型读取 AI 的新输出,检测文本所表达的情感或情绪。虽然一条消息中可能包含多种情感,但模型只会挑选最可能的一种并返回给 SillyTavern。随后前端扩展会显示与该情感相关联的图片。

设置说明(本地)

  1. 打开扩展面板并展开“角色表情”扩展菜单。
  2. 在分类来源下拉菜单中选择“本地”。
  3. 这将从 HuggingFace Hub 一次性下载分类模型(约 ~100 Mb)。
  4. 生成任意一条消息,以验证分类功能是否生效以及立绘是否出现。你也可以在服务器控制台查看调试日志。

本地分类默认支持 28 种图片标签:Cohee/distilbert-base-uncased-go-emotions-onnx

如需使用 6 选项分类模型,请将 config.yaml 文件中的 extensions.models.classification 变量的值改为:Cohee/bert-base-uncased-emotion-onnx

设置说明(使用 LLM)

  1. 通过 API 连接 连接到任意受支持且已正确配置的 API。
  2. 按上文所述方式导入表情图片。
  3. 在分类来源下拉菜单中选择“主 API”。
  4. 可选:配置分类指令提示词。
  5. 生成任意一条消息,以验证分类功能是否生效以及立绘是否出现。你也可以在服务器控制台查看调试日志。

提示词构建策略

主 LLM 来源允许你选择分类提示词的构建方式:

  • 有限上下文:仅发送最后一条消息和一条系统指令提示词。
  • 完整上下文:发送完整的聊天历史,包括角色卡。

设置说明(WebLLM)

  1. 安装官方的 WebLLM 扩展
  2. 按上文所述方式导入表情图片。
  3. 在分类来源下拉菜单中选择“WebLLM”。
  4. 可选:配置分类指令提示词。
  5. 生成任意一条消息,以验证分类功能是否生效以及立绘是否出现。你也可以在服务器控制台查看调试日志。

设置说明(使用 Extras)

  1. 安装并运行 Extras,同时启用 classify 模块:python server.py --enable-modules=classify
  2. 按上文所述方式导入表情图片。
  3. 在分类来源下拉菜单中选择“Extras”。
  4. 每当 AI 向你发送回复时,相应的表情图片会自动显示。

Extras API 默认使用一个 6 选项的分类模型:nateraw/bert-base-uncased-emotion

还有一个 28 选项的模型:joeddav/distilbert-base-uncased-go-emotions-student

要使用该模型,你需要修改 Extras 的命令行,加入以下参数(前后各留一个空格):--classification-model=joeddav/distilbert-base-uncased-go-emotions-student

自定义表情

如何获得比默认选项更多的表情?你可以在扩展设置中配置自定义表情。你可以为自定义表情指定任意名称。它们会出现在表情图片列表中,并可以像其他表情一样被分配图片。它们会带有一个标识,表明这些是自定义表情。

表情支持哪些图片格式?

允许任何图片格式,包括 webp 和动画 gif。

最常见的格式是背景透明的 PNG 文件。

使用默认表情

如果你没有为某个角色的所有表情都准备表情图片,或者完全没有图片,那么在默认显示什么方面有多种选择。
所有这些都可以通过“默认 / 回退表情”下方的下拉菜单来选择。

  1. 选择回退表情:如果选中了一个你没有对应图片的表情,则会改为显示回退表情。只需从下拉菜单中选择一个可用的表情即可。
  2. [No Fallback]:当没有图片时,什么都不显示。
  3. [Default emojis]:你可以使用 SillyTavern 内置的默认表情。这些是简单的 emoji 风格图片。

为每个表情使用多张图片

可以为每个表情添加多张图片,从而让显示的表情更具多样性。
要启用此功能,只需切换 Allow multiple sprites per expression 开关。
现在你可以上传多张图片,任何额外的图片都会带有一个小标记显示。

可以通过点击来手动选择单张图片,或者通过 /expression-set type=sprite 来选择,该命令会列出可用的立绘图片,而不是表情。

每当带有多个图片的表情被自动选中时,会从现有图片中随机选择一张。
如果你想在同一个表情被多次使用时强制重新选择该表情的一张新图片,可以启用 Re-roll if same sprite is used again

每个表情使用多张图片的命名约定

如果一个表情有多张图片,文件需要以特定方式命名。 文件名必须以表情名称开头,其后跟一个后缀,后缀与表情名之间以点或短横线分隔。例如:joy.pngjoy-1.pngjoy.expressive.png
直接上传和 ZIP 导入的文件名都必须遵循此格式。

立绘文件夹覆盖

如果有多个角色具有相同的显示名称,它们都会使用同一套表情图片。

如果你想为同名角色的每个版本分别使用不同的图片集,可以使用立绘文件夹覆盖。
文件夹覆盖也可用于为同一个角色定义不同的立绘集(不同的服装等)。

如何设置覆盖

  1. /data/<user-handle>/characters 下创建一个任意名称的文件夹,并将图片放入其中,例如 /data/<user-handle>/characters/Boris
  2. 打开你想覆盖其立绘的那个角色的聊天。
  3. 在“Sprite Folder Override”输入框中输入覆盖文件夹的名称,然后点击“Submit”。
  4. 立绘列表会重新加载,“Sprite set”指示器应显示为该覆盖文件夹。
  5. 或者,你也可以使用 /costume 斜杠命令达到相同的效果:/costume Boris
  6. 通过在覆盖文件夹名称前加一个反斜杠,它会解析为当前角色立绘文件夹中的一个子文件夹,例如对于名为 Boris 的角色,/costume \tracksuit 会解析为 /data/<user-handle>/characters/Boris/tracksuit 文件夹。