资料库
检索增强生成(RAG)是一种为法学硕士提供外部知识来源的技术。它通过访问模型训练数据之外的信息来帮助提高人工智能答案的准确性。
SillyTavern 提供了一组工具,用于从多种来源构建多用途知识库,以及使用 LLM 提示词中收集的数据。
访问资料库
内置的聊天附件扩展(默认情况下包含在发行版本 >= 1.12.0 中)在“魔棒”菜单中添加了一个新选项 - 资料库。这是您管理 SillyTavern 中 RAG 可用文档的中心。
关于文件
资料库存储文件附件,也称为文档。这些文档分为三个可用范围。
- 全局附件 - 在每个聊天中都可用,无论是单独还是群组。
- 角色附件 - 仅适用于当前选择的角色,包括当他们在群组中回复时。 附件保存在本地,不会通过角色卡导出!
- 聊天附件 - 仅在当前打开的聊天中可用。聊天中的每个角色都可以从中拉取。
注意事项
虽然不是数据库的正式组成部分,但您甚至可以将文件附加到单条消息中。使用“Wand”菜单中的“附加文件”选项,或消息操作行中的回形针图标。
什么可以是文档?实际上任何可以纯文本形式表示的东西!
示例包括但不限于:
- 本地文件(书籍、科学论文等)
- 网页(维基百科、文章、新闻)
- 视频文字记录
各种扩展和插件还可以提供收集和处理数据的新方法,更多信息如下。
数据来源
要将文档添加到任何范围,请单击“添加”并选择可用来源之一。
记事本
从头开始创建文本文件,或编辑现有附件。
文件
从计算机的硬盘上传文件。 SillyTavern 提供流行文件格式的内置转换器:
- PDF(仅限文本)
- 超文本标记语言
- 降价
- 电子书
- TXT
您还可以附加任何带有非标准扩展名的文本文件,例如 JSON、YAML、源代码等。如果所选文件的类型没有已知的转换,并且该文件无法解析为纯文本文档,则文件上传将被拒绝,这意味着不允许使用原始二进制文件。
注意事项
导入 Microsoft Office(DOCX、PPTX、XLSX)和 LibreOffice 文档(ODT、ODP、ODS)需要 服务器插件 进行安装和加载。有关安装说明,请参阅插件的自述文件页面。
网络
通过 URL 从网页中抓取文本。然后通过以下方式处理 HTML 文档 可读性 库仅提取可用的文本。
某些 Web 服务器可能会拒绝获取请求、受到 Cloudflare 保护或严重依赖 JavaScript 来运行。如果您在任何特定网站上遇到问题,请通过网络浏览器手动下载该页面并使用文件上传器附加它。
YouTube
通过 ID 或 URL 下载 YouTube 视频的文字记录,可以由创作者上传,也可以由 Google 自动生成。有些视频可能会禁用文字记录,而且由于需要登录,因此无法解析有年龄限制的视频。
脚本以视频的默认语言加载。或者,您可以指定两个字母的语言代码来尝试获取特定语言的文字记录。此功能并不总是可用,并且可能会失败,因此请谨慎使用。
网页搜索
注意事项
该源需要有一个 网页搜索 扩展已安装并正确配置。请参阅链接页面了解更多详细信息。
执行网络搜索并从搜索结果页面下载文本。这与 Web 源类似,但完全自动化。所选的搜索引擎将从扩展设置继承,因此请提前设置。
首先,指定搜索查询、要访问的最大链接数以及输出类型:一个组合文件(根据扩展规则格式化)或每个页面的单个文件。您也可以选择保存页面片段。
粉丝圈
注意事项
该源需要有一个 服务器插件 安装并加载。有关安装说明,请参阅插件的自述文件页面。
从a中抓取文章 粉丝圈 wiki 通过其 ID 或 URL。由于一些 wiki 非常大,使用过滤器正则表达式限制范围可能会有好处,它将根据文章的标题进行测试。如果未提供过滤器,则所有页面都将被导出。您可以将它们保存为每个页面的单独文件,也可以合并到一个文档中。
Bronie 解析器扩展(第三方)
注意事项
该来源来自第三方,并且是 不隶属 与 SillyTavern 团队。这个来源需要你有布洛妮娅·兰德的 Bronie 解析器扩展 安装以及需要解析器工作的服务器插件。
Bronya Rand 的 Bronie Parser Extension 允许使用第三方抓取工具,例如 miHoYo/HoYoverse 的 好友实验室 转换为 SillyTavern,与其他数据源类似。
目前,Bronya Rand 的 Bronie Parser Extension 支持以下内容:
- 米哈游 / HoYoverse 的 HoYoLab(用于《原神》和《崩坏:星穹铁道》),通过 HoYoWiki-Scraper-TS
首先,按照以下步骤安装 Bronya Rand 的 Bronie Parser Extension: 安装指南 并将支持的服务器插件安装到 SillyTavern 中。重启SillyTavern,进入 资料库 菜单。点击 + Add 您应该会看到最近安装的抓取工具已添加到可以从中获取信息的来源列表中。
矢量存储
因此,您已经为自己建立了一个关于您的特定主题的良好且全面的信息库。接下来怎么办?
要使用 RAG 文档,您需要使用兼容的扩展,将相关数据插入到 LLM 提示词中。
与 SillyTavern 捆绑在一起的矢量存储是此类扩展的参考实现。它使用嵌入(也称为向量)来搜索与您正在进行的聊天相关的文档。
有趣的事实
- 嵌入是抽象表示一段文本的数字数组,由专门的语言模型生成。越相似的文本其各自向量之间的距离越短。
- 矢量存储扩展使用 威达 库来跟踪文件嵌入。它们存储在 JSON 文件中
/vectors您的用户数据目录的文件夹。每个文档在内部都由其自己的索引/集合文件表示。
由于矢量功能默认处于禁用状态,因此您需要打开扩展面板(顶部栏上的“堆叠立方体”图标),然后导航到“矢量存储”部分,并勾选“文件矢量化设置”下的“为文件启用”复选框。
向量存储本身不会产生任何向量,您需要使用兼容的嵌入提供程序。
载体提供者
警告
仅当使用生成嵌入的同一模型检索嵌入时,嵌入才可用。当改变嵌入模型或源时,需要重新计算向量。
本地
这些来源是免费且无限制的,并使用您的 CPU/GPU 来计算嵌入。
- 本地(Transformers)- 在节点服务器上运行。 SillyTavern 会自动从 HuggingFace 下载 ONNX 格式的兼容模型。默认型号: jina-embeddings-v2-base-en.
- WebLLM - 需要安装扩展程序和网络浏览器 支持WebGPU。直接在浏览器中运行,可以使用硬件加速。自动从 HuggingFace 下载支持的模型。从这里安装扩展: https://github.com/SillyTavern/Extension-WebLLM.
- 奥拉马 - 获取它 https://ollama.com/。在API连接菜单中设置API URL(在文本补全下,默认:
http://localhost:11434)。必须先下载兼容的模型,然后在扩展设置中设置其名称。型号示例: mxbai-嵌入-大。 (可选)选中一个选项以将模型加载到内存中。 - llama.cpp 服务器 - 获取它 ggerganov/llama.cpp 并运行服务器可执行文件
--embedding标志。从 HuggingFace 加载兼容的 GGUF 嵌入模型,例如, nomic-ai/nomic-embed-text-v1.5-GGUF. - vLLM - 获取它 vllm-项目/vllm。首先在API连接菜单中设置API URL和API密钥。
- Extras(已弃用)- 在 附加 API 使用 SentenceTransformers 加载器。默认型号: 全 mpnet 基础 v2。此源未得到维护,将来最终将被删除。
API来源
所有这些来源都需要相应服务的 API 密钥,并且通常会产生使用成本,但通常计算嵌入非常便宜。
- 开放人工智能
- 连贯
- 谷歌人工智能工作室
- 谷歌顶点人工智能
- 一起人工智能
- 米斯特拉尔人工智能
- 诺米克人工智能
- 开放路由器
- 电子集线器
- 滑道
- 纳米GPT
- 硅流
- Cloudflare Workers AI
矢量化设置
选择嵌入提供程序后,不要忘记配置其他设置来定义处理和检索文档的规则。
注意事项
从附件中分割、矢量化和检索信息需要一些时间。虽然文件的初始摄取可能需要一段时间,但 RAG 搜索查询通常足够快,不会造成明显的延迟。
留言附件
这些设置控制直接附加到邮件的文件。
以下规则适用:
- 只有适合 LLM 上下文窗口的邮件才能检索其附件。
- 当矢量存储扩展被禁用时,文件附件及其附带消息将完全插入提示词中。
- 启用文件矢量化后,文件将被分割成块,并且仅插入最相关的部分,从而节省上下文空间并允许模型保持专注。
- 大小阈值 (KB) - 设置分块分割阈值。只有大于指定大小的文件才会被分割。
- 块大小(字符)- 设置单个块的目标大小(在文本角色中,而不是模型 token!)。
- 块重叠 (%) - 设置相邻块之间共享的块大小的百分比。这允许块之间更平滑的过渡,但也可能引入一些冗余。
- 检索块 - 设置要检索的最相关文件块的最大数量。它们将按原始顺序插入。
资料库文件
这些设置控制资料库文档的处理方式。
以下规则适用:
- 禁用文件矢量化时,不使用资料库。
- 否则,当前范围(见上文)中的所有可用文档都将被考虑用于查询。仅检索所有文件中最相关的块。同一文件的多个块按其原始顺序插入。
- 插入的块将在适合聊天消息之前保留一部分上下文。
- 大小阈值 (KB) - 设置分块分割阈值。只有大于指定大小的文件才会被分割。
- 块大小(字符)- 设置单个块的目标大小(在文本角色中,而不是模型 token!)。
- 块重叠 (%) - 设置相邻块之间共享的块大小的百分比。这允许块之间更平滑的过渡,但也可能引入一些冗余。
- 检索块 - 设置要检索的文件块的最大数量。该限额在所有文件之间共享。
- 注入模板 - 定义如何将检索到的信息插入到提示词中。您可以使用特殊的 {{text}} 宏以及任何其他宏来指定检索到的文本的位置。
- 注射位置 - 设置插入提示词注射的位置。适用与作者注释和世界书相同的规则。
共享设置
- 查询消息 - 有多少最新的聊天消息将用于查询文档块。
- 分数阈值 - 调整以允许根据相关性分数剔除块的检索(0 - 根本不匹配,1 - 完美匹配)。较高的值允许更准确的检索并防止完全随机的信息进入上下文。 Sane 值的范围在 0.2(更宽松)和 0.5(更集中)之间。
- 块边界 - 将文件拆分为块时将优先考虑的自定义字符串。如果未指定,则默认按(按顺序)双换行符、单换行符和单词之间的空格进行分割。
- 仅在自定义边界上分块 - 如果启用,分块将仅发生在指定的块边界上。否则,分块也会发生在默认边界上。
- 在处理之前将文件翻译成英语 - 如果启用,将使用在 聊天翻译 扩展名在处理文件之前将文件翻译成英语。当使用仅支持英文文本的嵌入模型时,这非常有用。
- 包含在世界书扫描中 - 检查是否希望注入的内容激活传说书籍条目。
- Vectorize All - 强制摄取所有未处理文件的嵌入。
- 清除向量 - 清除文件嵌入,允许重新计算它们的向量。
注意事项
对于“聊天矢量化”设置,请参阅 聊天矢量化.
结论
恭喜! RAG 的强大功能现在增强了您的聊天体验。它的功能仅受您的想象力的限制。一如既往,不要害怕尝试!