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 强度与提示词的作用范围限定为指定角色
  • 全局 CFG

    • 全局覆盖 CFG 强度与提示词(还会覆盖模型预设!)
  • CFG 高级设置(原名 CFG 提示词级联)

    • 用于合并上述三个下拉项中的提示词,并设置插入深度。

注意:若引导强度设为 1,则不会发送任何内容,因为此时 CFG 处于“关闭”状态。

群聊

在群聊中,CFG 强度面板如下所示:

CFG 群聊面板
CFG 群聊面板

主要变化是移除了角色 CFG,并在聊天 CFG 下拉项中出现了一个名为 Use Character CFG Scales 的复选框。它允许使用当前角色的引导强度,而不是聊天 CFG 强度所设置的值。

该功能的主要用途是根据每个角色各自的需求来调整强度。

此外,在提示词级联中勾选 Character Negatives,将会把各角色独立的负向提示词与聊天级负向提示词一并附加(如果启用了的话)。


概念

这不是 Stable Diffusion 里的那个吗?

既是也不是。LLM 上的 CFG 工作方式与人们在 Stable Diffusion 中所熟悉的有所不同。基于 LLM 的 CFG 原理是“提示词混合”。CFG 公式接收一个正向提示词和一个负向提示词,然后混合它们之间的差异。随后发送组合后的提示词并生成回复!

这里有一幅图示帮助理解这一概念。红色代表负向提示词,蓝色代表中性提示词,紫色代表被解读的混合结果。三者在所有空白部分的内容都相同,因此这些部分不会参与 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 的插入深度。不过这会极大改变回复的样貌,因此不建议在这里使用提示词级联!