#
Smart Context
#
此扩展不再维护,不建议使用。考虑使用 CHAT VECTORIZATION 作为可能的替代方案。
免责声明
使用此扩展并不能保证更好的聊天体验或任何形式的改进记忆。仅在您理解向量数据库使用的所有含义时才使用。
#
它是什么?
Smart Context 是一个 SillyTavern 扩展,它使用 ChromaDB 库 让您的 AI 角色能够访问正常聊天历史上下文限制之外的信息。
#
这有什么用?
如果您有很长的聊天,大部分内容都在通常的上下文窗口之外,因此在 AI 编写响应时无法使用。
Smart Context 自动获取聊天文件的整个历史记录并将其放入向量数据库中。然后每次您在聊天中输入新内容时都会搜索该数据库,如果找到匹配关键字的消息,这些聊天消息将被放入上下文中,以便 AI 在编写下一个回复时可以看到它们。
#
设置说明
- 将 SillyTavern 更新到至少 1.10.6 版本。
- 从扩展面板(堆叠块图标)中的"下载扩展和资源"菜单安装"Smart Context"扩展。
- 安装或更新 Extras 到最新版本。或者,使用 Colab notebook。
- 仅限本地安装: 为 Extras 安装 requirements-complete.txt(即使您在之前的安装中已经做过一次)。
- 启用 chromadb 模块运行 Extras:
python server.py --enable-modules=chromadb
#
安装 ChromaDB 时出错?
错误:无法为 hnswlib 构建 wheels,这是安装基于 pyproject.toml 的项目所必需的
安装 chromadb 包需要以下条件之一:
- 安装 Visual C++ 构建工具:https://visualstudio.microsoft.com/visual-cpp-build-tools/
- 从 conda 安装 hnswlib:
conda install -c conda-forge hnswlib
#
配置
启用 Smart Context 后,您应该在 SillyTavern UI 中进行配置。
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。