#智能上下文
免责声明
使用此扩展不能保证更好的聊天体验或任何形式的记忆改进。仅在您完全理解向量数据库使用的所有影响时才使用。
#这是什么?
智能上下文是一个 SillyTavern 扩展,它使用 ChromaDB 库 让您的 AI 角色能够访问正常聊天历史上下文限制之外的信息。
#这有什么用?
如果您有一个很长的聊天记录,大部分内容都在通常的上下文窗口之外,因此在 AI 写回复时无法访问这些内容。
智能上下文会自动将整个聊天文件的历史记录放入向量数据库中。每当您在聊天中输入新内容时,系统就会搜索这个数据库,如果找到包含匹配关键词的消息,这些聊天消息就会被放入上下文中,这样 AI 在写下一个回复时就能看到它们。
#设置说明
- 将 SillyTavern 更新到至少 1.10.6 版本。
- 从扩展面板(堆叠块图标)中的"下载扩展和资源"菜单安装"智能上下文"扩展。
- 安装或更新 Extras 到最新版本。或者,使用 Colab notebook。
- 仅限本地安装: 为 Extras 安装 requirements-complete.txt(即使您在之前的安装中已经安装过)。
- 启用 chromadb 模块运行 Extras:
python server.py --enable-modules=chromadb
#安装 ChromaDB 时遇到错误?
安装 chromadb 包需要以下条件之一:
- 安装 Visual C++ build tools:https://visualstudio.microsoft.com/visual-cpp-build-tools/
- 从 conda 安装 hnswlib:
conda install -c conda-forge hnswlib
#配置
一旦启用了智能上下文,您应该在 SillyTavern UI 中对其进行配置。 可以从扩展菜单中进行智能上下文配置

需要了解 4 个主要概念:
- 聊天历史保留
- 记忆注入数量
- 单条记忆长度
- 注入策略
#智能上下文仅在聊天历史达到 10 条消息后开始工作
- 在新聊天开始时,ChromaDB 处于非活动状态。
- 一旦聊天累积了 10 条消息,它就会开始将所有消息记录到数据库中,并根据需要回忆消息。
#聊天历史保留('保留的消息')
默认情况下,ChromaDB 将保留滑块中指定数量的最近自然聊天历史消息。 超出此数量的任何消息都将从您发送的提示中删除,如果数据库中存在"记忆",它们将替代较旧的聊天历史消息(参见下面的策略)。
#记忆注入数量
智能上下文将插入上下文的"记忆"的最大数量。 并非每次注入尝试都会达到这个完整数量。 如果您发送一个与"狗"相关的输入,而数据库中只有一条其他与狗相关的消息,那么只会插入 1 条项目。
#单条记忆长度
这是每条注入的"记忆"允许的最大长度。 这是以字符为单位(不是标记)。 如果设置得太小,记忆可能会被中途截断。
示例:
Ross:我喜欢长毛蓬松尾巴的狗。我不喜欢短毛短尾巴的狗。
这条数据库"记忆"有 103 个字符长,所以您需要将滑块设置为至少 103
才能完整地将其拉入上下文中。
如果滑块小于 103,消息就会被截断并以那种形式注入。
#注入策略
#替换最旧历史
这个策略保留 X 条最近的消息,删除之前的所有消息,并用"记忆"替换它们。
优点
- 不太可能超出您的上下文限制
- 存在于上下文顶部附近的记忆对响应的直接影响较小,同时仍然提供"背景信息"。
缺点
- 旧消息直接插入到聊天历史中,没有特殊标记,通常与保留的自然聊天历史消息没有直接的自然关联。这可能会让智能较低的 AI 模型感到困惑。
#添加到底部
这个策略保持聊天历史的自然状态,并在其之后的格式化[方括号标题]内添加"记忆"。 这意味着"保留的消息"滑块实际上被禁用。
优点
- 不缩短或改变当前的自然聊天历史
- "记忆"存在于聊天之后,对下一个 AI 响应有更强的影响
缺点
- 因为没有删除/替换任何聊天项目,所以更有可能超出您的上下文限制。
- 因为记忆存在于提示的末尾附近,它们可能对 AI 的响应产生太大的影响。
#自定义深度
这个策略保持聊天历史的自然状态,并在您在指定模板中确定的深度添加"记忆"。 这意味着"保留的消息"滑块实际上被禁用。 自定义注入消息应包含 `` 模板词,所有查询到的记忆都将放在这里。
优点
- 灵活地实验记忆放置
- 可以自定义上下文中的记忆介绍
缺点
- 因为没有删除/替换任何聊天项目,所以更有可能超出您的上下文限制。
#使用百分比策略
注意:这与"添加到底部"策略不兼容,因为后者根本不删除任何消息。
在使用"替换最旧历史"策略时,勾选此框将启用滑块,用于选择要用智能上下文记忆替换的上下文内聊天历史的百分比。它还会禁用用于手动选择消息数量的两个滑块。
这个策略自动计算要用智能上下文记忆替换的聊天历史的百分比,而不是固定的消息数量。
优点
- 比手动计算消息数量更容易
- 随可用上下文大小调整,对小型和大型提示空间应用相同的百分比
缺点
- 要删除的历史记录计算可能略有不准确,因为它们基于每条消息的估计标记
- 它将要删除的消息数量四舍五入到最接近的 5 的倍数(0、5、10、15、20 等),所以不如手动数字选择那么精细。
#记忆回忆策略
#仅从此聊天回忆
这是智能上下文的默认行为,仅从此特定聊天的 ChromaDB 集合中提取"记忆"。
#从所有角色聊天中回忆
这是智能上下文的实验性行为,从所选角色的所有 ChromaDB 集合中提取"记忆"。 理论上,这应该允许跨越多次互动发展出更健壮的记忆集。 建议与"添加到底部"或"自定义深度"策略一起使用,并将"保留的消息"设置为较低的数字,这样 ChromaDB 会更快地从记忆中提取。
#使用智能上下文
一旦启用并配置,智能上下文会自动运行。
ChromaDB 为 SillyTavern 中打开的每个聊天创建一个新数据库。 这个数据库会自动填充整个聊天历史。
您也可以手动将文本文件插入数据库。
这些文本文件不必是聊天记录。它们可以是任何内容(维基百科条目、同人小说等)。
#清除数据库
您可以使用"清除数据库"按钮来清除当前聊天的数据库。
如果您发现存储了不准确的记忆(比如您已经删除或编辑的聊天消息),这会很有帮助。
#常见问题
#聊天结束后数据库会怎样?我可以保存它们吗?
对于本地安装的 Extras 服务器,智能上下文会保存数据库。在通常的使用情况下无需手动保存。
对于 colab 用户,当 extras 服务器关闭时,数据库会被清除。使用导出按钮将数据库保存为 JSON 文件,下次要使用时再导入。
通常不需要保存智能上下文数据库。
目前我们有导入/导出功能,允许您保存聊天的数据库并在以后再次使用。
#我可以为所有聊天创建一个大数据库供参考吗?
这不是智能上下文功能的好用法。 我们建议为此目的使用世界信息。