# Summarize (摘要)

# 这是什么?

此扩展允许您创建、存储和使用基于聊天中发生的事件自动生成的摘要。摘要可以帮助概述故事中发生的一般细节,这可能被解释为长期记忆,但请谨慎对待这种说法。由于摘要是由语言模型生成的,输出可能会丢失一些重要细节或包含幻觉,因此建议您始终跟踪摘要状态,并在需要时手动纠正。

# 常规配置

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

摘要配置面板
摘要配置面板

  • 当前摘要 - 显示并提供修改当前摘要的功能。摘要会更新并嵌入到生成摘要时上下文中最后一条消息的聊天文件元数据中。删除或编辑附加了摘要的聊天消息将使状态恢复到最后一个有效的摘要。
  • 恢复上一个 - 删除当前摘要,回滚到上一个状态。如果摘要器在任何时候表现不佳,这很有用。
  • 暂停 - 选中此项可防止摘要自动更新。如果您想提供自己的自定义摘要或通过清除框并停止更新来有效禁用摘要,这很有用。
  • 弹出窗口 - 允许将摘要分离到侧边栏上的可移动 UI 面板中。对于桌面布局来说很有用,可以轻松访问摘要设置,而无需浏览扩展菜单。
  • 注入模板 - 定义摘要在插入常规聊天提示时如何包装。应使用特殊的 {{summary}} 宏来表示提示注入文本中当前摘要状态的确切位置。
  • 注入位置 - 设置提示注入的位置。选项与作者注释相同:在主提示之前或之后,或在指定深度的聊天中。

# 支持的摘要源

# 主要 API

摘要将由您当前选择的 AI 后端、模型和设置提供支持。此方法不需要额外设置,只需要一个正常工作的 API 连接。

此选项有以下子模式,根据摘要提示的构建方式而有所不同:

  1. 原始,阻塞。摘要将仅使用摘要提示和聊天历史生成。后续提示还将包括生成摘要后发送的消息的前一个摘要(参见示例)。此模式可能(而且会)生成提示之间有很大变化的提示,因此不建议在处理提示时间较慢的后端(如 llama.cpp 及其衍生产品)中使用。
  2. 原始,非阻塞。与上述相同,但在生成摘要期间不会阻塞聊天生成。并非每个后端都支持同时请求,因此如果摘要失败,请切换到阻塞模式。
  3. 经典,阻塞。摘要提示将作为中性系统指令发送在您通常的生成提示末尾,不省略角色卡片、主提示、示例对话和聊天提示的其他部分。这通常会产生与重用处理的提示配合良好的提示,因此建议与 llama.cpp 及其兄弟一起使用。

# 摘要设置说明

  1. 摘要提示 - 定义将用于创建摘要的提示。可以包含任何已知的宏,以及特殊的 {{words}} 宏(见下文)。
  2. 目标摘要长度(字数) - 定义可以插入到摘要提示中的 {{words}} 宏的值。此设置完全是可选的,如果不使用该宏,则完全没有效果。
  3. API 响应长度(令牌) - 允许为生成与全局设置值不同的摘要设置覆盖 API 响应长度。
  4. 每个请求的最大消息数_(仅限原始模式)_ - 设置限制一个摘要提示中包含的最大消息数。0 表示没有明确限制,但要摘要的结果消息数仍将取决于最大上下文大小,使用以下公式计算:最大摘要缓冲区 = 上下文大小 - 摘要提示 - 前一个摘要 - 响应长度。当您想在具有大上下文大小的模型上获得更集中的摘要时使用此选项。
  5. 无 WI/AN - 从要摘要的文本中省略世界信息和作者注释。仅在使用经典提示生成器时有效。原始提示生成器始终省略 WI/AN。
  6. 每 X 条消息更新一次 - 设置生成摘要的间隔。0 表示自动摘要已禁用,但您仍可以通过点击"立即摘要"按钮手动触发它。这应该根据提示缓冲区完全填满聊天消息的速度进行调整。理想情况下,您希望在消息开始从提示中删除时生成第一个摘要。
  7. 每 X 个字更新一次 - 与上述相同,但使用单词(不是令牌!)而不是消息,理论上可能是一个更准确的测量,因为聊天消息的内容通常是不可预测的,但您的里程可能会有所不同。

如果两个"更新间隔"滑块都设置为非零值,则两者都将在各自的间隔触发摘要更新,具体取决于先发生什么。强烈建议在切换到具有不同上下文大小的另一个模型时相应地更新这些值,否则,摘要生成可能会触发得太频繁,或者根本不会触发。

如果您不确定间隔设置,可以点击"更新间隔"滑块上方的"魔杖"按钮,尝试根据一些简单的启发式方法猜测最佳值。算法的简要描述如下:

  1. 计算所有聊天消息的令牌和字数
  2. 根据所需的提示词确定目标摘要长度
  3. 根据平均消息长度计算可以适应提示的最大消息数
  4. 如果设置了"最大消息数",调整平均值以考虑不适合摘要限制的消息
  5. 将调整后的平均每个提示消息数向下舍入为 5 的倍数

# 示例提示

原始提示

System:
[摘要提示]

前一个摘要。

User:
消息 foo。

Char:
消息 bar。

经典提示

[主提示]

[角色卡片]

[示例对话]

User:
消息 foo。

Char:
消息 bar。

System:
[摘要提示]

# Extras API

带有 summarize 模块的 Extras 服务器可以运行辅助摘要模型(BART)。

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

要配置 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