# (OBSOLETE) 智能上下文

# 此扩展程序不再维护,不建议使用。请寻找替代方案

# 什么是它?

Smart Context 是一个 SillyTavern 扩展,使用 ChromaDB library 来为您的 AI 角色提供访问超出正常聊天历史上下文限制的信息。

# 这有什么用?

如果你有一个非常长的聊天记录,绝大部分内容都超出了通常的上下文窗口,因此在AI撰写回复时无法获取。

Smart Context会自动将整个聊天记录的历史存入一个向量数据库。每次你在聊天中输入新内容时,这个数据库都会被搜索,如果找到包含匹配关键词的消息,这些聊天消息就会被放入上下文中,以便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 包需要以下之一:


# 配置

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

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

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

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

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

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

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

默认情况下,ChromaDB 将保留滑块指定的尽可能多的最近自然聊天历史消息。
超出此数量的消息将从您的发送提示中删除,如果数据库中存在 '记忆',它们将替代较旧的聊天历史消息(见下面的策略)。


# 记忆注入数量

Smart Context 将插入到上下文中的 '记忆' 的最大数量。
不是每次注入尝试都会达到这个最大数量。
如果您发送与 '狗' 相关的输入,而数据库中仅有一条与狗相关的消息,则仅插入 1 项。


# 单个记忆长度

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

示例:

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

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

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


# 注入策略

# 替换最旧的历史记录

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

优势

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

劣势

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

# 添加到底部

该策略保持聊天历史的自然状态,并在其后面添加“记忆”,格式化的 [bracket header] 内。这意味着“保留消息”滑块实际上被禁用。

优势

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

劣势

  • 由于没有聊天项目被移除/替换,因此更有可能超出上下文限制。
  • 因为记忆存在于提示的末尾,它们可能对 AI 的响应产生过大的影响。

# 自定义深度

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

优势

  • 灵活性以实验记忆位置
  • 可定制的记忆引入上下文

劣势

  • 由于没有聊天项目被移除/替换,因此更有可能超出上下文限制。

# 使用 % 策略

注意:此策略与“添加到底部”策略不兼容,该策略根本不移除任何消息。

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

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

优势

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

劣势

  • 计算移除多少历史记录可能会略有不准确,因为它们基于每条消息的估算令牌
  • 它将要移除的消息数量四舍五入到最接近的 5 的倍数(0, 5, 10, 15, 20 等),因此不如手动数字选择细致。

# 记忆回忆策略

# 仅从此聊天中回忆

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

# 从所有角色聊天中回忆

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

# Example code block
def example_function():
    print("This is an example.")

# 使用智能上下文

一旦启用并配置好,智能上下文会自动发生。

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

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

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

# 清除数据库

您可以使用“清除数据库”按钮来清空当前聊天的数据库。

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


# 常见问题解答

# 当我完成聊天后,数据库会发生什么?我可以保存它们吗?

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

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

通常情况下,无需保存Smart Context数据库。

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

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

这不是Smart Context功能的好用法。我们建议使用World Info来实现这个目的。