# Chat Vectorization (聊天向量化)

聊天向量化会搜索当前聊天历史中与您最近消息相关的消息。 它会暂时将最相关的消息移动到聊天历史的开头或结尾。 这种移动发生在模型生成对您最后一条消息的回复时。

聊天历史开头和结尾的消息往往对模型的回复影响最大。 因此,将相关消息移动到这些位置可以帮助模型在回复中关注相关信息。

特别是,聊天向量化可以找到在消息历史中太靠后而无法放入请求上下文的相关消息。 将这些消息移入上下文为模型提供了原本无法获得的信息。

聊天向量化是一种检索增强生成(RAG)。检索增强生成通过在提示中提供额外的相关信息, 提高模型生成响应的质量。

  • 检索:使用最近的消息来检索相关的过去消息
  • 增强:通过以有用的方式插入过去的消息来增强模型的上下文
  • 生成:指导模型在生成响应时使用过去的消息

# 设置

要启用聊天向量化,选择 "Extensions" > "Vector Storage" > "Enabled for chat messages"。

配置向量化源和向量化模型。聊天向量化使用与 Data Bank 相同的向量源, 因此您可能已经设置好了。向量化源和向量化模型的设置在 Data Bank 中有文档说明。

聊天向量化使用与 Data Bank 相同的向量存储,但这不需要设置或配置。 Data Bank 中也有关于向量存储的信息。

聊天向量化不使用 Data Bank 来存储聊天消息。消息存储在聊天中。

# 准备聊天消息以供搜索(向量存储)

为了使聊天消息可以被搜索,系统会为每条消息计算一个向量并存储。

向量化在后台进行,每当您发送或接收消息时都会发生。

每条消息都单独存储,这样在生成过程中可以单独找到和移动它们。

大型消息会被分割成"块",这样模型就可以获得长消息中最相关的部分。块大小为 400 个字符。 您可以通过"Chunk size (chars)"更改这个值。

消息通过寻找块边界(如段落分隔符、换行符或单词之间的空格)来分割。这是为了 使所有块尽可能有意义。如果您的聊天消息有其他标记自然分割点的方式,比如 ----, 您可以将其添加到"Chunk boundary"中。"Chunk boundary"的设置与 Data Bank 共享。

# 向量存储控制

要计算当前聊天中所有消息的向量,而不是等待它们在后台处理,从设置中选择"Vectorize All"。

要查看当前聊天中有多少消息已被向量化,选择"View Stats"。这会显示存储的向量总数。 它还会通过绿色圆点标记来指示已被向量化的特定聊天消息。

要删除当前聊天中所有消息的向量,选择"Purge Vectors"。

# 查找相关消息以移动(向量检索)

要在聊天历史中找到最相关的消息,最近的消息会被转换(向量化)成查询向量。默认情况下,使用最近的 2 条消息。要更改这一点,更改"Query messages"的值。这个值在查找 Data Bank 中的相关内容时也会使用。

过去的消息必须至少有 25% 的相关性分数才会被包含。您可以通过"Score threshold"更改这一点。分数阈值的设置与 Data Bank 共享。

聊天历史中最相关的 3 条消息会被移动。您可以通过"Insert#"更改这一点。

为了避免打扰聊天中最近的事件,最近的 5 条消息不会被移动。要更改这一点,更改"Retain#"的值。

# 移动消息(增强生成)

消息会被移动到以下 3 个位置之一:

  • 聊天顶部,在主提示/故事字符串之后(默认)
  • 聊天顶部,并且在主提示/故事字符串之前
  • 聊天结尾,在最后 2 条消息之前("In-chat @ Depth 2")。由于您刚刚发送了一条消息,这个位置通常就在模型的上一个回复之前。

您可以通过"Injection Position"和"Depth"更改这一点。

消息按相关性顺序包含,相关性较高的消息显示在相关性较低的消息之后。

包含了发送每条消息的人或角色的名字。

这些消息作为"过去的事件"展示给模型。这有助于模型理解这些消息包含的信息来自聊天历史中不同于插入点的位置。您可以通过"Injection Template"更改这一点。

您可以使用 Prompt Itemization 弹出窗口、终端日志或浏览器控制台日志查看最终的模型提示。浏览器控制台日志对于理解聊天向量化中所有步骤的作用很有帮助。

# 向量摘要

向量摘要旨在使聊天消息的向量搜索更有效。它通过在向量化之前引入摘要步骤来实现这一点。摘要步骤提取消息中最重要的部分,使得生成的向量能更好地指示消息的相关内容。

向量摘要可能会使向量搜索变得不那么有效。

要对聊天历史中的消息进行摘要,并为每个摘要消息生成向量,选择"Summarize chat messages for vector generation"。

摘要消息不会替换聊天中的原始消息。如果向量搜索匹配了摘要消息的向量,原始消息会从聊天历史中检索并移动到上下文中。消息的摘要版本保留在向量存储中,这可能对调试有帮助。

要对用于搜索聊天历史的消息内容(默认为最后 2 条消息)进行摘要,选择"Summarize chat messages when sending"。

每次为向量化摘要消息时,都会向摘要模型发出单独的请求。您可以通过"Summarize with"选择使用哪个摘要源。选择"Main API"将使用与生成聊天或文本补全相同的模型和连接设置来生成摘要。

请求包括原始消息内容和关于模型应如何生成摘要的指令。您可以通过"Summary Prompt"更改指令。