CFG
页面作者:kingbri
贡献者:kingbri、Guillaume "Vermeille" Sanchez、AliCat
它是什么?
CFG,即无分类器引导,是一种用于让提示词中某些部分变得更弱或更突出的方法。
支持的后端 API
目前支持的后端有 oobabooga 的 textgen WebUI、NovelAI 和 TabbyAPI。 NovelAI 有自己的 CFG 文档。
警告:由于 CFG 会同时送入不止一个提示词,因此会增加 VRAM 占用!如果在开启 CFG 生成提示词时显存不足,可考虑减小上下文大小、使用参数更小的模型,或直接关闭 CFG。
配置
打开 CFG 设置的方式与打开作者备注相同:
下面是 CFG 面板的样子:
CFG 面板中有四个下拉项:
-
聊天 CFG
- 将 CFG 强度与提示词的作用范围限定为仅当前聊天
-
角色 CFG
- 将 CFG 强度与提示词的作用范围限定为指定角色
-
全局 CFG
- 全局覆盖 CFG 强度与提示词(还会覆盖模型预设!)
-
CFG 高级设置(原名 CFG 提示词级联)
- 用于合并上述三个下拉项中的提示词,并设置插入深度。
注意:若引导强度设为 1,则不会发送任何内容,因为此时 CFG 处于“关闭”状态。
群聊
在群聊中,CFG 强度面板如下所示:
主要变化是移除了角色 CFG,并在聊天 CFG 下拉项中出现了一个名为 Use Character CFG Scales 的复选框。它允许使用当前角色的引导强度,而不是聊天 CFG 强度所设置的值。
该功能的主要用途是根据每个角色各自的需求来调整强度。
此外,在提示词级联中勾选 Character Negatives,将会把各角色独立的负向提示词与聊天级负向提示词一并附加(如果启用了的话)。
概念
这不是 Stable Diffusion 里的那个吗?
既是也不是。LLM 上的 CFG 工作方式与人们在 Stable Diffusion 中所熟悉的有所不同。基于 LLM 的 CFG 原理是“提示词混合”。CFG 公式接收一个正向提示词和一个负向提示词,然后混合它们之间的差异。随后发送组合后的提示词并生成回复!
这里有一幅图示帮助理解这一概念。红色代表负向提示词,蓝色代表中性提示词,紫色代表被解读的混合结果。三者在所有空白部分的内容都相同,因此这些部分不会参与 CFG 混合。
如果你想进一步了解 CFG 与 LLM,Vermifuge 的原始论文在此。建议你读一读/听一听:
我需要 CFG 提示词吗?
不需要!CFG 提示词完全是可选的。只需将引导强度调整到高于 1 也会对回复产生影响,可以强化聊天与角色互动。
什么样的 CFG 提示词才算好?
我们已经确认,CFG 提示与 Stable Diffusion 的负向标签和嵌入不是一回事。那么该如何编写提示词呢?
警告:以下内容假设你已经使用 PLists 和 Ali:Chat 创建过角色。如果没有,不妨自行尝试各种提示技巧。
假设我有一个叫“John”的角色。从他的对话示例来看,John 本应始终保持开心和兴奋。但在与 John 聊天时,他有时却会悲伤和消沉。
为了消除这种情况,CFG 派上用场了!只需把负向提示词写成 [John's feelings: sad, depressed] 就能帮助削弱悲伤的部分。你也可以选择把正向提示词写成 [John's feelings: happy, joyful],进一步突出 John 开心的一面。
正向提示词
我在上一节已经提过,但想再多说几句。正向提示词用于进一步强化角色的某些方面。我们仍以 John 为例。通过 [John's feelings: happy, joyful] 这一正向提示词让他更开心,John 输出的对话就应比不包含该正向提示词时带有更多的愉悦感。
不过……
这些只是基于某一种角色格式的经验得出的粗略指南。编写提示词还有许多其他方式,你应该多加尝试。欢迎与其他用户分享你的心得!
引导强度
有一条经验法则:引导强度为 1 表示 CFG 已禁用。事实上,当引导强度为 1 时,SillyTavern 不会向你的后端发送任何内容。引导强度 >1 会在不同程度下产生其他章节所展示的效果。
然而,引导强度 <1 则会产生相反的效果,因为此时负向提示词被当作主要提示词使用。
我们再用 John 的例子。负向提示词为 [John's feelings: sad, depressed],正向提示词为 [John's feelings: happy, joyful],引导强度设为 0.8。
这反而会更多地强化负向提示词,你会看到 John 表现得比平时更悲伤,而不是更开心。
简而言之:从 1.5 的引导强度开始,然后根据输出结果上下调整。
提示词级联
负向提示词与正向提示词可以在不同 CFG 类型(即每聊天、每角色、全局覆盖)之间级联。更多信息请参见“配置”一节。
插入深度
遵循基本规则:某内容在提示词中位置越靠下,对回复的影响力就越大。对于聊天,我建议使用默认深度 1,因为它与 SillyTavern 的其他组件配合得非常灵活。
但如果你想尝试,也可以使用 0 的插入深度。不过这会极大改变回复的样貌,因此不建议在这里使用提示词级联!