#智能上下文

#此扩展已不再维护,不建议使用。请考虑使用 聊天向量化 作为可能的替代方案。

#这是什么?

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

#这有什么用?

如果您有一个很长的聊天记录,大部分内容都在通常的上下文窗口之外,因此在 AI 写回复时无法访问这些内容。

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


#设置说明

  1. 将 SillyTavern 更新到至少 1.10.6 版本。
  2. 从扩展面板(堆叠块图标)中的"下载扩展和资源"菜单安装"智能上下文"扩展。
  3. 安装或更新 Extras 到最新版本。或者,使用 Colab notebook
  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 包需要以下条件之一:


#配置

一旦启用了智能上下文,您应该在 SillyTavern UI 中对其进行配置。 可以从扩展菜单中进行智能上下文配置 STExtensionMenuIcon

智能上下文配置面板
智能上下文配置面板

需要了解 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 文件,下次要使用时再导入。

通常不需要保存智能上下文数据库。

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

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

这不是智能上下文功能的好用法。 我们建议为此目的使用世界信息。