# Smart Context

# 此扩展不再维护,不建议使用。考虑使用 CHAT VECTORIZATION 作为可能的替代方案。

# 它是什么?

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

# 这有什么用?

如果您有很长的聊天,大部分内容都在通常的上下文窗口之外,因此在 AI 编写响应时无法使用。

Smart Context 自动获取聊天文件的整个历史记录并将其放入向量数据库中。然后每次您在聊天中输入新内容时都会搜索该数据库,如果找到匹配关键字的消息,这些聊天消息将被放入上下文中,以便 AI 在编写下一个回复时可以看到它们。


# 设置说明

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

# 安装 ChromaDB 时出错?

错误:无法为 hnswlib 构建 wheels,这是安装基于 pyproject.toml 的项目所必需的

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


# 配置

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

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

需要注意的 4 个主要概念:

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

# SmartContext 仅在聊天历史中有 10 条消息后才开始

  • 在新聊天开始时,ChromaDB 处于非活动状态。
  • 一旦聊天积累了 10 条消息,它将开始将所有消息记录到数据库中,并根据需要调用消息。

# 聊天历史保留('保留的消息')

默认情况下,ChromaDB 将保留滑块中指定数量的最近自然聊天历史消息。 超过此数量的任何消息将从您发送的提示中删除,如果数据库中存在'记忆',它们将被添加以替换较旧的聊天历史消息(请参见下面的策略)。


# 记忆注入量

Smart Context 将插入到上下文中的'记忆'的最大数量。 并非每次注入尝试都会获得这个完整数量。 如果您发送与'狗'相关的输入,并且数据库中只有一条其他消息与狗相关,那么只会插入 1 个项目。


# 单个记忆长度

这是每个注入的'记忆'允许的最大长度。 这是以字符为单位(不是令牌)。 如果设置得太小,记忆可能会被中途切断。

示例:

Ross: 我喜欢长毛和蓬松尾巴的狗。我不喜欢短毛和短尾巴的狗。

这个数据库'记忆'长 103 个字符,因此您需要将滑块设置为至少 103 才能将其完全拉入上下文中。

如果滑块小于 103,消息将被切断并像那样注入。


# 注入策略

# 替换最旧的历史

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

优点

  • 不太可能超出您的上下文限制
  • 存在于上下文顶部的记忆将对响应产生较少的直接影响,同时仍提供'背景信息'。

缺点

  • 旧消息直接插入聊天历史,没有特殊标记,通常与保留的自然聊天历史消息没有直接的自然相关性。这可能会混淆不太智能的 AI 模型。

# 添加到底部

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

优点

  • 不会缩短或更改当前的自然聊天历史
  • '记忆'存在于聊天之后,对下一个 AI 响应有更强的影响

缺点

  • 因为没有聊天项目被删除/替换,您更有可能超出上下文限制。
  • 因为记忆非常接近提示的末尾,它们可能对 AI 的响应产生太大的影响。

# 自定义深度

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

优点

  • 灵活性以尝试记忆放置
  • 可自定义上下文中的记忆介绍

缺点

  • 因为没有聊天项目被删除/替换,您更有可能超出上下文限制。

# 使用 % 策略

注意:这与'添加到底部'策略不兼容,后者根本不删除任何消息。

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

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

优点

  • 比手动计算消息数量更容易
  • 随可用的上下文大小调整,对小型和大型提示空间应用相同的百分比

缺点

  • 关于要删除多少历史的计算可能稍微不准确,因为它们基于每条消息的估计令牌数
  • 它将删除的消息数量四舍五入到最接近的可被 5 整除的数字(0、5、10、15、20 等),因此不如手动数字选择精细。

# 记忆调用策略

# 仅从此聊天中调用

这是 smart-context 的默认行为,仅从此特定聊天的 ChromaDB 集合中提取'记忆'。

# 从所有角色聊天中调用

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

# 使用 Smart Context

一旦启用和配置,Smart Context 就会自动发生。

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

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

这些文本文件不必是聊天。它们可以是任何东西(维基百科条目、同人小说等)。

# 清除数据库

您可以使用'清除 DB'按钮来清除当前聊天的数据库。

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


# 常见问题

# 当我完成聊天后数据库会怎样?我可以保存它们吗?

对于本地安装的 Extras 服务器,Smart Context 会保存数据库。在通常的用例中不需要手动保存它们。

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

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

目前我们有导入/导出功能,允许您保存聊天的 DB 并在以后再次使用它。

# 我可以为所有聊天创建一个大数据库供参考吗?

这不是 Smart Context 功能的良好用途。 我们建议为此目的使用 World Info。