11294 字
56 分钟
SillyTavern 完全指南(二):进阶篇 — 角色工程与功能扩展

目录#


1. 角色卡深度定制#

如果你已经完成了入门篇的阅读,现在你应该已经能加载社区下载的角色卡并正常对话了。但要让角色真正”活”起来,你需要理解角色卡的内在构造,并学会自己定制。

1.1 角色卡 JSON 结构详解#

SillyTavern 的角色卡本质上是 JSON 数据——无论它是独立的 .json 文件还是嵌入在 .png 图片中的 V2 格式。理解这个 JSON 结构是深度定制的第一步。

SillyTavern V2 角色卡(Character Card V2,简称 CCv2)的完整 JSON 结构如下:

{
"spec": "chara_card_v2",
"spec_version": "2.0",
"data": {
"name": "角色名称",
"description": "角色的外貌、身份、背景等描述。这是 AI 理解角色外观和基础设定的主要来源。",
"personality": "角色的性格特征。AI 会根据这个字段决定回复的语气、用词和态度。",
"scenario": "当前所处的场景设定。这为对话提供了一个背景舞台。",
"first_mes": "角色的开场白。用户加载角色后看到的的第一句话。",
"mes_example": "对话示例。提供一个或多个示范对话,展示角色的说话风格。这是让 AI 理解角色语调最有效的手段。",
"creator_notes": "创作者笔记。私有字段,用户可见但 AI 不可见,用于记录灵感或备注。",
"system_prompt": "在系统提示中追加的自定义指令。如果你希望 AI 在每次对话中都遵循某些规则,可以写在这里。",
"post_history_instructions": "对话开始后追加的指令。每次对话都会在历史记录后注入这段文本,用于维持角色行为一致性。",
"tags": ["标签1", "标签2"],
"creator": "创作者名称",
"character_version": "角色版本号",
"extensions": {
"world": "关联的世界书名称(可选)",
"fav": false,
"talkativeness": 0.5,
"prompt": "自定义提示词覆盖(可选)",
"depth_prompt": {
"depth": 4,
"role": "system",
"prompt": "深度提示词内容"
}
},
"alternate_greetings": ["可选的开场白2", "可选的开场白3"],
"voice": {
"name": "voice_name",
"mode": "off",
"level": 80,
"rate": 0
}
}
}

各关键字段详解:

字段作用对 AI 行为的影响建议
name角色名称AI 知道自己的名字保持简洁,不要加后缀
description外貌和身份描述影响 AI 对自身形象的认知200-500 字,包含视觉特征
personality性格特征直接影响回复的语气和态度用关键词罗列 + 简短解释
scenario场景设定约束对话发生的物理/社交环境包含地点、时间、当前状态
first_mes开场白定调整个对话的起点150-300 字,有场景感和互动
mes_example对话示例最关键的质量杠杆2-5 轮高质量示范对话
system_prompt系统指令叠加在全局 system prompt 后用于角色特定的行为约束
alternate_greetings备用开场白加载角色时可选择不同开场准备 2-3 种不同场景的开场

mes_example 的写法(最重要):

很多用户低估了 mes_example 的价值。这个字段在 prompt 中直接作为 few-shot 示例呈现给 AI,比任何抽象描述都更有效。正确写法示范:

<START>
{{user}}: 今天天气真不错。
{{char}}: (伸了个懒腰,眯起眼睛看向窗外)是啊,阳光暖洋洋的,让人想出去走走。你要一起去吗?
<END>

每段对话用 <START><END> 包裹,角色用 {{char}}、用户用 {{user}} 占位。2-3 段示范就能让 AI 迅速掌握角色的说话节奏和风格。

depth_prompt 字段:

这是 CCv2 提供的一个高级控制机制。你可以设置一个”深度提示词”,它会在对话达到一定轮次后开始注入:

"depth_prompt": {
"depth": 4,
"role": "system",
"prompt": "你已经和用户相处了一段时间,你对用户产生了深厚的感情,但你在努力克制。"
}

depth 值表示在对话超过这个轮次后开始生效,用于表达角色随关系发展而产生的性格变化。

1.2 从 Web UI 创建原创角色卡#

在入门篇中你学会了导入现有角色卡。现在我们来创建一个完全原创的角色。

操作步骤:

  1. 点击左侧栏的 角色管理 图标(两个人形头像)
  2. 点击 创建角色 按钮
  3. 填写以下信息:

基本信息标签页:

字段填写说明
姓名角色的名称
描述角色的外貌、身份等,支持 Markdown
性格性格关键词,建议用逗号分隔的短语
开场白角色的第一句话(最重要!用心写)
场景当前场景设定
对话示例示范对话,格式见上文说明
标签便于分类检索的标签

头像设置:

  • 点击头像区域上传图片
  • 支持裁剪和缩放
  • 建议 512x512 像素以上,PNG 格式支持透明背景

高级标签页:

  • Creator’s Notes:你的私人笔记,AI 看不到
  • System Prompt:追加系统指令
  • Post-History Instructions:对话后的持续指令
  • Alternate Greetings:添加多条备用开场白,角色加载时可选
  1. 点击 保存,新角色即出现在角色列表中

编写高质量开场白的技巧:

一个好的开场白应该包含三个要素:角色状态 + 环境描写 + 互动邀请

较差的: “你好,我是小雨。”

较好的: “雨滴顺着伞沿滑落,在石板路上溅起细碎的水花。小雨站在咖啡馆的屋檐下,朝你招了招手——‘这里这里!快过来,位置我已经占好了。’”

前者只是一个自我介绍,后者则建立了场景、情绪和互动入口。

1.3 角色卡嵌入世界书与自定义背景#

嵌入世界书:

在角色卡的 extensions.world 字段中,可以指定一个已有的世界书名称。当加载这个角色时,对应的世界书会自动激活:

"extensions": {
"world": "中土世界设定",
...
}

你也可以在角色编辑界面的 扩展 区域直接关联世界书——从下拉列表中选择即可。

关联世界书后,该世界书中的所有条目都会在对话中生效(触及关键词时自动注入)。这比在 description 中硬编码世界观描述高效得多,因为世界书只在被触发时才消耗 token。

自定义聊天背景:

为角色设置独特的聊天背景,可以大幅增强沉浸感:

  1. 进入角色编辑界面
  2. 找到 聊天背景 设置区域
  3. 上传一张背景图片(建议 1920x1080 以上)
  4. 设置背景模糊程度(Blur)和暗度(Darken)
  5. 保存后,该角色的所有对话都会使用此背景

背景图片存放在 ./data/user/backgrounds/ 目录下(手动安装)或对应数据卷中(Podman 安装)。

1.4 Character Expressions 配置#

Character Expressions(角色表情/立绘切换)让角色在对话中根据情绪或场景自动切换图像。这是目前社区 CCv2+ 的主流标配功能。

文件命名规则:

表情立绘通过文件命名约定来工作。你的角色图片目录结构应当如下:

./data/user/characters/你的角色名/
├── base.png # 基础立绘(默认显示)
├── happy.png # 开心
├── sad.png # 悲伤
├── angry.png # 愤怒
├── surprised.png # 惊讶
├── blush.png # 害羞/脸红
├── cry.png # 哭泣
├── smile.png # 微笑
└── custom.png # 自定义表情(可选)

截图辅助: 建议将角色卡目录的文件夹截图保存,可以清晰看到表情文件命名结构和对应关系。

在角色卡中配置表情:

在角色编辑界面或直接编辑 JSON 的 extensions 区域:

"extensions": {
"expressions": {
"happy": "happy.png",
"sad": "sad.png",
"angry": "angry.png",
"surprised": "surprised.png",
"blush": "blush.png",
"cry": "cry.png",
"smile": "smile.png",
"custom": "custom.png"
}
}

表情切换触发方式:

  • 手动触发:在聊天输入框上方点击表情图标,手动选择表情
  • AI 自动触发:当启用 Expression Image 扩展后,SillyTavern 会分析 AI 的回复内容,自动匹配对应的表情图像。AI 在回复中加入 *表情名*(如 *blush*)即可触发切换,或在扩展设置中选择”根据回复情感分析自动匹配”
  • 快捷键:在扩展设置中可以为常用表情绑定快捷键

表情图片规格建议:

  • 尺寸:建议与基础立绘一致(如 512x512 或 1024x1024)
  • 格式:PNG(支持透明背景)
  • 构图:保持角色位置一致,仅改变面部表情——否则切换时会有”跳跃感”
  • 工具:可以使用 ComfyUI 配合 Image-to-Image + ControlNet(OpenPose)批量生成统一构图的不同表情(见第 4 章的 ComfyUI 集成)

⬆ 返回目录


2. 世界书#

世界书(Worldbook / Lorebook)是 SillyTavern 最强大的功能之一。它解决了角色扮演中的一个核心矛盾:世界观信息太多,但 AI 的上下文窗口有限

2.1 工作原理#

世界书的核心机制是条件触发

用户输入 ──→ SillyTavern 扫描所有世界书条目
├── 如果未触发任何条目 → 不注入额外信息
│ (节省上下文)
└── 如果触发条目关键词 ──→ 将该条目的内容注入到 prompt 中
(仅在需要时消耗 token)

为什么世界书有用?

假设你正在玩一个中世纪奇幻角色。如果你把整个世界观(七个王国、三种魔法体系、百年战争历史、数十个地名人名)全部塞进角色卡的 description 字段,会发生两个问题:

  1. 浪费上下文窗口:每次对话无论是否涉及这些信息,AI 都要”记住”它们
  2. 信息稀释:世界观信息挤占了角色自身设定的空间,导致角色行为一致性下降

世界书完美解决了这个问题——只在需要时才注入相关信息。用户提到”龙石城”时,世界书自动注入这座城市的地理位置、历史背景和当前状态。用户提到”冰霜魔法”时,世界书注入该魔法体系的规则和使用限制。

注入位置:

世界书条目通常注入在 prompt 的角色描述区域之后、对话历史之前。具体位置可以通过 SillyTavern 的预设管理中的 Lorebook 注入位置 设置调整。

2.2 创建第一本世界书#

操作步骤:

  1. 点击左侧栏的 世界书 图标(一本书的图案)
  2. 点击 创建世界书 按钮
  3. 填写基本信息:
字段说明
名称世界书的名称,如”中土世界设定”
描述可选,给自己看的备注
扫描类型选择条目的触发方式(详见 2.3 节)
  1. 点击 保存,世界书创建完成
  2. 在空白世界书中点击 添加条目 开始创建具体内容

启用世界书:

创建完成后,需要为世界书分配角色或对话:

  • 全局启用:在设置中将世界书设为”全局世界书”,对所有角色生效
  • 角色绑定:在角色卡的 extensions.world 字段指定世界书名称,加载该角色时自动激活
  • 手动切换:在聊天界面点击世界书图标,在当前对话中手动启用或禁用

截图辅助: 建议截取世界书列表页和条目编辑弹窗的界面图,标注关键设置项的位置。

2.3 条目设计详解#

每个世界书条目包含触发条件和内容两大组成部分。理解触发机制是设计高质量世界书的关键。

关键词触发 vs 递归触发#

关键词触发(Primary / Secondary Keys):

这是最常用的触发方式。条目维护一个关键词列表,当用户或 AI 的输入中出现这些关键词时,条目被激活。

条目名称: 龙石城
主要关键词: [龙石城, 龙石, 城堡, Dragonstone]
次要关键词: [坦格利安, , 火山]
概率: 100%
  • 主要关键词(Primary Keys):出现即触发(可配置概率)
  • 次要关键词(Secondary Keys):出现时按概率触发
  • 概率设置:如果不想每次提到都触发,可以设置触发概率(如 30%)

递归触发(Recursive):

启用递归触发后,已经注入到 prompt 中的世界书内容本身也会被扫描触发新的条目。这适用于需要”连锁反应”的场景——提到一个地名,自动引出该地的人物,再引出相关事件。

注意: 递归触发需要谨慎使用。设置不当可能导致连锁注入失控、瞬间耗光上下文窗口。建议递归深度限制在 2-3 层以内。

权重与优先级#

当多个条目同时被触发时,权重(Weight) 决定了注入顺序:

权重值含义使用场景
10(最高)绝对优先级核心剧情线索、当前任务目标
5(默认)标准条目大多数常规设定
1(最低)低优先级背景细节、非关键信息

权重高者排在 prompt 的更前面。如果多个条目权重相同,按 添加顺序 排列。

深度/层级控制#

深度(Depth) 控制条目内容注入到上下文 prompt 中的位置:

  • Depth = 0:最靠前(靠近角色卡定义处,AI 首先”看到”这些信息)
  • Depth 越大:越靠后(远离角色卡,但仍在前置上下文区域内)

低 Depth 的世界设定对角色影响更大,高 Depth 的补充信息在后排填充。这用于设计信息优先级——核心设定(世界法则、种族特征)放低 Depth,次要细节(地名来源、历史典故)放高 Depth。

层级(Order / Priority within same depth):

同一深度层级内,Order 值决定条目的排列顺序。SillyTavern 注入时按 Depth 从小到大、同一 Depth 内按 Order 从小到大的顺序排列内容。

渐进式展开 Tips: 虽然 Depth 本身不提供”对话轮次门控”(那需要配合扩展或角色卡 scripting),但可以通过关键词设计实现类似效果——初期场景用通用关键词(如”森林”),深入后的线索用特定关键词(如”远古圣殿”),这样信息随着剧情推进自然解锁。

2.4 实践案例:奇幻世界观#

下面为一个名为”艾兰西亚”的虚构奇幻世界设计一组完整的世界书条目。Depth 值控制注入位置(0=靠近角色卡,越高越靠后),概率列控制次要关键词的触发几率(主要关键词始终 100% 触发)。

世界书名称: 艾兰西亚世界观

条目 1:世界概览(Depth=0, Weight=5)

字段内容
主要关键词艾兰西亚, 大陆, 世界
概率100%
内容艾兰西亚是一片被远古魔法塑造的大陆,由五个王国组成。千年前的精灵战争在这片土地上留下了深重的痕迹,被称为”裂痕”的神秘能量裂隙散布在大陆各处。

条目 2:银月森林(Depth=0, Weight=5)

字段内容
主要关键词银月森林, 精灵, Sylvan
次要关键词森林, 月亮, 古老
概率80%
内容银月森林位于艾兰西亚东部,是精灵族最后的庇护所。这里的树木通体银白,在月光下会散发微光。森林深处隐藏着通往远古精灵圣殿的入口。精灵女王艾莉丝特拉在此统治,她对人类的态度微妙而谨慎。

条目 3:裂痕能量(Depth=2, Weight=5)

字段内容
主要关键词裂痕, 能量裂隙, 虚空
概率100%
内容裂痕是精灵战争遗留的能量裂隙,散发出紫色的不稳定魔法能量。接触裂痕会导致生物异变或获得不可控的魔法能力。王室派出的”裂痕学者”团队正在研究封闭裂痕的方法。裂痕正在以每年约半米的速度扩张。

条目 4:暗影议会(Depth=5, Weight=10)

字段内容
主要关键词暗影议会, 影会, Shadow Council
次要关键词阴谋, 秘密组织, 幕后
概率50%
内容暗影议会是一个渗透了五大王国高层的秘密组织,由十二名”影主”领导。他们的目标是利用裂痕的能量打破远古封印,释放被囚禁的虚空之主。议会成员的身份连国王们都不知晓。

条目运作示意:

当用户第一次问”艾兰西亚的人如何看待魔法”时——条目 1(世界概览)触发,注入世界基本信息。当用户说”我走进银月森林”——条目 2 触发,注入森林描述。当对话深入(超过 5 轮),用户提到”有人在暗中操纵一切”——条目 4 以 50% 的概率触发,引入暗影议会。

这就是世界书的精髓——随着对话自然推进,世界信息逐层展开,而不是一次性地把所有设定塞给 AI。

⬆ 返回目录


3. 高级对话控制#

3.1 Author’s Note 与 Character Note#

这两个功能都允许你在 prompt 中注入自定义文本,但它们的注入位置作用范围不同。

Author’s Note(作者注释)#

注入位置: 紧贴在用户最新输入之前,对话历史的末尾。

作用: 在每次生成回复时,为 AI 提供一个”当前焦点”的提示。适合用于临时引导剧情方向

使用场景:

  • 希望 AI 在接下来的回复中侧重某个情绪:“(角色最近失去了亲人,她的笑容底下藏着悲伤)”
  • 引导故事走向:“(窗外传来了马蹄声,似乎有重要的客人到访)”
  • 临时调整行为:“(角色今天心情很好,比平时更爱开玩笑)”

设置方式:

  1. 点击输入框上方的 人形+铅笔 图标(Author’s Note 按钮)
  2. 在弹窗中输入注释文字
  3. 设置 注入频率(建议 1-4 条消息注入一次)
  4. 点击保存

配置建议:

注释位置: 在对话历史之后
注入频率: 2 # 每 2 条消息注入一次
角色深度: 4 # 对话 4 轮后才开始生效

Character Note(角色注释)#

注入位置: 角色描述区域(与角色卡的 descriptionpersonality 同区域)。

作用: 持续影响角色对自身的认知。适合用于定义角色的固定特征

使用场景:

  • 角色隐藏的秘密:“{{char}} 实际上是一名卧底,但绝不能透露这个身份”
  • 角色的身体特征:“{{char}} 左眼失明,听力异常敏锐”
  • 长期目标:“{{char}} 正在寻找一本失落的魔法书”

设置方式:

  1. 在角色编辑界面找到 Character Note 字段(也可在对话界面右侧面板中找到)
  2. 输入注释文本(支持 {{char}}{{user}} 占位符)
  3. 设置 插入深度(从第几轮对话开始生效)
  4. 保存

两者的区别总结:

维度Author’s NoteCharacter Note
注入位置用户消息之前(对话历史末尾)角色描述区域
影响范围临时、当前焦点持续、角色认知
典型长度短(1-3 句)中(1-5 句)
更新频率经常修改设置后少改
最佳用途引导剧情走向维持角色一致性

3.2 向量化记忆(Vector Storage)#

SillyTavern 的向量化记忆功能是解决”AI 长期记忆不足”痛点的主要方案。它通过 ChromaDB 将对话内容转换为向量(embedding),在需要时检索相关片段重新注入 prompt。

工作原理#

对话进行 ──→ SillyTavern 将每条消息转为向量 ──→ 存入 ChromaDB
└── 新消息到来时 ──→ 检索 ChromaDB 中的相关历史
└── 将检索到的相关片段注入 prompt

安装 ChromaDB#

方式 A:Podman 安装(推荐)

Terminal window
# 拉取 ChromaDB 镜像
podman pull chromadb/chroma:latest
# 创建数据卷
podman volume create chromadb-data
# 启动 ChromaDB(注意使用 8090 端口,避免与 SillyTavern 的 8000 端口冲突)
podman run -d \
--name chromadb \
-p 8090:8000 \
-v chromadb-data:/chroma/chroma \
chromadb/chroma:latest
# 验证运行
podman logs chromadb
# 看到 "chromadb" 相关启动日志即成功(例如 "Uvicorn running on http://0.0.0.0:8000")

方式 B:pip 安装(适合手动部署)

Terminal window
# 创建虚拟环境
python -m venv chroma-env
source chroma-env/bin/activate # Windows: chroma-env\Scripts\activate
# 安装 ChromaDB
pip install chromadb
# 启动服务(使用 8090 端口避免冲突)
chroma run --host 0.0.0.0 --port 8090

在 SillyTavern 中配置#

  1. 进入 扩展管理Vector Storage
  2. 启用 启用向量存储(Enable Vector Storage)
  3. 配置连接参数:
参数
API 地址http://127.0.0.1:8090(Podman 使用 http://host.containers.internal:8090
集合名称sillytavern-memories(可自定义)
Embedding 模型all-MiniLM-L6-v2(默认,可选 all-mpnet-base-v2 更精确但更慢)
检索数量3-5(每次检索几条相关记录)
相似度阈值0.7(低于此值不注入,减少噪音)
  1. 点击 连接,测试连通性
  2. 成功后,对话中的消息会自动被索引

注意事项:

  • ChromaDB 首次运行时需要下载 embedding 模型(约 80MB)
  • 向量化记忆会增加每次 API 请求的 token 消耗(注入检索到的历史片段)
  • 如果使用 Podman 安装,SillyTavern 需要通过网络访问 ChromaDB。Linux 下使用 host.containers.internal,Windows/Mac Podman Desktop 使用 host.docker.internal

效果说明#

启用向量化记忆后,AI 能”想起”更早的对话细节:

  • 之前:50 轮对话后,AI 可能忘记第 3 轮提到的关键物品
  • 之后:即使到了 200 轮,AI 仍能准确 recall 早期设定

但不要过度依赖——向量检索不是完美的。如果检索到的内容与当前对话不相关,反而可能混淆 AI。建议检索数量设为 3-5,相似度阈值不低于 0.7。

3.3 多角色群聊#

群聊功能让你创建包含多个角色的房间,体验多角色互动的角色扮演。

创建群聊房间#

  1. 点击左侧栏的 对话管理创建群聊
  2. 为群聊命名
  3. 从角色列表中选择加入的角色(至少 2 个)
  4. 点击 创建

添加角色与消息路由#

房间创建后,你可以在房间设置中:

  • 添加/移除角色:随时调整房间的角色阵容
  • 设置角色出场顺序:决定角色在输入框中出现的默认顺序
  • 角色发言模式
模式说明适用场景
轮流发言所有角色按序轮流回复餐桌对话、会议场景
仅指定角色只让指定角色回复引导特定角色说话
自动选择AI 根据上下文判断谁应该说话自由互动场景

消息路由规则:

在多角色对话中,你可以在消息中指定目标角色:

@艾琳 你昨天说的那件事,现在可以告诉我详情了吗?

这样只有被 @ 的角色会回复。如果不指定,SillyTavern 会根据当前对话焦点自动选择回复角色——通常是与上一条消息相关的角色。

调整角色回复权限: 在群聊设置中,你可以勾选哪些角色可以主动说话、哪些角色只在被 @ 时才回应。这样能避免”所有角色同时抢话”的混乱局面。

群聊性能提示#

  • 群聊的多角色设定会占用更多上下文 token(每个角色的描述都要注入)
  • 建议群聊角色不超过 4-5 个,否则上下文消耗过快
  • 角色描述长的角色,考虑使用世界书替代部分设定

3.4 角色分组与场景切换#

角色分组允许你为不同角色设置”群组”,方便在类似场景中快速切换:

  1. 在角色管理中创建 分组
  2. 将相关角色拖入同一分组(如”校园组”、“奇幻组”、“现代都市组”)
  3. 切换分组即可快速过滤角色列表

场景切换功能让你在同一个对话中切换地点或时间:

  1. 在对话界面中点击 场景管理
  2. 选择一个预设场景(或创建新场景)
  3. 场景切换会自动更新 scenario 字段
  4. 下次 AI 回复将基于新场景生成

场景可以与角色分组联动——例如”校园组”默认关联”教室”和”天台”两个场景,“奇幻组”关联”森林”和”城堡”。

⬆ 返回目录


4. 扩展与插件系统#

SillyTavern 的扩展系统是其生态的核心。通过扩展,你可以为角色扮演添加图片生成、语音输出、实时翻译、网络搜索等功能。

4.1 扩展管理界面概览#

扩展管理入口位于左侧栏的 拼图图标(扩展中心)。

界面主要区域:

  1. 已安装扩展列表:显示所有可用的扩展,每个扩展有独立的开关和设置面板
  2. 扩展设置:点击扩展名称展开详细配置选项
  3. 添加扩展:从社区下载或从本地加载扩展包

扩展通常以 JavaScript 文件(.js)形式放在 ./plugins/ 目录下(手动安装),或通过 Podman 的数据卷挂载。撰写本文时,SillyTavern 的内置扩展已经覆盖了大多数常见需求,大部分功能开箱即用。

4.2 ComfyUI 集成#

ComfyUI 是一个基于节点工作流的 Stable Diffusion 图像生成工具。SillyTavern 的 ComfyUI 扩展让 AI 可以”看见”和”创造”图像。

ComfyUI 安装#

方式 A:Podman 安装(推荐)

Terminal window
# 拉取 ComfyUI 镜像
podman pull ghcr.io/comfyanonymous/comfyui:latest
# 创建数据目录和模型目录
mkdir -p ~/comfyui/models
mkdir -p ~/comfyui/output
mkdir -p ~/comfyui/custom_nodes
# 启动 ComfyUI
podman run -d \
--name comfyui \
-p 8188:8188 \
-v ~/comfyui/models:/workspace/ComfyUI/models \
-v ~/comfyui/output:/workspace/ComfyUI/output \
-v ~/comfyui/custom_nodes:/workspace/ComfyUI/custom_nodes \
--device nvidia.com/gpu=all \
ghcr.io/comfyanonymous/comfyui:latest

注意: --device nvidia.com/gpu=all 仅在安装了 NVIDIA Container Toolkit 的 Linux 系统上生效。Windows/macOS 的 Podman 目前不支持 GPU 透传,建议在 Linux 上部署 ComfyUI。

方式 B:手动安装(跨平台兼容)

Terminal window
# 克隆仓库
git clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI
# 安装依赖
pip install -r requirements.txt
# 下载模型(以 SDXL 为例)
# 将 SDXL 基础模型放到 models/checkpoints/ 目录
# 启动
python main.py --listen 0.0.0.0 --port 8188

模型下载: SDXL 基础模型可从 Hugging FaceCivitAI 下载。将 .safetensors 文件放入 models/checkpoints/ 目录。

基本文生图工作流#

以下是一个完整的 ComfyUI 工作流 JSON,实现 SDXL 文生图功能。将此 JSON 通过 ComfyUI 的 Load 按钮加载:

{
"3": {
"class_type": "KSampler",
"inputs": {
"seed": 42,
"steps": 20,
"cfg": 7,
"sampler_name": "euler",
"scheduler": "normal",
"denoise": 1,
"model": ["4", 0],
"positive": ["6", 0],
"negative": ["7", 0],
"latent_image": ["5", 0]
}
},
"4": {
"class_type": "CheckpointLoaderSimple",
"inputs": {
"ckpt_name": "sd_xl_base_1.0.safetensors"
}
},
"5": {
"class_type": "EmptyLatentImage",
"inputs": {
"width": 1024,
"height": 1024,
"batch_size": 1
}
},
"6": {
"class_type": "CLIPTextEncode",
"inputs": {
"text": "",
"clip": ["4", 1]
}
},
"7": {
"class_type": "CLIPTextEncode",
"inputs": {
"text": "",
"clip": ["4", 1]
}
},
"8": {
"class_type": "VAEDecode",
"inputs": {
"samples": ["3", 0],
"vae": ["4", 2]
}
},
"9": {
"class_type": "SaveImage",
"inputs": {
"filename_prefix": "ComfyUI",
"images": ["8", 0]
}
}
}

加载后在节点编辑界面填入正面提示词(positive)和负面提示词(negative),即可运行。SillyTavern 的 ComfyUI 集成扩展会自动替换 prompt 节点中的文本,因此你只需要在 ComfyUI 中配好其他固定参数即可。

截图辅助: 建议截取 ComfyUI 节点编辑界面和运行成功后的图像输出界面,标注输入/输出节点和关键参数位置。

SillyTavern 端 API 连接配置#

  1. 在 SillyTavern 的 扩展管理 中找到 ComfyUI 扩展并启用
  2. 配置连接参数:
参数
API URLhttp://127.0.0.1:8188(同一台机器)
Workflow JSON上传上面创建的文生图工作流 JSON
正面提示词节点输入工作流中 CLIPTextEncode 的节点 ID(上面例子中是 6
负面提示词节点输入工作流中对应节点的 ID(上面例子中是 7
图片保存路径可选,默认使用 ComfyUI 的输出目录
  1. 点击 连接测试 验证连通性
  2. 保存配置

触发方式#

方式 1:手动触发角色立绘

在对话中选择角色消息,通过扩展菜单中的”生成立绘”按钮触发。SillyTavern 会将角色描述和当前对话上下文组装成 prompt 发送给 ComfyUI。

方式 2:自动生成场景插图

在扩展设置中启用 自动插图。当对话进入新场景时(如用户说”我们走进了一座黑暗的城堡”),SillyTavern 自动触发 ComfyUI 生成场景插图并显示在对话中。

方式 3:表情包批量生成

利用 ComfyUI 的批处理能力,结合 ControlNet(OpenPose + Canny),可以一次性生成同一角色不同表情的立绘集:

工作流:基础角色图 → ControlNet OpenPose → 不同表情 prompt → 批量输出

这要求 ComfyUI 中预先配置好带有 ControlNet 的工作流,并设置 batch_size 为需要生成的表情数量。

注意事项#

  • ComfyUI 图像生成需要 GPU,集成显卡(iGPU)通常无法使用
  • 生成一张 1024x1024 的 SDXL 图片在 RTX 4060 上约需 5-8 秒(20 步),实际速度受采样器、步数和 batch size 影响
  • 批量生成表情包可能需要几分钟,建议在不使用时关闭自动触发

4.3 TTS 文字转语音#

TTS(Text-to-Speech)扩展让角色的回复可以”读出来”,大幅增强沉浸感。2026 年有多种方案可选,下表汇总对比:

方案部署方式中文效果语种是否需要 GPU声音质量推荐度
Edge TTS云服务(免费)多语种(70+语言)无需Microsoft 神经网络语音,自然流畅★★★★★
XTTS-v2本地17 语种推荐 4GB+少数据声音克隆,可微调★★★★
GPT-SoVITS v2本地优(中文最强者)中/英/日/韩推荐 6GB+少数据克隆,中文表现顶级★★★★
F5-TTS本地多语种推荐 8GB+端到端架构,自然度高★★★
CosyVoice 2本地中/英推荐 6GB+阿里通义团队出品,中文优秀★★★★

推荐方案分析:

首选:Edge TTS(零配置、零成本)

Edge TTS 使用微软 Azure 的神经网络 TTS 服务,完全免费,无需注册 API Key,无需 GPU。它通过 Edge 浏览器的语音 API 调用,SillyTavern 中安装对应扩展后填入语音偏好即可。

SillyTavern 扩展配置:
提供商: Edge TTS
语音: zh-CN-XiaoxiaoNeural(中文女声,推荐)
zh-CN-YunxiNeural(中文男声)
语速: 1.0(0.5-2.0 可调)
音调: 1.0(0.5-2.0 可调)

如果你需要自定义角色声线(中文):GPT-SoVITS v2

GPT-SoVITS v2(GitHub)是目前中文语音克隆效果最好的开源方案。只需 10-30 秒的语音样本,就能复刻出角色独有的声线。

Terminal window
# GPT-SoVITS v2 安装(Podman,社区维护镜像)
podman pull breakstring/gpt-sovits:latest
podman run -d \
--name gpt-sovits \
-p 9870:9870 \
-v ~/gpt-sovits-data:/workspace/data \
--device nvidia.com/gpu=all \
breakstring/gpt-sovits:latest
# 启动后访问 http://localhost:9870 进入 Web UI
# 在 TTS 推理页面加载角色语音样本并生成

如果你需要多语种 + 简单使用:XTTS-v2(注意维护状态)

XTTS-v2(原 Coqui TTS,2024 年后项目已归档)支持 17 种语言。社区维护的 fork 仍在更新,但中文效果不如 GPT-SoVITS 自然。如果主要用于中文,优先选择 GPT-SoVITS。

Terminal window
# XTTS 原始安装(仓库已归档,可能无法直接用 pip 安装最新依赖)
pip install TTS
tts-server --model_name tts_models/multilingual/multi-dataset/xtts_v2

在 SillyTavern 中配置 TTS:

  1. 打开 扩展管理TTS
  2. 启用 Text-to-Speech 扩展
  3. 选择提供商(Edge TTS / XTTS / GPT-SoVITS / SillyTavern TTS 等)
  4. 填写 API 地址(本地 TTS 服务)或选择语音(Edge TTS)
  5. 设置语言和语音偏好
  6. 保存后,每条角色回复都会自动朗读

4.4 实时翻译扩展#

实时翻译扩展用于跨语言角色扮演场景——角色说日语,你看中文;或者你发中文,角色回复英文。

配置步骤:

  1. 扩展管理 中启用 Translate 扩展
  2. 选择翻译引擎:
引擎是否需要 API Key免费额度推荐场景
Google Translate无需完全免费大多数场景,够用
DeepL需注册每月 50 万字需要更高质量的翻译
LibreTranslate自托管免费隐私场景,自部署
OpenAI Translate需 OpenAI API Key按量计费需要上下文感知的翻译
  1. 设置源语言和目标语言
  2. 选择翻译范围:
    • 仅角色回复:用户不翻译,角色回复翻译
    • 双向翻译:用户和角色的消息都翻译
    • 自动检测:自动检测源语言并翻译成目标语言

典型配置示例(Google Translate,中文用户看日文角色):

翻译引擎: Google Translate
源语言: 日语(自动检测)
目标语言: 中文(简体)
翻译范围: 仅角色回复
显示模式: 双语对照(原文 + 翻译)

启用双语对照模式后,角色回复会同时显示原文和翻译,方便你学习语言也便于校验翻译质量。

4.5 Web Search 扩展#

Web Search 扩展让 AI 能够搜索互联网获取最新信息,突破了模型知识截止日期的限制。

前提条件: 需要一个搜索 API 的 Key。推荐方案:

搜索引擎API 接入费用说明
DuckDuckGo无需 API Key免费无需注册,直接可用,但有速率限制
Google Custom SearchAPI Key前 100 次/天免费需创建 Programmable Search Engine
SearXNG自托管免费元搜索引擎,隐私优先

配置步骤:

  1. 扩展管理 中启用 Web Search
  2. 选择搜索引擎:
    • 选择 DuckDuckGo(最简单,零配置)
    • Google(需填写 Search Engine ID 和 API Key)
    • SearXNG(需填写自托管实例 URL)
  3. 设置搜索触发方式:
    • 自动:AI 判断需要时自动搜索
    • 手动:用户在消息中使用 /search 关键词 触发
    • 混合(推荐):AI 建议搜索,用户确认后执行
  4. 设置搜索结果注入数量(建议 3-5 条)

使用场景:

  • 实时信息:问 AI”今天天气如何”时搜索天气预报
  • 设定考据:基于真实历史/地理的角色扮演中搜索细节
  • 知识问答:用户询问真实世界的事实性信息

注意: 启用 Web Search 后,API 调用会变慢(网络请求耗时),且搜索结果的 token 消耗需要计入上下文。建议只在需要实时信息的场景中开启。

⬆ 返回目录


5. 自托管本地模型#

5.1 为什么自托管#

在入门篇中,我们推荐新手使用 DeepSeek API 起步。当你深入使用 SillyTavern 后,自托管本地模型有几个独特的优势:

隐私:

  • 所有对话数据完全在本地,不会离开你的机器
  • 适合涉及敏感话题、原创世界观或商业机密的角色扮演

免费:

  • API 调用虽便宜(DeepSeek 几分钱一次完整对话),但高频使用月消费可达数十至上百元
  • 本地模型一次硬件投入,永久使用

无内容审核:

  • API 提供商通常有内容政策(Claude 最为严格)
  • 本地模型没有任何审查限制

离线可用:

  • 不需要互联网连接
  • 飞机上、偏远地区、网络故障时均可使用

劣势(需接受):

  • 需要一定硬件投入(显卡显存)
  • 中文角色扮演质量暂时不及顶尖 API 模型
  • 配置和维护需要一定技术能力

5.2 Ollama 安装#

Ollama 是目前最便捷的本地模型运行工具,支持 Windows、macOS、Linux 三平台。

安装#

Linux(推荐,性能最佳):

Terminal window
curl -fsSL https://ollama.com/install.sh | sh
# 验证安装
ollama --version
# 示例输出:ollama version 0.9.x 或更高

macOS:

ollama.com/download 下载 macOS 安装包(.dmg),或使用 Homebrew:

Terminal window
brew install ollama

Windows:

ollama.com/download 下载 Windows 安装包(.exe),双击安装。Ollama Windows 版本内置了 WSL2 后端。

拉取模型#

Ollama 使用 ollama pull 命令下载模型。以下是最常用的模型及其大小:

Terminal window
# Qwen3 系列(2026 年推荐)
ollama pull qwen3:8b # ~4.7GB(Q4_K_M 量化)
ollama pull qwen3:14b # ~8.2GB
ollama pull qwen3:32b # ~19GB
ollama pull qwen3:235b-a2b # ~137GB(需要多 GPU)
# Qwen2.5 系列(稳定兼容)
ollama pull qwen2.5:7b # ~4.2GB
ollama pull qwen2.5:14b # ~8.0GB
ollama pull qwen2.5:32b # ~18GB
ollama pull qwen2.5:72b # ~42GB
# DeepSeek 开源版
ollama pull deepseek-r1:14b # ~8.0GB(Q4_K_M)
ollama pull deepseek-r1:32b # ~19GB
ollama pull deepseek-r1:70b # ~42GB
# 其他值得尝试的模型
ollama pull llama3.1:8b # ~4.5GB
ollama pull llama3.1:70b # ~40GB
ollama pull mistral:7b # ~4.1GB

模型大小说明: 以上大小是量化后的 GGUF 模型体积。Ollama 默认使用 Q4_K_M 量化级别,在质量和占用之间达到了较好的平衡。

5.3 推荐中文模型#

截至 2026 年 5 月,以下是在 SillyTavern 上中文角色扮演表现最佳的本地模型:

第一梯队(推荐首选):Qwen3 系列

Qwen3 是阿里云于 2025 年 4 月发布的最新大模型系列,中文能力在开源模型中处于顶尖水平:

模型参数量最低显存中文 RP 质量特点
Qwen3-8B8B6GB良好速度快,入门首选
Qwen3-14B14B10GB优秀性价比最优选
Qwen3-32B32B20GB优秀接近闭源模型水平
Qwen3-235B-A2B235B (A2B)48GB (4-bit)顶级混合专家架构,需多 GPU

A2B 说明: Qwen3-235B-A2B 使用 MoE(Mixture of Experts)架构,每次推理只激活约 40B 参数,但总参数 235B。效果接近同规模密集模型,但推理速度快得多。

第二梯队:Qwen2.5 系列

Qwen2.5 虽然已被 Qwen3 取代,但作为上一个稳定版本仍然广泛使用,且 7B/14B 等小模型兼容性更好:

  • Qwen2.5-14B-Instruct:入门级中文模型,8-10GB 显存即可运行
  • Qwen2.5-32B-Instruct:性价比较高,需要 20GB 左右显存
  • Qwen2.5-72B-Instruct:高质量模型,需要 48GB 显存(常见于 2x3090/4090 或单张 A6000)

第三梯队:DeepSeek 开源版

DeepSeek R1 的开源权重系列在推理和创意写作方面表现出色:

  • DeepSeek-R1-Distill-Qwen-32B:经过 R1 蒸馏,推理能力强,中文 RP 质量好
  • DeepSeek-R1-Distill-Qwen-14B:较小蒸馏版本,适合中端显卡
  • DeepSeek-V3-0324(原始权重):需要 4-bit 量化后才能本地运行

5.4 量化级别选择指南#

GGUF 是 llama.cpp 生态的量化格式。同一个模型的不同量化版本,在质量大小之间做权衡。

GGUF 量化级别对比#

以 Qwen3-14B 为例,不同量化级别的参数:

量化级别文件大小显存需求质量保留推理速度推荐场景
Q4_K_M~8.2GB~10GB~98%最快日常使用首选
Q5_K_M~9.7GB~12GB~99%很快想提升一点质量时
Q8_0~14GB~16GB~99.5%显存充裕时
FP16~28GB~32GB100%一般质量无关场景 / 微调
Q3_K_L~6.8GB~8GB~95%最快低显存妥协方案
Q2_K~5.5GB~7GB~90%最快显存极低时

选择建议:

  • Q4_K_M 是最佳平衡点——质量损失几乎不可感知,体积和速度最优。Ollama 默认也是此级别
  • 如果你的显存刚好够(如 8GB 运行 14B),降级到 Q3_K_L
  • 如果显存充裕(如 24GB 运行 14B),可以上 Q8_0
  • 通常不建议 Q2_K——质量下降明显,一般只在 6GB 显卡运行 14B 模型时考虑

显存需求速查表(GGUF Q4_K_M)#

模型显存需求推荐最低显卡
Qwen3-8B / LLaMA 3.1-8B6-8 GBRTX 2060 8G / RTX 3050 8G
Qwen3-14B / Qwen2.5-14B10-12 GBRTX 3060 12G / RTX 4060 Ti 16G
Qwen3-32B / Qwen2.5-32B20-24 GBRTX 3090 24G / RTX 4090 24G
DeepSeek-R1-Distill-32B20-24 GBRTX 3090 24G / RTX 4090 24G
Qwen2.5-72B / LLaMA 3.1-70B42-48 GB2x RTX 3090 / RTX 6000 Ada
Qwen3-235B-A2B (4-bit)48-64 GB2x RTX 3090 / 2x RTX 4090

注意: 以上为运行模型的最小显存需求。实际使用中,上下文长度(num_ctx)也会占用显存——每 2048 token 的上下文约额外消耗 0.5-1GB 显存(取决于模型大小)。

5.5 连接 SillyTavern#

Ollama 启动并拉取模型后,连接 SillyTavern 非常简单。

启动 Ollama 服务:

Terminal window
# 确保 Ollama 服务在运行
ollama serve
# 在另一个终端验证连接
curl http://127.0.0.1:11434/api/tags
# 返回 JSON 列表,显示已拉取的模型

SillyTavern 配置:

API 连接 界面中填写:

参数
API 类型Chat Completion
API 源Ollama
API 端点 URLhttp://127.0.0.1:11434/v1
模型qwen3:14b(你拉取的模型名)
API Key留空

如果 SillyTavern 运行在 Podman 容器中,使用 http://host.containers.internal:11434/v1 来访问宿主机的 Ollama。

点击 连接 测试。成功后,就可以像使用任何云端 API 一样使用本地模型了。

Ollama 多模型切换:

Ollama 支持同时保持多个模型在内存中。在 SillyTavern 的 API 连接界面下拉菜单中可以选择不同模型,Ollama 会自动加载或卸载。

5.6 性能调优#

本地模型的性能优化主要集中在三个参数:上下文长度(num_ctx)、GPU 加速层数、并发设置。

上下文长度(num_ctx)#

Ollama 默认为 2048 token 的上下文长度,对于角色扮演来说太短。SillyTavern 中可以自定义:

Terminal window
# 方法一:在 SillyTavern 预设中设置 Context Size
# 方法二:通过 Ollama 的 modelfile 调整
# 创建自定义 Modelfile
cat > Modelfile << 'EOF'
FROM qwen3:14b
PARAMETER num_ctx 8192
EOF
# 创建自定义模型
ollama create qwen3:14b-ctx8k -f Modelfile
# 在 SillyTavern 中使用 qwen3:14b-ctx8k

上下文长度与显存关系:

模型2048 ctx4096 ctx8192 ctx16384 ctx32768 ctx
Qwen3-8B (Q4)6GB6.5GB7.5GB9GB12GB
Qwen3-14B (Q4)10GB11GB13GB17GB23GB
Qwen3-32B (Q4)20GB22GB26GB34GB48GB

建议: 8GB 显卡用户保持 4096-8192,16GB 用户可用 8192-16384,24GB 用户可达 16384-32768(14B 模型接近上限)。

GPU 加速层数(num_gpu)#

对于部分运行在 CPU+GPU 混合模式的系统,可以指定 GPU 层数:

Terminal window
# 在 Ollama 中使用 GPU 加速
# 通过 modelfile 设置
PARAMETER num_gpu 35 # Qwen3-14B 有 41 层,35 层在 GPU 上运行
# 或通过环境变量(一次性)
OLLAMA_NUM_GPU=35 ollama run qwen3:14b

NVIDIA GPU 加速前提:

Terminal window
# Linux 需要安装 NVIDIA Container Toolkit(如果使用 Podman)
# 或直接通过系统 Ollama 使用(推荐,无需容器)
nvidia-smi # 确认驱动和 CUDA 可用
ollama run qwen3:14b # Ollama 自动检测并使用 GPU

AMD GPU 加速(ROCm):

Terminal window
# Linux 下使用 ROCm 版 Ollama 安装脚本
curl -fsSL https://ollama.com/install.sh | sh -s -- --rocm
# 启动后,Ollama 会自动检测 AMD GPU 并使用 ROCm 加速
ollama run qwen3:14b

macOS(Metal):

Ollama for macOS 自动使用 Metal API 加速,无需特殊配置。

并发请求#

Ollama 默认可处理并发请求。SillyTavern 中的滑动回复(Swipe)功能会同时发送多个请求,Ollama 会自动排队处理:

Terminal window
# 查看 Ollama 运行状态
ollama ps
# 查看正在处理的请求数
# Ollama 会显示当前活跃的模型和正在处理的任务

如果并发生成时速度过慢,可以限制 SillyTavern 中的并发生成数(在预设设置中)。

5.7 硬件选型参考#

如果你正在考虑为本地模型购买或升级硬件,以下参考表可以帮助你做决策:

入门级(8GB 显存)#

显卡二手价格(2026.05)可运行模型
RTX 2060 SUPER 8G¥600-800Qwen3-8B (8K ctx), Qwen2.5-14B (Q3_K_L, 4K ctx)
RTX 3050 8G¥800-1,000同上
RTX 4060 8G¥1,600-2,000同上,速度快 30-50%

推荐配置: Qwen3-8B Q4_K_M + 8192 ctx

进阶级(12-16GB 显存)#

显卡二手价格(2026.05)可运行模型
RTX 3060 12G¥1,200-1,600Qwen3-14B (8K ctx), Qwen2.5-32B (Q3_K_L, 4K ctx)
RTX 4060 Ti 16G¥2,500-3,000Qwen3-14B (16K ctx), Qwen3-32B (Q3_K_L, 4K ctx)
RTX 4070 12G¥3,000-3,500Qwen3-14B (16K ctx)

推荐配置: Qwen3-14B Q4_K_M + 8192-16384 ctx

高端(24GB 显存)#

显卡二手价格(2026.05)可运行模型
RTX 3090 24G¥4,000-5,000Qwen3-32B (8K ctx), DeepSeek-R1-32B (8K ctx)
RTX 4090 24G¥10,000-13,000Qwen3-32B (16K ctx), Qwen2.5-72B (Q3_K_L, 4K ctx)
Tesla P40 24G¥800-1,200同上(但无 FP16 支持,速度较慢)

推荐配置: Qwen3-32B Q4_K_M + 8192-16384 ctx

旗舰(48GB+ 显存)#

配置估价格(2026.05)可运行模型
2x RTX 3090 (48GB)¥8,000-10,000Qwen2.5-72B (8K ctx), Qwen3-235B-A2B (4K ctx)
RTX 6000 Ada (48GB)¥25,000-30,000Qwen2.5-72B (16K ctx)
Apple M2 Ultra / M4 Max (128GB+ 统一内存)¥50,000+几乎任何开源模型

推荐配置: 双 3090 性价比最高,Mac Studio 统一内存方案对超大上下文友好

不推荐配置#

  • 集成显卡 / Intel UHD Graphics:显存不足且不支持 ROCm/CUDA,无法运行任何超过 1B 参数的模型
  • AMD 消费级显卡(RX 系列):ROCm 兼容性参差不齐,建议 NVIDIA 或 Mac
  • 仅有 CPU:可以运行,但速度极慢(~1-2 tokens/s 对于 7B 模型),体验很差

关于 Mac 统一内存#

Apple Silicon(M2/M3/M4 系列)统一内存在运行本地大模型方面有独特优势:显存等效于系统内存,意味着 M3 Max (128GB) 或 M3 Ultra (192GB) 可以运行常规独显无法企及的大模型。

Terminal window
# macOS Ollama 使用 Metal 加速
ollama run qwen3:32b
# 将在 M 系列芯片上自动启用 GPU 加速

但需要注意:Mac 的 GPU 计算能力(FLOPS)低于同价位 NVIDIA 独显,推理速度约慢 30-50%。Mac 的优势在于容量而非速度

⬆ 返回目录


以上就是 SillyTavern 进阶篇的全部内容。你现在已经掌握了角色卡深度定制、世界书设计、高级对话控制、扩展插件集成,以及自托管本地模型的完整知识体系。

在入门篇中你学会了”如何让 AI 回答”,在这篇进阶篇中你学会了”如何让 AI 回答得更好”。角色的表情切换让对话更有画面感,世界书让世界观更丰满,ComfyUI 赋予了 AI “看见”的能力,TTS 让它”开口说话”,而本地模型让你完全摆脱了云服务的束缚。

下一站可以阅读本系列第三篇:运维篇 — 生产部署与日常维护,学习如何将 SillyTavern 部署为可远程访问的生产服务,以及数据备份、安全加固、故障排查等运维技能。

参考链接汇总#

SillyTavern 完全指南(二):进阶篇 — 角色工程与功能扩展
https://blog.syomega.top/posts/sillytavern-advanced/
作者
酱w
发布于
2026-05-17
许可协议
CC BY-NC-SA 4.0