Chat Vectorization(聊天向量化)

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

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

特别是,聊天向量化可以找到那些在消息历史中过于靠前、无法纳入请求上下文的相关消息。将这些消息移入上下文,可以为模型提供它本来无法获取的信息。

聊天向量化是一种检索增强生成(RAG)技术。检索增强生成通过在提示词中提供额外的相关信息来提升模型生成回复的质量。

  • 检索(Retrieval):使用最近的消息来检索相关的历史消息
  • 增强(Augmented):通过以有效的方式插入历史消息来增强模型的上下文
  • 生成(Generation):指示模型在生成回复时使用历史消息

设置

要启用聊天向量化,请选择"扩展" > "向量存储" > "为聊天消息启用"。

配置向量化来源和向量化模型。聊天向量化使用与数据库相同的向量来源,所以你可能已经完成了设置。向量化来源和向量化模型的设置记录在数据库中。

聊天向量化使用与数据库相同的向量存储,但无需额外设置或配置。数据库中也有关于向量存储的信息,请参阅数据库

聊天向量化不使用数据库存储聊天消息,消息存储在聊天记录中。

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

为使聊天消息可被搜索,需要为每条消息计算并存储一个向量。

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

每条消息单独存储,以便在生成过程中单独查找和移动。

较长的消息会被分割成"块",以便模型获取长消息中最相关的部分。块大小为 400 个字符。 你可以通过"块大小(字符数)"来更改此设置。

消息会通过查找段落分隔、换行符或单词间空格等块边界来分割,以使所有块尽可能有意义。如果你的聊天消息有其他自然分割点标记(例如 ----),你可以将其添加到"块边界"中。"块边界"设置与数据库共享。

向量存储控制

若要立即为当前聊天中的所有消息计算向量(无需等待后台处理),请在设置中选择"全部向量化"。

若要查看当前聊天中有多少消息已被向量化,请选择"查看统计"。这会显示存储的向量总数,并通过绿色圆点标记已向量化的具体聊天消息。

若要删除当前聊天消息的所有向量,请选择"清除向量"。

查找相关消息进行移动(向量检索)

为找到聊天历史中最相关的消息,会将最近的消息转换(向量化)为查询向量。默认使用最近的 2 条消息。若要更改,请修改"查询消息数"的值。此值也用于从数据库查找相关内容。

历史消息的相关性得分至少需要达到 25% 才会被纳入。你可以通过"得分阈值"更改此设置。得分阈值设置与数据库共享。

聊天历史中最相关的 3 条消息会被移动。你可以通过"插入数量"更改此设置。

为避免打扰聊天中最近发生的事件,最近的 5 条消息不会被移动。若要更改,请修改"保留数量"的值。

移动消息(增强生成)

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

  • 聊天顶部,位于主提示词/故事字符串之后(默认)
  • 聊天顶部,位于主提示词/故事字符串之前
  • 聊天末尾,位于最后 2 条消息之前("聊天内 @ 深度 2")。由于你刚发送了一条消息,此位置通常就在模型上一次回复之前。

你可以通过"注入位置"和"深度"更改此设置。

消息按相关性排序显示,相关性更高的消息排在后面。

每条消息的发送者姓名或角色名会一并显示。

消息以"过去事件"的形式呈现给模型。这有助于模型理解这些消息包含来自聊天历史中不同时间点的信息,而不是当前插入位置的信息。你可以通过"注入模板"更改此设置。

你可以通过提示词详情弹窗、终端日志或浏览器控制台日志查看发送给模型的最终提示词。浏览器控制台日志对于理解聊天向量化中所有步骤的执行过程非常有用。

向量摘要

向量摘要旨在提高聊天消息向量搜索的效果。它通过在向量化之前引入摘要步骤来实现这一目标。摘要步骤提取消息中最重要的部分,使生成的向量能更好地反映消息的主题。

向量摘要也可能使向量搜索效果变差。

若要对聊天历史中的消息进行摘要并为每条摘要消息生成向量,请选择"为向量生成摘要聊天消息"。

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

若要对用于搜索聊天历史的消息内容(默认为最后 2 条消息)进行摘要,请选择"发送时摘要聊天消息"。

每次对消息进行摘要向量化时,都会向摘要模型发起单独的请求。你可以通过"使用以下来源摘要"选择摘要来源。选择"主 API"将使用与生成聊天或文本补全相同的模型和连接设置来生成摘要。

请求由原始消息内容和关于模型如何生成摘要的指令组成。你可以通过"摘要提示词"更改该指令。