菜单

聊天服务

相关源文件

聊天服务是 PrivateGPT 的核心组件,提供带或不带摄取文档上下文检索的对话功能。本页面介绍了聊天服务的架构和功能,特别侧重于其检索增强生成(RAG)管道的实现。

有关使文档可用于聊天上下文的摄取过程的信息,请参阅摄取服务

概述

聊天服务使用户能够与语言模型交互,并可选择使用从向量存储中检索到的文档上下文。它支持标准对话响应(不带文档上下文)和上下文增强响应,其中检索到相关文档块并包含在提示中。

来源:private_gpt/server/chat/chat_service.py78-106

关键组件

ChatService 类

ChatService 类被实现为单例,作为 PrivateGPT 中聊天功能的主要入口点。

来源:private_gpt/server/chat/chat_service.py34-42 private_gpt/server/chat/chat_service.py44-75 private_gpt/server/chat/chat_service.py78-106

返回类型

聊天服务使用两种主要返回类型:

  1. Completion:用于同步聊天响应
    • 包含完整的响应文本和所有使用的源块
  2. CompletionGen:用于流式聊天响应
    • 包含用于流式响应的令牌生成器
    • 还包含所有使用的源块

这两种类型都包含一个可选的 sources 字段,在使用 RAG 时,该字段提供了构成响应的文档块的引用。

来源:private_gpt/server/chat/chat_service.py34-42

RAG 流程

检索增强生成(RAG)管道是聊天服务的一个关键功能,它允许响应基于文档上下文。

来源:private_gpt/server/chat/chat_service.py108-147

RAG 组件

  1. 向量索引检索器

    • 根据语义相似性检索相关文档块
    • 可通过 context_filter 进行过滤以限制文档范围
    • 通过 similarity_top_k 参数配置以控制结果数量
  2. 节点后处理器

    • MetadataReplacementPostProcessor:用窗口内容替换元数据
    • SimilarityPostprocessor:根据相似度阈值过滤结果
    • SentenceTransformerRerank:可选的重排以提高相关性
  3. 上下文聊天引擎

    • 构建包含检索到的上下文的提示
    • 通过 LLM 路由对话

来源:private_gpt/server/chat/chat_service.py108-147

聊天流程

聊天服务提供两种主要的聊天交互方法:

消息处理

在生成响应之前,聊天服务使用 ChatEngineInput 类处理输入消息

  1. 提取任何系统消息(第一个角色为 SYSTEM 的消息)
  2. 识别最后一条用户消息
  3. 收集剩余消息作为聊天历史

来源:private_gpt/server/chat/chat_service.py50-75

响应生成

聊天服务提供两种响应生成模式:

  1. 同步(chat 方法)

    • 将消息处理为 ChatEngineInput
    • 创建相应的聊天引擎(上下文或简单)
    • 生成完整响应
    • 返回包含响应和源的 Completion 对象
  2. 流式传输(stream_chat 方法)

    • 与同步过程类似,但返回 CompletionGen
    • 响应逐令牌流式传输
    • 实现模型输出的实时显示

来源:private_gpt/server/chat/chat_service.py149-183 private_gpt/server/chat/chat_service.py185-217

高级特性

上下文过滤

聊天服务支持使用 ContextFilter 对象过滤文档上下文,该对象可以将检索限制为特定的文档 ID 或元数据条件。

相似度控制

两个参数控制检索到的上下文的相关性:

  1. similarity_top_k:要检索的上下文块的最大数量
  2. similarity_value:包含块的最小相似度阈值

重排

启用后,重排功能使用句子转换器模型对检索到的文档应用第二阶段排序

来源:private_gpt/server/chat/chat_service.py121-135

与存储系统的集成

聊天服务依赖于多个存储组件才能运行

存储系统在 ChatService 构造期间初始化

来源:private_gpt/components/node_store/node_store_component.py14-68

初始化过程

在初始化期间,聊天服务会执行以下操作:

  1. 通过依赖注入接收所需组件
  2. 使用向量存储和节点存储组件创建存储上下文
  3. 从向量存储创建向量存储索引
  4. 使用 LLM 和嵌入模型配置索引

来源:private_gpt/server/chat/chat_service.py82-106

典型使用模式

功能目的何时使用
chat()完整响应生成需要在显示前获得完整响应
stream_chat()流式响应生成希望在生成时显示响应
_chat_engine(use_context=False)无上下文的简单聊天仅需对话式 LLM
_chat_engine(use_context=True)启用 RAG 的聊天需要基于文档的答案

每个函数都接受消息输入,并返回一个 CompletionCompletionGen 对象,其中包含响应以及用于生成响应的任何源文档。

来源:private_gpt/server/chat/chat_service.py108-217