摘要

这是什么?

本扩展允许你基于聊天中发生的事件,创建、存储并使用自动生成的摘要。摘要可以帮助梳理故事发展的整体脉络,这或许可以被视为一种长期记忆,但对此说法需保持谨慎。由于摘要由语言模型生成,其输出可能会丢失一些重要细节或包含幻觉内容,因此建议你随时关注摘要状态,并在必要时手动更正。

常规配置

摘要扩展默认随 SillyTavern 一起安装,因此它会出现在 ST 的扩展面板(堆叠立方体图标)列表中,如下所示:

摘要配置面板
摘要配置面板
  • 当前摘要 - 显示当前摘要,并提供修改能力。摘要会更新并嵌入到生成摘要时上下文中最后一条消息所属的聊天文件元数据中。如果删除或编辑了附带摘要的聊天消息,状态将回退到上一个有效摘要。
  • 恢复上一个 - 移除当前摘要,将其回滚到上一个状态。当摘要器在某一时刻表现不佳时,此功能很有用。
  • 暂停 - 勾选此项可阻止摘要被自动更新。如果你希望提供自定义摘要,或通过清空输入框并停止更新来彻底禁用摘要,此功能很有用。
  • 弹出窗口 - 允许将摘要分离为侧边栏上的可移动 UI 面板。适用于桌面布局,无需在扩展菜单中来回导航即可轻松访问摘要设置。
  • 注入模板 - 定义摘要被插入到常规聊天提示词时的包装方式。应使用一个特殊的 {{summary}} 宏来标记当前摘要状态在提示词注入文本中的确切位置。
  • 注入位置 - 设置提示词注入的位置。其选项与作者备注相同:在主提示词之前或之后,或在聊天内按指定深度注入。

支持的摘要来源

主 API

摘要将由你当前选择的 AI 后端、模型和设置驱动。此方式无需额外配置,只需一个可用的 API 连接即可。

此选项有以下子模式,它们在摘要提示词的构建方式上有所不同:

  1. Raw(原始),阻塞式。摘要将仅使用摘要提示词和聊天历史来生成。后续的提示词还将包含上一次摘要,以及摘要生成之后发送的消息(参见示例)。此模式会(且必然会)生成彼此之间差异很大的提示词,因此不建议在提示词处理速度较慢的后端上使用,例如 llama.cpp 及其衍生项目。
  2. Raw(原始),非阻塞式。与上述相同,但在摘要生成期间不会阻塞聊天生成。并非所有后端都支持并发请求,因此如果摘要失败,请切换到阻塞模式。
  3. Classic(经典),阻塞式。摘要提示词会作为一条中立的系统指令附加在你常规生成提示词的末尾,不会省略角色卡、主提示词、对话示例以及其他聊天提示词部分。这通常生成的提示词能很好地复用已处理的提示词,因此推荐与 llama.cpp 及其同类项目一起使用。

摘要设置说明

  1. 摘要提示词 - 定义用于创建摘要的提示词。可包含任意已知宏,以及一个特殊的 {{words}} 宏(见下文)。
  2. 目标摘要长度(词数) - 定义可插入到摘要提示词中的 {{words}} 宏的值。此设置完全是可选的,若未使用该宏则不会有任何效果。
  3. API 响应长度(token) - 允许为生成摘要设置一个覆盖值,使其不同于全局设置的响应长度。
  4. 每次请求的最大消息数 (仅限 raw 模式) - 用于限制单个摘要提示词中将包含的最大消息数。0 表示无明确限制,但实际待摘要的消息数仍取决于最大上下文大小,其计算公式为:最大摘要缓冲区 = 上下文大小 - 摘要提示词 - 上一次摘要 - 响应长度。当希望在拥有大上下文窗口的模型上获得更聚焦的摘要时,请使用此项。
  5. 不含 WI/AN - 从待摘要的文本中省略世界书(WI)和作者备注(AN)。仅在使用 Classic 提示词构建器时生效。Raw 提示词构建器始终省略 WI/AN。
  6. 每 X 条消息更新一次 - 设置生成摘要的间隔。0 表示禁用自动摘要,但你仍可通过点击“立即摘要”按钮手动触发。应根据提示词缓冲区被聊天消息完全填满的速度来调整此项。理想情况下,你希望在消息开始被挤出提示词时生成第一条摘要。
  7. 每 X 个词更新一次 - 与上文相同,但以词(而非 token!)为单位替代消息数。由于聊天消息的内容通常难以预测,理论上这可以是更精确的度量方式,但实际效果因人而异。

如果两个“每...更新一次”滑块都设置为非零值,则两者会分别在各自的间隔触发摘要更新,取决于哪个先到。强烈建议在切换到上下文大小不同的其他模型时相应地更新这些值,否则摘要生成可能会触发得过于频繁,或根本不触发。

如果你对间隔设置拿不准,可以点击“每...更新一次”滑块上方的“魔法棒”按钮,它会基于一些简单的启发式规则尝试估算最优值。该算法的简要说明如下:

  1. 计算所有聊天消息的 token 数与词数
  2. 根据期望的提示词词数确定目标摘要长度
  3. 基于平均消息长度计算可以容纳在提示词中的最大消息数
  4. 如果设置了“最大消息数”,则调整平均值以考虑超出摘要限制的消息
  5. 将调整后的每次提示词平均消息数向下取整为 5 的倍数

提示词示例

Raw 提示词

System:
[Summarization prompt]

Previous summary.

User:
Message foo.

Char:
Message bar.

Classic 提示词

[Main prompt]

[Character card]

[Example dialogues]

User:
Message foo.

Char:
Message bar.

System:
[Summarization prompt]

Extras API

启用了 summarize 模块的 Extras 服务器可以运行一个辅助摘要模型(BART)。

它的上下文大小非常小(约 1024 token),因此处理大型摘要的能力相当有限。

要配置 Extras 摘要来源,请执行以下操作:

  1. 安装或将 Extras 更新到最新版本。
  2. 启用 summarize 模块运行 Extras:python server.py --enable-modules=summarize

更改摘要模型

默认情况下,摘要功能使用 Qiliang/bart-large-cnn-samsum-ChatGPT_v3 模型进行摘要。

这可以通过命令行参数 --summarization-model=(###Hugging-Face-Model-URL-Here###) 来更改。

一个已知的备选摘要模型是 Qiliang/bart-large-cnn-samsum-ElectrifAi_v10