Smart Context

此扩展已不再维护,不推荐使用。请考虑将 Chat Vectorization 作为可能的替代方案。

它是什么?

Smart Context 是一个 SillyTavern 扩展,它使用 ChromaDB 库让您的 AI 角色可以访问正常聊天历史上下文限制之外的信息。

它有什么用?

如果您的对话非常长,大部分内容都会超出常规的上下文窗口,因此在 AI 撰写回复时无法获取这些内容。

Smart Context 会自动将聊天文件的整个历史记录放入向量数据库中。每次您在聊天中输入新内容时,都会搜索此数据库,如果找到包含匹配关键词的消息,这些聊天消息就会被放入上下文中,以便 AI 在撰写下一条回复时能够看到它们。


安装说明

  1. 将 SillyTavern 更新至至少 1.10.6 版本。
  2. 在扩展面板(堆叠积木图标)中的“下载扩展与素材”菜单里安装“Smart Context”扩展。
  3. Extras 安装或更新到最新版本。或者,使用 Colab 笔记本
  4. 仅限本地安装: 为 Extras 安装 requirements-complete.txt(即使您之前在先前的安装中已经做过一次)。
  5. 启用 chromadb 模块运行 Extras:python server.py --enable-modules=chromadb

安装 ChromaDB 时遇到错误?

ERROR: Could not build wheels for hnswlib, which is required to install pyproject.toml-based projects

安装 chromadb 包需要满足以下条件之一:


配置

启用 Smart Context 后,您应该在 SillyTavern UI 中对其进行配置。 可以在扩展菜单中完成 Smart Context 的配置 STExtensionMenuIcon

Smart Context 配置面板
Smart Context 配置面板

需要注意 4 个主要概念:

  • 聊天历史保留
  • 记忆注入数量
  • 单条记忆长度
  • 注入策略

SmartContext 仅在聊天历史中达到 10 条消息后才会启动

  • 在新对话开始时,ChromaDB 处于未激活状态。
  • 一旦对话累积达到 10 条消息,它就会开始将所有消息记录到数据库中,并根据需要召回消息。

聊天历史保留(“保留消息”)

默认情况下,ChromaDB 会保留滑块中指定数量的最近自然聊天历史消息。 超出此数量的所有消息都将从您发送的提示词中移除,如果数据库中存在“记忆”,它们将被添加到原旧聊天历史消息的位置(参见下方的策略)。


记忆注入数量

Smart Context 将插入上下文的“记忆”的最大数量。 并非每次注入尝试都能获得这个完整数量。 如果您发送的内容与“狗”相关,而数据库中只有另一条与狗相关的消息,那么只会插入 1 条。


单条记忆长度

这是每条注入“记忆”所允许的最大长度。 单位是字符(不是 token)。 如果设置得太小,记忆可能会在中途被截断。

示例:

Ross: I like dogs with long fur and fluffy tails. I dislike dogs with short fur and short tails.

这条数据库“记忆”长度为 103 个字符,因此您需要将滑块设置为至少 103 才能将其完整地拉取到上下文中。

如果滑块小于 103,该消息将被截断并以此形式注入。


注入策略

替换最旧的历史记录

此策略保留 X 条最近的消息,移除之前的所有消息,并用“记忆”替换它们。

优点

  • 不太可能超出您的上下文限制
  • 存在于上下文顶部附近的记忆对回复的直接影响较小,同时仍能提供“背景信息”。

缺点

  • 旧消息会直接插入到聊天历史中,没有任何特殊标记,通常与保留的自然聊天历史消息没有直接的自然关联。这可能会让不太智能的 AI 模型感到困惑。

添加到底部

此策略将聊天历史保持在其自然状态,并在其之后的格式化 [括号标题] 内添加“记忆”。 这意味着“保留消息”滑块实际上被禁用了。

优点

  • 不会缩短或更改当前的自然聊天历史
  • “记忆”存在于聊天之后,对下一次 AI 回复的影响更强

缺点

  • 由于没有移除/替换任何聊天条目,您超出上下文限制的可能性更高。
  • 由于记忆存在于非常接近提示词末尾的位置,它们对 AI 回复的影响可能过大。

自定义深度

此策略将聊天历史保持在其自然状态,并在您指定的模板中按您确定的深度添加“记忆”。 这意味着“保留消息”滑块实际上被禁用了。 自定义注入消息应包含 `` 模板词,所有查询到的记忆都将放置在此处。

优点

  • 灵活地试验记忆放置位置
  • 可在上下文中自定义记忆的引入方式

缺点

  • 由于没有移除/替换任何聊天条目,您超出上下文限制的可能性更高。

使用百分比策略

注意:这与不移除任何消息的“添加到底部”策略不兼容。

在使用“替换最旧的历史记录”策略时,勾选此复选框将启用一个滑块,用于选择用 SmartContext 记忆替换的上下文内聊天历史的百分比。它还将禁用两个用于手动选择消息数量的滑块。

此策略会自动计算要替换为 SmartContext 记忆的聊天历史百分比,而不是固定的消息数量。

优点

  • 比您自己手动计算消息数量更简单
  • 可根据可用的上下文大小进行调整,对较小和较大的提示词空间应用相同的百分比

缺点

  • 关于要移除多少历史记录的计算可能略有偏差,因为它们基于每条消息的预估 token 数
  • 它将要移除的消息数量四舍五入到最接近的可被 5 整除的数字(0、5、10、15、20 等),因此不如手动数字选择精细。

记忆召回策略

仅从当前对话召回

这是 smart-context 的默认行为,仅从当前特定对话的 ChromaDB 集合中提取“记忆”。

从所有角色对话召回

这是 smart-context 的一种实验性行为,它会从所选角色的所有 ChromaDB 集合中提取“记忆”。 理论上,这应该允许开发跨越多次交互的更稳健的记忆集合。 建议与“添加到底部”或“自定义深度”策略一起使用,并将“保留消息”设置为较小的数字,以便 ChromaDB 更早地从记忆中提取。

使用 Smart Context

启用并配置后,Smart Context 会自动运行。

ChromaDB 会为在 SillyTavern 中打开的每个对话创建一个新数据库。 该数据库会自动填充整个聊天历史。

您也可以手动将文本文件插入数据库。

这些文本文件不必是对话。它们可以是任何内容(维基百科条目、同人小说等)。

清除数据库

您可以使用“清除数据库”按钮清除当前对话的数据库。

如果您发现存储了不准确的记忆(例如您后来删除或编辑的聊天消息),这会很有帮助。


常见问题

当我结束聊天后,数据库会怎样?我可以保存它们吗?

对于本地安装的 Extras 服务器,Smart Context 会保存数据库。在通常的使用场景下,无需手动保存。

对于 colab 用户,当 extras 服务器关闭时,数据库会被清除。请使用导出按钮将数据库保存为 JSON 文件,并在下次需要使用时导入。

通常不需要保存 Smart Context 数据库。

目前我们提供了导入/导出功能,允许您保存对话的数据库并在日后再次使用。

我可以为所有对话创建一个大型数据库来引用吗?

这不是对 Smart Context 功能的良好运用。 我们建议为此目的使用世界书。