世界信息

世界信息(又称为知识库或记忆书)是 ST 中一项强大的工具,可将提示词动态插入聊天记录,以引导 AI 的回复。

通常,世界信息(简称 WI)用于加深 AI 对虚构世界细节的理解,但你也可以利用世界信息条目将任何你希望的内容插入提示词。

它类似于一部动态词典,只有当消息文本中出现与条目关联的关键词时,才会将相应的世界信息条目内容插入提示词。

SillyTavern 引擎会自动激活并无缝整合合适的背景知识到提示词中,为 AI 提供背景信息。

需要注意的是,世界信息虽然有助于引导 AI 朝期望的内容方向生成,但并不保证这些内容一定会出现在生成的输出消息中。这取决于你的模型利用附加信息的能力!

使用技巧

  • 世界信息引擎是一款非常强大的提示词管理工具。不要局限于添加角色背景知识,尽情探索和尝试吧。
  • 激活关键词、标题及其他不在内容字段中的信息不会被插入上下文,因此每个世界信息条目都应包含完整、独立的描述。
  • 为了创建丰富详细的世界背景知识,条目之间可以通过递归激活相互关联和引用。详情参见下方递归章节。
  • SillyTavern 为插入的背景信息提供灵活的上下文预算管理。为节省提示词 token,建议保持条目内容简洁。

延伸阅读

上下文专属来源

除全局世界信息选择器外,知识库还可以分配给特定上下文——角色、人设或单个聊天。这些上下文专属来源会在对应的角色、人设或聊天处于活跃状态时自动激活。

角色背景知识

你可以选择将世界信息文件分配给某个角色,使其作为与该角色所有聊天(包括群聊)的专属背景知识来源。

每个角色可绑定一个主要世界信息文件。操作方法:进入角色管理面板,点击地球图标按钮,从下拉列表中选择世界信息文件,然后点击"确定"。导出角色时,此文件也会嵌入到角色卡数据中。

若要解除绑定、更改或为角色背景知识分配额外的世界信息文件,请按住 Shift 键点击地球图标按钮,或点击"更多..."然后选择"链接世界信息"。请注意,只有主要世界信息文件会随角色一同导出。

重命名世界信息文件时,系统会询问你是否要在所有引用该文件的角色中更新链接。这可确保重命名后现有的角色背景知识绑定关系保持完整。

人设知识库

可以将世界信息文件分配给当前活跃的人设。无论打开哪个角色或聊天,只要选择了该人设,此知识库中的条目就会被激活。

要为人设分配知识库,请打开人设管理面板,点击 人设背景知识按钮,从下拉列表中选择一个世界信息文件。如果已绑定知识库,点击该按钮会直接打开知识库编辑器。

聊天知识库

世界信息文件也可以分配给单个聊天。绑定到聊天的知识库条目仅在该特定对话中有效,不会延伸到与同一角色的其他聊天中。

要为聊天分配知识库,请点击角色管理面板中的 聊天背景知识按钮,从下拉列表中选择一个世界信息文件。如果已绑定知识库,点击该按钮会直接打开知识库编辑器。

背景知识插入策略

生成 AI 回复时,角色世界信息和其他辅助来源的条目将与全局世界信息选择器中的条目合并。默认情况下,条目将按以下顺序插入:

  • 聊天背景知识
  • 人设背景知识
  • 角色背景知识或全局背景知识,采用以下策略之一:

均匀排序(默认)

所有条目将根据其插入顺序排序,视为同一个大文件的一部分,忽略来源差异。

角色背景知识优先

角色世界信息中的条目将按插入顺序优先包含,然后是全局世界信息中的条目。

全局背景知识优先

全局世界信息中的条目将按插入顺序优先包含,然后是角色世界信息中的条目。

世界信息条目

关键词

触发世界信息条目激活的关键词列表。关键词默认不区分大小写(此项可配置)。

正则表达式作为关键词

关键词支持正则表达式,提供更灵活的匹配方式。这使得匹配包含可选词语或字符、空格以及正则表达式所有其他功能的动态内容成为可能。 如果定义的关键词是有效的正则表达式(Javascript 正则表达式风格,以 / 为分隔符,允许所有标志),则在判断条目是否应被触发时将按正则表达式处理。多个正则表达式可作为单独的关键词输入,并可协同工作。在正则表达式内部,逗号是允许的。纯文本关键词不支持逗号,因为逗号被视为关键词分隔符。

高级正则表达式匹配的使用场景示例: 当角色正在进行与天气相关的动作时,应插入一条条目/指令

/(?:{{char}}|he|she) (?:is talking about|is noticing|is checking whether|observes) (?:the )?(rainy weather|heavy wind|it is going to rain|cloudy sky)/i

有关正则表达式语法和功能的更多信息,请参阅:Regular expressions - JavaScript | MDN

高级正则表达式逐条消息匹配

ST 会在 WI 扫描缓冲区中为每条聊天消息添加 角色名: 前缀,在 v1.12.6 之后还会使用字符值 1(\x01)作为前置标记。 这意味着你可以使用绑定该分隔字符的正则表达式来匹配特定角色的输入或输出。

例如,要仅匹配用户说"hello",可以使用以下正则表达式:

/\x01{{user}}:[^\x01]*?hello/

关键词输入

输入关键词有两种模式,UI 略有不同。在 ⌨️ 纯文本模式(默认)下,可以在单个文本框中以逗号分隔的列表形式输入关键词,也可以包含正则表达式,但不会有特殊高亮显示。在 精美模式下,关键词以独立元素形式显示,正则表达式会有相应的高亮标识。该控件支持编辑和删除关键词,可通过输入控件内的内联按钮切换模式。

可选过滤器

与主关键词配合使用的附加关键词逗号分隔列表。 如果未提供参数,此标志将被忽略。 支持 AND ANY、NOT ANY 或 NOT ALL 逻辑

  1. AND ANY = 仅当主关键词和可选过滤关键词中的任意一个同时出现在扫描上下文中时,才激活条目。
  2. AND ALL = 仅当主关键词和所有可选过滤关键词都存在时,才激活条目。
  3. NOT ANY = 仅当主关键词存在而可选过滤关键词中没有任何一个出现在扫描上下文中时,才激活条目。
  4. NOT ALL = 如果所有可选过滤条件都出现在扫描上下文中,则阻止条目激活(即使主关键词已触发)。

这些关键词也支持正则表达式

条目内容

条目激活后插入提示词中的文本。

插入顺序

数值型。当多个条目同时激活时,定义条目的优先级。顺序数值较大的条目将被插入到上下文靠后的位置,对输出的影响更大。例如,顺序编号为 100 的条目将在顺序编号为 250 的条目之前出现在上下文中。

插入位置

  • 角色定义之前: 世界信息条目插入在角色描述和场景之前,对对话有适度影响。
  • 角色定义之后: 世界信息条目插入在角色描述和场景之后,对对话影响更大。
  • 示例消息之前: 世界信息条目被解析为示例对话块,插入在角色卡提供的示例之前。
  • 示例消息之后: 世界信息条目被解析为示例对话块,插入在角色卡提供的示例之后。
  • 作者注记顶部: 世界信息条目插入到作者注记内容的顶部,影响程度取决于作者注记的位置。
  • 作者注记底部: 世界信息条目插入到作者注记内容的底部,影响程度取决于作者注记的位置。
  • @ D: 世界信息条目插入到聊天中指定深度位置(深度 0 为提示词底部)。
    • ⚙️ - 作为系统角色消息
    • 👤 - 作为用户角色消息
    • 🤖 - 作为助手角色消息
  • 输出口: 世界信息条目不会自动注入。其内容存储在一个命名输出口下,你可以通过调用 {{outlet::名称}} 精确控制其在提示词中的显示位置。

示例消息条目将根据提示词构建设置进行格式化:指令模式或聊天补全提示词管理器。它们也遵循示例消息行为规则:在上下文满时逐渐被推出、始终保留,或完全禁用。

如果你的作者注记已禁用(插入频率 = 0),处于作者注记位置的世界信息条目将被忽略!

输出口名称

当选择输出口插入位置时,条目会出现一个额外的输出口名称字段。你在此处输入的名称将条目分组在一起,并定义你手动将其引入提示词时使用的标记。

提示词管理器高级格式化提示词字段中使用 {{outlet::你的名称}} 宏。构建提示词时,该宏将被替换为所有共享相同输出口名称的世界信息条目的合并内容,以换行符分隔,按插入顺序值排序。

如果输出口条目没有名称,生成时将被跳过,因此请务必填写该字段。输出口名称支持基于已使用名称的自动补全,便于复用一致的标签。

限制与注意事项

  • 不支持在世界信息条目内放置输出口宏,这样做不会生效。这与世界信息的求值顺序相冲突,可能导致无限循环。
  • 不支持嵌套输出口。不能在一个输出口的内容中放置另一个输出口宏,原因同上,可能导致无限循环。
  • 角色卡字段(描述、性格、场景等)无法展开输出口。这些字段会提前解析,以便作为世界信息触发器的附加匹配来源,这意味着处理其文本时输出口尚不可用。如需在提示词主体中放置输出口内容,请使用其他支持宏的字段。
  • 作者注记编辑器同样无法解析输出口。若要在作者注记附近放置输出口内容,请将条目分配到作者注记顶部作者注记底部插入位置,而不是依赖宏。
  • 输出口名称区分大小写。{{outlet::}} 宏使用的大小写必须与条目输出口名称中的大小写完全一致,否则不会返回任何内容。
  • 调用宏时,输出口名称首尾的空格会被忽略,因此含有多余空白的名称将无法匹配。请避免在名称中添加填充空格,以确保能够正确解析。
  • 没有任何内容分配的输出口宏将被替换为空字符串。

条目标题 / 备注

一个文本字段,供你为条目添加标签,不会被 AI 或任何触发逻辑使用。

如果为空,可以通过点击"填充空备注"按钮,使用条目的第一个关键词来自动填充。

策略

  1. 🔵(蓝圈)= 条目无需任何关键词,无论内容如何都会触发。
  2. 🟢(绿圈)= 条目仅在存在关键词时才会触发。
  3. 🔗(链接)= 允许通过嵌入相似度来插入条目。

每个条目还有一个开关,可以启用或禁用该条目。

概率(触发%)

此值类似于附加过滤器,为条目在任何方式激活时(常驻、主关键词、递归)增加一个被插入的概率。

  1. 概率 = 100 表示每次激活都会插入该条目。
  2. 概率 = 50 表示条目以 1:1 的概率插入。
  3. 概率 = 0 表示条目不会被插入(相当于禁用)。

利用此功能可在聊天中创建随机事件。例如,每条消息中有 1% 的概率,如果消息中提到了远古神明的名字,它就会苏醒。

包含组

包含组控制当多个具有相同组标签的条目同时被触发时,如何选择条目。如果多个具有相同组标签的条目被激活,只有一个会被插入提示词。

默认情况下,选择的条目基于其组权重(默认为 100 点)随机选取——数值越高,被选中的概率越大。这允许在已触发条目中随机选择,为交互增添惊喜和多样性。

单个条目可以属于多个包含组(以逗号分隔列表定义)。上述逻辑同样适用。如果该条目被触发,它将禁用属于其任意一个组的所有其他条目。因此,如果任意一个组被激活,该条目都不会被激活。

优先包含

为了更好地控制通过包含组激活的条目,你可以使用"优先包含"设置。此选项允许你确定性地指定选择哪个条目,而不是随机滚动组权重概率。

如果多个具有相同组标签且开启了此设置的条目被激活,将选择"顺序"值最高的那个。这对于通过包含组创建回退序列非常有用。例如,优先选择具有更强调性的低深度条目,或在两个条目都有效时选择特定的场景指令。

使用组评分

当此设置在全局或单个条目上启用时,激活的条目关键词数量将决定组赢家的选择。只有具有最多关键词匹配数的组子集才会留下,通过组权重或包含优先级进行激活——其余的将被停用并从组中移除。

利用此功能可为大型组中的单个条目提供更高的特异性。例如,它们可以拥有一个公共关键词和一个特定关键词。当没有提供特定关键词时,将插入随机条目,反之亦然。

主关键词的评分计算逻辑为 1 次匹配 = 1 分。

对于次要关键词,交互取决于所选的选择性逻辑:

  1. AND ANY:1 次次要匹配 = 1 分。
  2. AND ALL:如果所有次要关键词都匹配,则每个次要关键词得 1 分。
  3. NOT ANY 和 NOT ALL:不计分。

示例:

  • 条目 1:关键词:song、sing、Black Cat。组:songs
  • 条目 2:关键词:song、sing、Ghosts。组:songs

输入 sing me a song 可以激活任意条目(两者都激活了 2 个关键词),但 sing me a song about Ghosts 只会激活条目 2(激活了 3 个关键词)。

自动化 ID

允许将世界信息条目与快速回复扩展中的 STscript 脚本集成。如果快速回复命令和 WI 条目具有相同的自动化 ID,当具有匹配 ID 的条目被激活时,命令将自动执行。

自动化按触发顺序执行,遵循你指定的排序策略,将角色背景知识插入策略与"优先级"排序相结合。这将导致蓝圈条目优先处理,然后按其指定的"顺序"处理其他条目。递归触发的条目将在之后按相同顺序处理。

如果多个具有相同自动化 ID 的条目被激活,脚本命令只执行一次。

角色过滤器

可以激活此条目的角色名称列表。如果此列表不为空,条目只会为名称在列表中的角色激活。当选择了标签时,条目只会为拥有该特定标签的角色激活。

"排除"模式会反转过滤器,即条目会对所有角色激活,除了添加到列表中或拥有所选标签的角色。

触发器

可以激活此世界信息条目的生成类型。如果未选择任何类型,则条目可以在所有生成类型中激活。如果选择了一种或多种类型,条目只会在这些特定生成类型中激活:

  • 普通: 常规消息生成请求。
  • 继续: 按下"继续"按钮时。
  • 角色扮演: 按下"角色扮演"按钮时。
  • 滑动: 通过滑动触发生成时。
  • 重新生成: 在单人聊天中按下"重新生成"按钮时。
  • 静默: 后台生成请求,通常由扩展STscript 命令触发。

附加匹配来源

默认情况下,世界信息条目仅与当前对话的内容进行匹配。这些选项允许你将条目与不在聊天中显示的不同角色信息,甚至人设信息进行匹配。当你希望在多个角色间使用大量条目,但又不想维护大型标签列表,或不想在每次创建新角色时都更新角色过滤器列表时,这非常有用。这也允许你根据当前活跃的人设来匹配条目。

  • 角色描述: 与角色描述进行匹配。
  • 角色性格: 与角色性格摘要进行匹配,位于高级定义下。
  • 场景: 与角色指定场景进行匹配,位于高级定义下。
  • 人设描述: 与当前选择的人设描述进行匹配。
  • 角色注记: 与角色注记进行匹配,位于高级定义下。
  • 创作者注记: 与角色创作者注记进行匹配,位于高级定义下。创作者注记通常不包含在提示词中。

向量存储匹配

向量存储扩展通过使用最近聊天消息与世界信息条目内容之间的相似度,提供了关键词匹配的替代方案。

要启用和使用此功能,需要满足以下前提条件:

  1. 向量存储扩展已启用,并配置为使用一种可用的嵌入来源。
  2. 向量存储扩展设置中已勾选"为世界信息启用"复选框。
  3. 允许无关键词匹配的世界信息条目具有"向量化"(🔗)状态,或者向量存储设置中已勾选"为所有条目启用"选项。

扩展中向量化模型的选择以及"嵌入"这一术语背后的理论含义在此不作介绍。如需更多信息,请查阅数据库指南。

向量存储匹配遵循以下规则:

  • 允许与向量存储匹配的最大条目数可通过"最大条目数"设置进行调整。此数值仅设置上限,不影响世界信息激活设置中设定的 token 预算。所有预算规则仍然适用。
  • 此功能仅替代关键词检查。条目被插入还需满足所有其他检查:触发概率、角色过滤器、包含组等。
  • 激活设置或条目覆盖中的"扫描深度"设置不会被使用,而是使用向量存储的"查询消息数"值来获取匹配文本。这允许将"扫描深度"设置为 0,从而不进行常规关键词匹配,但条目仍然可以通过向量激活。
  • "向量化"状态只是一个附加标记。条目仍然会像普通的、已启用的、非常驻记录一样,在设置了关键词的情况下由关键词激活。删除关键词后,条目才会仅由向量激活。

定时效果

通常,世界信息评估是无状态的,即评估结果相同,仅取决于当前聊天上下文。然而,引入定时效果后,你可以创建具有激活延迟、触发后保持活跃,或触发后一段时间内无法再次触发的条目。

定时效果规则

  1. 效果的时间帧以消息数为单位(不是消息/交流对),0 表示无效果。
  2. 效果仅适用于条目被激活的聊天中。分支聊天继承父聊天的状态。
  3. 如果聊天没有推进(例如最后一条消息被滑动或删除),活跃的定时效果将被移除。
  4. 对当前处于定时效果中的条目进行任何更改,都会导致效果被强制移除。
  5. 如果效果已激活,重复触发关键词不会刷新效果持续时间。

定时效果类型

  1. 粘性 - 条目在激活后保持活跃 N 条消息。粘性条目在过期之前的后续扫描中忽略概率检查。
  2. 冷却 - 条目在激活后 N 条消息内无法再次激活。可与粘性配合使用:粘性持续时间结束后条目进入冷却。
  3. 延迟 - 条目只有在评估时聊天中至少有 N 条消息才能激活。
    • 延迟 = 0 -> 条目可以随时激活。
    • 延迟 = 1 -> 如果聊天为空(无问候语),条目无法激活。
    • 延迟 = 2 -> 如果聊天中有零条或只有一条消息,条目无法激活,以此类推。

定时效果示例

条目配置:粘性 = 3,冷却 = 2,延迟 = 2。

消息 0:延迟
消息 1:条目激活
消息 2:粘性
消息 3:粘性
消息 4:粘性
消息 5:冷却
消息 6:冷却
消息 7:条目可再次激活

激活设置

世界信息界面顶部的可折叠菜单。

扫描深度

可在条目级别覆盖。

定义应扫描聊天历史中多少条消息以查找世界信息关键词。

  • 如果设置为 0,则仅评估递归条目和作者注记。
  • 如果设置为 1,则 SillyTavern 仅扫描最后一条消息。
  • 2 = 最后两条消息,以此类推。

包含名称

定义聊天参与者的名称是否应作为消息前缀包含在扫描文本缓冲区中。这允许激活将名称用作关键词的条目,而无需在消息中直接提及名称。

以下是扫描文本的示例,假设聊天参与者名为 Alice 和 Bob。

已启用(默认):

Alice: Hello! Good to see you.
Bob: How is the weather today?

已禁用:

Hello! Good to see you.
How is the weather today?

上下文% / 预算

定义世界信息条目一次可使用多少 token。 你可以相对于 API 最大上下文设置定义阈值(上下文%),或定义绝对 token 阈值(预算)。

如果预算耗尽,则即使提示词中存在关键词,也不会再激活更多条目。

常驻条目将首先插入,然后是顺序数值较大的条目。

直接提及关键词插入的条目,优先级高于在其他条目内容中提及关键词插入的条目。

最小激活数

此设置与最大递归步骤互斥。

最小激活数:如果设置为非零值,将忽略"扫描深度"的限制,从最新消息向后搜索整个聊天记录,直到触发了最小激活数中指定数量的条目。这仍然受最大深度设置或整体预算上限的限制。

由最小激活数触发的额外扫描不会检查上一步递归添加的条目。只有聊天消息和扩展提示词才能触发这些额外激活。然而,由最小激活数激活的条目可以像往常一样触发其他条目。

最大深度

使用最小激活数设置时扫描的最大深度。

递归扫描

递归扫描允许条目激活其他条目,或被其他条目激活,从而在不同的世界信息条目之间实现复杂的交互和依赖关系。此功能可以显著增强创意场景的动态性。 是否启用递归扫描可通过全局设置递归扫描来控制。 有三个选项可控制每个条目的递归:

  • 不可递归: 选择此复选框后,条目不会被其他条目激活。这对于不应被其他世界信息条目更改或影响的静态信息很有用。

  • 阻止进一步递归: 选择此选项可确保一旦此条目被激活,它就不会触发任何其他条目。这有助于避免意外的激活链。

  • 延迟至递归: 此条目仅在递归检查期间被激活,即不会在初始扫描中触发,但可以被启用了递归的其他条目激活。现在,通过为这些延迟添加递归级别,条目按级别分组。最初只有第一级(数字最小的)会匹配。一旦没有匹配项,下一级就有资格匹配,以此类推,直到检查完所有级别。这样可以更好地控制递归期间如何以及何时揭示更深层的信息,特别是与 NOT ANY 或 NOT ALL 关键词匹配条件组合使用时。

条目可以通过在内容文本中提及其他条目的关键词来激活它们。

例如,如果你的世界信息包含两个条目:

条目 #1
关键词:Bessie
内容:Bessie 是一头奶牛,是 Rufus 的朋友。
条目 #2
关键词:Rufus
内容:Rufus 是一只狗。

如果消息文本中仅提到了 Bessie两个条目都将被引入上下文。

最大递归步骤

此设置与最小激活数互斥。

设置为零时,递归嵌套仅受提示词预算限制。设置为非零值时,将总扫描次数限制为所需的最大"嵌套级别"。

示例值:

  • 1 实际上禁用了递归,因为检查在第一步后停止。
  • 2 只能激活一次递归条目。
  • 3 可以触发两次递归……

区分大小写的关键词

可在条目级别覆盖。

要被引入上下文,条目关键词需要与世界信息条目中定义的大小写完全匹配。

当你的关键词是常见词语或常见词语的一部分时,此功能非常有用。

例如,启用此设置后,关键词"rose"和"Rose"将根据输入内容被区别对待。

匹配完整单词

可在条目级别覆盖。

仅包含一个单词的关键词条目,只有在搜索文本中出现完整单词时才会匹配。默认启用。

例如,如果启用了此设置且条目关键词为"king",则"long live the king"这样的文本会被匹配,但"it's not to my liking"不会。

重要: 此设置对于不使用空格分隔单词的语言(如日语或中文)可能会产生不良影响。如果你用这些语言编写条目,建议保持关闭。

溢出提醒

如果激活的世界信息超过分配的 token 预算,显示提醒。